博主信息
墨雨的博客
博文
46
粉丝
3
评论
2
访问量
22352
积分:1
P豆:342.53

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

2018年05月08日 18:48:24阅读数:384博客 / 墨雨的博客/ PHP中文网2期培训班作业

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举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论