博客列表 >通过Trait实现不同类的method代码复用 2018年5月7日

通过Trait实现不同类的method代码复用 2018年5月7日

墨雨的博客
墨雨的博客原创
2018年05月08日 18:48:24725浏览

RepairShops.php(修理厂)和Distributor.php(经销商)是继承于父类Customer.php(客户)的两个子类,AdvertisingTheme.php(在客户门店投放广告的主题)是用Trait定义的类方法,在上述两个子类定义时用 use 调用Trait代码实现AdvertisingTheme方法的代码复用。

1.Customer.php


实例

<?php

/*
 * 客户类
 */

/**
 * Description of Customer
 *
 * @author Dell
 */
class Customer
{
    protected $name;  //名称
    protected $address;  //地址
    protected $phone;  //电话
    protected $linkman; //联系人
    public function __construct($name,$address,$phone,$linkman)
    {
    $this->name = $name;    
    $this->address = $address;    
    $this->phone = $phone;    
    $this->linkman = $linkman;    
    }
    public function call()   //回访
    {
        echo '电话回访';
        
    }
}

运行实例 »

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

2.AdvertisingTheme.php

实例

<?php

/* 
 * 投放广告主题
 */
//声明trait类:AdvertisingTheme
if(!trait_exists('AdvertisingTheme')){
    trait AdvertisingTheme
    {
            public function theme($theme)
        {
            return $theme;
        } 
        
        }
    }

运行实例 »

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

3.RepairShops.php


实例

<?php

/*
 * 汽修厂类 继承 客户类
 */

/**
 * Description of RepairShops
 *
 * @author Dell
 */
class RepairShops extends Customer
{
   use AdvertisingTheme;
    //创建查询器访问父类受保护的属性
    public function __get($name) {
        return $this->$name;
    }
    private $project; //维修项目
    private $repairman; //修理工人数
    public function __construct($name,$address,$phone,$linkman,$project,$repairman) {
       //调用父类构造器
        parent::__construct($name, $address, $phone, $linkman);
        $this->project = $project;
        $this->repairman = $repairman;
    }
    //重写父类方法
    public function call() {
        return parent::call().'.询问'.$this->project.'是不是要用'.$this->repairman.'个人?';
    }
  
}

运行实例 »

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

4.Distributor.php


实例

<?php

/* 
 * 经销商类
 */
/**
 * Description of Distributor
 *
 * @author Dell
 */
class Distributor extends Customer
{
    //创建查询器访问父类受保护的属性
    public function __get($name) {
        return $this->$name;
    }
    public function __construct($name,$address,$phone,$linkman) {
       //调用父类构造器
        parent::__construct($name, $address, $phone, $linkman);
    }
    use AdvertisingTheme;
}

运行实例 »

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

5.验证代码m.php


实例

<?php

/* 
 * 类的继承与方法重载
 * 
 */

//使用自动加载器来加载类:(简写版)
spl_autoload_register(function($className){
    require './class/'.$className.'.php'; 
});


$repair = new RepairShops('冀东汽修','曹妃甸区海港路','03155555555','凌云','保养变速箱',4);
//父类中的属性
echo '名称: '.$repair->name.'<br>'; 
echo '地址: '.$repair->address.'<br>'; 
echo '电话: '.$repair->phone. '<br>';
echo '联系人: '.$repair->linkman. '<br>';
//在子类中扩展的属性
echo '项目:'.$repair->project.'<br>';
echo '人数:'.$repair->repairman.'<br>';


echo  '店面投放广告主题:'.$repair->theme('丰通润滑油修理厂专用版面').'<br>'; 

echo '<hr>';

$dist = new Distributor('四通汽配商行','乐亭县乐港路西高村头','03154534445','李海民');
//父类中的属性
echo '名称: '.$dist->name.'<br>'; 
echo '地址: '.$dist->address.'<br>'; 
echo '电话: '.$dist->phone. '<br>';
echo '联系人: '.$dist->linkman. '<br>';


echo  '店面投放广告主题:'.$dist->theme('安庆ATG户外-跨路版').'<br>';

运行实例 »

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

6.验证代码执行截图

草图.png

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议