php 面向对象编程,PHP面向对象编程(二)

通过对象组合水平扩展PHP类功能

基本实现

所谓对象组合,简而言之,就是在一个类中组合(或者说依赖)另一个类而不是继承另一个类来扩展他的功能,如果说类继承是垂直扩展类功能,那么对象组合则是水平扩展类功能,某种角度说,这也是对单继承机制的一种补充,是的类具有水平扩展的功能。

//以汽车和动力来源的关系举例子,汽车依靠汽油或者电力才能启动

interface CarContract

{

public function drive();

public function power(Gas $gas);

}

abstract class BaseCar implements CarContract

{

protected $brand;

public function __construct($brand)

{

$this->brand = $brand;

}

abstract public function drive();

abstract public function power(Gas $gas);

}

class LynkCo01 extends BaseCar

{

public function __construct()

{

$this->brand = ‘领克01‘;

}

public function drive()

{

echo "启动{$this->brand}汽车" . PHP_EOL;

}

public function power(Gas $gas)

{

echo "动力来源: " . $gas . PHP_EOL;

}

}

通过Trait 水平扩展PHP类功能。

基本使用

Trait结构通过关键字Trait定义:

trait Power

{

protected function gas()

{

return ‘汽油‘;

}

protected function battery()

{

return ‘电池‘;

}

}

类中通过use关键字引入

class Car

{

use Power;

public function drive()

{

echo "动力来源:" . $this->gas() . PHP_EOL;

echo "汽车启动..." . PHP_EOL;

}

}

可见性

Trait 和类一样,支持属性和方法以及可见性设置(private、protected、public),并且即使是 private 级别的方法和属性,依然可以在使用类中调用:

trait Power

{

protected function gas()

{

return ‘汽油‘;

}

public function battery()

{

return ‘电池‘;

}

private function water()

{

return ‘水‘;

}

}

class Car

{

use Power;

public function drive()

{

echo "动力来源:" . $this->water() . PHP_EOL;

echo "切换动力来源:" . $this->battery() . PHP_EOL;

echo "切换动力来源:" . $this->gas() . PHP_EOL;

echo "汽车启动..." . PHP_EOL;

}

}

$car = new Car();

$car->drive();

使用Trait不同于类继承,完全是把Trait的所有代码组合到类中,变成了类的一部分,所以Trait中定义的属性类中就不能在重复定义了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值