PHP类的继承
每个子类(也叫派生类)都会在设置自己的属性前调用父类的构造方法。父类(也叫基类或超类)现在仅知道自己的数据,子类一般是父类的特例,要避免告诉父类任何关于子类的信息
以下为一个使用继承的实例:
<?php
class ShopProduct{
private $title; // 属性也称为成员变量,用来存放对象之间互不相同的数据
private $producerMainName; // 所有的属性都设置为 private,不允许外部直接访问这些属性,然后提供方法来取得需要的值
private $producerFirstName;
protected $price; // 阻止外面直接访问该属性,可以被子类访问
private $discount = 0;
// 创建对象时,构造方法会被自动调用,构造方法可以确保必要的属性设置,并完成任何需要准备的工作
public function __construct($title,$mainName,$firstName,$price){
$this->title = $title; // 使用伪变量$this给每个变量赋值
$this->producerMainName = $mainName;
$this->producerFirstName = $firstName;
$this->price = $price;
}
/**
* @return mixed 这种只返回属性值的方法称为“访问方法”,也称为 getter 和 setter
*/
public function getProducerFirstName()
{
return $this->producerFirstName;
}
/**
* @return mixed 获取 姓 的访问方法
*/
public function getProducerMainName()
{
return $this->producerMainName;
}
/**
* @param $num 打折的价格
*/
public function setDiscount($num)
{
$this->discount = $num;
}
/**
* @return int 折扣的访问方法
*/
public function getDiscount()
{
return $this->discount;
}
/**
* @return mixed Book名或CD名的访问方法
*/
public function getTitle()
{
return $this->title;
}
/**
* @return mixed 折扣后的价格
*/
public function getPrice()
{
return ($this->price - $this->discount);
}
/**
* @return string 作者
*/
public function getProducer(){ // 方法让对象执行任务
return $this->producerMainName .' '. $this->producerFirstName;
}
/**
* @return string 发票的摘要信息
*/
public function getSummaryLine()
{
$base = "{$this->title} ( {$this->producerMainName},{$this->producerFirstName}) ";
return $base;
}
}
// 若派生类没有定义构造方法,则它在实例化是会自动调用父类的构造方法。子类默认继承父类所有的 public 和 protected 方法,但不继承 private 方法和属性
class BookProduct extends ShopProduct
{
private $numPages;
// 每个子类在设置自己的属性前调用父类的构造方法,基类现在仅知道自己的数据,子类一般是父类的特列,应该避免告诉父类任何关于子类的消息。
public function __construct($title,$mainName,$firstName,$price,$numPages)
{
// parent 关键字可以在任何复写父类方法的方法中使用,通过在当前对象中调用父类的方法来拓展父类的功能 , 要应用一个类而不是对象的方法,使用 :: 而不是 ->
parent::__construct($title,$mainName,$firstName,$price);
$this -> numPages = $numPages;
}
/**
* @param $numPages 书的页数
* @return mixed 总页数
*/
public function getNumberOfPages()
{
return $this->numPages;
}
/**
* 子类(派生类)可以覆盖和修改父类(基类或超类)的功能
* @return string Book发票的摘要信息
*/
public function getSummaryLine()
{
$base = parent::getSummaryLine();
$base .= "page count - {$this->numPages}";
return $base;
}
}
class CdProduct extends ShopProduct
{
private $playLength;
public function __construct($title,$mainName,$firstName,$price,$playLength)
{
parent::__construct($title,$mainName,$firstName,$price);
$this -> playLength = $playLength;
}
/**
* @return int 播放时间
*/
public function getPlayLength()
{
return $this -> playLength;
}
/**
* @return string CD发票的摘要信息
*/
public function getSummaryLine()
{
$base = parent::getSummaryLine();
$base .= "playing time - {$this->playLength}";
return $base;
}
}
$product1 = new BookProduct('Kong Yiji','Lun','Xun',59.9,200);
$product2 = new CdProduct('The Saltwater Room','Owl','City',10.99,4);
print "author : {$product1 -> getProducer()} </br>"; // author :Lun Xun
print "book summary line: {$product1 -> getSummaryLine()}</br>"; // book summary line :Kong Yiji ( Lun,Xun) page count - 200
print "artist : {$product2 -> getProducer()} </br>"; // artist :Owl City
print "play length :{$product2 ->getPlayLength()}</br>"; // play length :4
本文是我阅读了《深入PHP 面向对象、模式与实践》一书的第三章中关于继承的部分后所作
如有转载,请注明出处:http://www.cnblogs.com/chrdai/p/6860818.html
PHP类的继承的更多相关文章
- UML类图(上):类、继承和实现
面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- (转)Java:类与继承
原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...
- iBatis.net 类的继承extends和懒加载
<resultMaps> <resultMap id="FullResultMap" class="t_c_team_member_permission ...
- python 类定义 继承
0 前言 系统:win7 64bit IDE : python(x,y) 2.7.6.1 IDE集成的解释器:Python 2.7.6 (default, Nov 10 2013, 19:24:18) ...
- JS原型继承和类式继承
前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...
- Java编程里类的继承
今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...
- Java:类与继承
Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...
- swift_Class类的继承
//: Playground - noun: a place where people can play var str = "Hello, playground" //***** ...
- C#类的继承,方法的重载和覆写
在网易云课堂上看到唐大仕老师讲解的关于类的继承.方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解. 小总结: 1.类的继承:允许的实例化方式:Student t=new Student() ...
随机推荐
- 配置samba文件服务器
1.打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入当前登录用户的管理员密码"--> ...
- 提高delete效率方法
1 open c_1; loop fetch c_1 bulk collect into t2 limit 100000; exit when c_1%notfound ...
- 读SRE Google运维解密有感(三)
前言 这是读“SRE Google运维解密”有感第三篇,之前的文章可访问www.addops.cn来查看.我们今天来聊聊“on call”也就是运维值班制度, 本人到目前为止也还在参与一线运维的值班, ...
- 基于url拦截
- sklearn,交叉验证中的分层抽样
StratifiedKFold用法类似Kfold,但是他是分层采样,确保训练集,测试集中各类别样本的比例与原始数据集中相同. 例子: import numpy as np from sklearn.m ...
- hdu4578线段树区间更新
/* 只有在区间中的数字不相同时才pushdown:往子区间传递数字再到子区间更新,同时该区间的flag置0 更新完左右子区间后进行pushup,如果左右子区间数字相同,那么把子区间合并,子区间数字置 ...
- python 全栈开发,Day55(jQuery的位置信息,JS的事件流的概念(重点),事件对象,jQuery的事件绑定和解绑,事件委托(事件代理))
一.jQuery的位置信息 jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集 ...
- C# byte数组与Image的相互转换【转】
功能需求: 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库. 2.把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示. 3.从图片byte ...
- Oracle中数值的计算
运算符 含义 · +(加) 加法 · ||(加) 字符串相加 · -(减) 减法 · *(乘) 乘法 · /(除) 除法 · mod(模)返回一个除法的整数余数 例如,12 % 5 ...
- 【C++ Primer | 15】构造函数与拷贝控制
合成拷贝控制与继承 #include <iostream> using namespace std; class Base { public: Base() { cout << ...