博主信息
博文 46
粉丝 3
评论 2
访问量 47059
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
通过Trait实现不同类的method代码复用 2018年5月7日
墨雨的博客
原创
919人浏览过

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学