码迷,mamicode.com
首页 > Web开发 > 详细

PHP面向对象编程(二)

时间:2020-07-19 23:42:20      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:水平   pre   依赖   his   prot   this   一个   垂直   基本使用   

通过对象组合水平扩展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定义:

<?php

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 和类一样,支持属性和方法以及可见性设置(privateprotectedpublic),并且即使是 private 级别的方法和属性,依然可以在使用类中调用:

<?php

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中定义的属性类中就不能在重复定义了。

PHP面向对象编程(二)

标签:水平   pre   依赖   his   prot   this   一个   垂直   基本使用   

原文地址:https://www.cnblogs.com/bigcola/p/13341648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!