php 属性 扩展 设计,父类的属性继承与扩展-2018年5月4日8点20

示意图:

adee3916a689a37f292bd191dcec8578.png

重点提示:protected 只能在本类或子类使用,初始化函数必须使用构造方法 __construct(),子类继承父类使用extends,子类的作用是继承和重载父类的某些功能,外部访问需创建查询器__get(),调用使用::,自动加载函数spl_autoload_register(function($className){},

父类.php

/**

* protected 只能在本类或子类使用的类成员

*/

class MobilePhone

{

protected $brand;   ///品牌

protected $model;   ///型号

protected $price;

//构造方法

public function __construct($brand,$model,$price)

{

$this->brand = $brand;

$this->model = $model;

$this->price = $price;

}

public function call()  ///创建call()方法

{

return '打电话';

}

}

子类.php

/**

* 1.类继承:在子类上使用关键字extends

* 2.php不支持多继承,仅允许从一个父类上继承

* 3.父类又叫超类或基类,通常只提供一些最基本的功能  MobilePhone(父类,超类,基类)

* 4.子类又叫派生类,可以继承父类中的公共和受保护的成员

*

* 子类的功能是用来扩展或重载父类的某些功能

*/

class SmartPhone extends MobilePhone

{

//1.无需任何代码,父类MobilePhone中的所有公共和受保护的成员,在当前类中可以直接访问

//创建查询器,实现了外部访问

public function __get($name)

{

return $this->$name;

}

//1.对父类属性进行扩展,增加新的特征,如果不在子类中使用,推荐设置为private

private $camera = false;  //是否有照相功能

private $internet = false; //是否有上网功能

//必须使用构造方法对使用当前新增属性生效,对属性进行初始化,要用构造器

public function __construct($brand,$model,$price,$camera,$internet)

{

//调用父类构造器初始化类属性

parent::__construct($brand, $model, $price);

$this->camera = $camera;

$this->internet = $internet;

}

//2.增加新的方法,扩展父类的功能

public function game()

{

return '玩游戏';

}

//3.将父类方法进行重写,就是功能重载,必须使用与父类一样的方法名:call()

public function call()

{

//但更多的时候,我们并不会放弃原有功能,而只是在它上面进行追回而已

//那么,如何在子类中引用父类中的方法呢? 使用关键字: parent,后面跟上双冒号::

return parent::call().',同时还能听歌,看视频';

}

}

调用.php

header("Content-type:text/html;charset=utf-8");

/*

* 父类的继承与方法重载

*/

//使用自动加载器来加载类:(简写版)

spl_autoload_register(function($className){

require './class/'.$className.'.php';

});

/**

* 如果才能正常访问这些属性呢?

* 有二个方案来实现

* 1.将父类MobilePhone中的相关属性的访问控制全部设置为public

* 2.将父类MobilePhone中的相关属性的访问控制全部设置为protected,并在子类SmartPhone中创建查询器

* 我们采用第二种方案

*/

$smartPhone = new SmartPhone('HUAWEI','P20', 5488,true,true);

//下面我们换一组数据来初始化对象,验证parent::__contrunctor()

$smartPhone = new SmartPhone('MI','MIX2', 3599,true,true);

echo '品牌: '.$smartPhone->brand.'
';

echo '型号: '.$smartPhone->model.'
';

echo '价格: '.$smartPhone->price. '
';

//下面输出二个在子类中扩展的属性 三维运算

echo '照相:'.($smartPhone->camera?'支持':'没有').'
';

echo '上网:'.($smartPhone->internet?'支持':'没有').'
';

echo $smartPhone->call().'
'; //call()是父类中的方法

echo $smartPhone->game().'
'; //game()是子类中的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值