php class 使用场景,实例演示子类和类成员的应用场景--2019年09月30日

实例演示子类的三个应用场景;实例演示类成员的三种访问限制符的使用场景

复习面向对象开发中的静态成员,类常量,属性重载,方法重载,抽象成员,接口知识;

实例说明:

1、创建一个汽车类,包含成员属性有:***、型号、价格,且价格为私有属性;

包含的成员方法:run()和价格访问器getprice($user),根据$user身份决定是否显示价格;

2、从汽车类中派生一个子类Power_car,用来表明汽车的动力源;

Power_car子类继承父类Car的所有属性和方法;

在子类中,可以实现代码复用:比如实例中的__construct()方法,或使用父类的成员方法;

可以实现功能扩展:比如在子类中新增$power属性和powerby()方法;

可以实现代码重写:比如子类中对run()方法进行重写。

3、实例中使用了三种访问控制符:public、private、protected;

使用访问控制符的主要作用是防止外部非正常的访问,污染类中的成员属性或方法,所有对private、protected保护的类属性进行访问时,都需要经过“访问控制器”的管控。

三种访问控制符的使用场景为:public :       类内外、子类中都可以访问 ;

protected:    类中和子类中都可以访问,但类外不可以;

private:    仅在类中可以,类外不和 子类中不可以访问

实例代码如下:实例

namespace com\php\www;

//声明一个汽车类Car

class Car {

//三个类成员属性:

//访问控制符:public:类中、类外、子类均可访问;

// private:仅类中可以访问,类外和子类都不能访问;

// protected:类中和子类可以访问,但类外不可访问;

public $brand;

public $type;

private $price;

//构造方法:在实例化时自动执行,可在此初始化对象,或完成一些需要自动执行的操作;

public function __construct($brand, $type, $price) {

//类中对对象的引用,使用伪变量$this;

//对类自身的引用,使用关键字 self;

$this->brand = $brand;

$this->type = $type;

$this->price = $price;

}

//定义一个类成员方法

public function run() {

return '汽车 可以跑';

}

//价格访问器:定义一个成员方法,用来访问private的成员属性,可在此增加相应的限制条件

public function getprice($user) {

return ($user === '会员') ? ($this->brand . '-' . $this->type . ' 价格:' . $this->price) : '无权查看!';

}

}

$obj = new Car('奥迪', 'Q5', 320000);

echo $obj->run();

echo '
';

echo $obj->getprice('访客');

echo '


';

//定义一个子类Power_car,继承和扩展父类的方法

class Power_car extends Car {

protected $power;

//构造方法的扩展,增加一个$power,动力属性

public function __construct($brand, $type, $price, $power) {

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

$this->power = $power;

}

//为子类新增一个方法powerby(),说明汽车使用什么能源驱动;

public function powerby() {

return (empty($this->power) ? '未知能源类型' : $this->power) . ' 汽车';

}

//run()方法重写

public function run() {

switch (true) {

case $this->power === '汽油':

return '汽车 加“汽油” 就可以跑';

break;

case $this->power === '电动':

return '汽车 充“电” 就可以跑';

break;

default:

return '汽车 使用未知的能源类型';

break;

}

}

}

$obj = new Power_car("奔驰", "GLC300", 500000, "汽油");

echo $obj->powerby(), '
';

echo $obj->run(), '
';

echo $obj->getprice('会员'), '
';

echo '


';

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

1、练习并初步掌握类的封装、继承和多态;

2、熟悉了子类的代码复用、功能扩展、代码重写,以及访问控制符的使用场景;

3、需要注意:子类重写父类方法时,一定要 高于或等于 父类被覆盖方法的访问权限;

疑问:类中被声明为private的方法,在外部用什么方法可以使用??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值