Blogger Information
Blog 46
fans 3
comment 2
visits 39276
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
通过Trait实现不同类的method代码复用 2018年5月7日
墨雨的博客
Original
726 people have browsed it

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

Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post