博客列表 >trait实例,实现代码复用----2018年5月10日17时10分发布(5月7日作业)

trait实例,实现代码复用----2018年5月10日17时10分发布(5月7日作业)

lilove的博客
lilove的博客原创
2018年05月10日 17:17:00806浏览

主题:

写一个trait实例,实现代码复用。

代码效果:

QQ截图20180510171100.png

实例

<?php
/*
 * 使用trait扩展功能
 */

//判断类名Car是否存在,不存在则创建Car类(父类)
if(!class_exists('People'))
{
    class People
    {
        //创建受保护变量$name(私有变量不会被子类继承)
        protected $name = ''; 
        
        //使用构造函数__construct()初始化变量$name
        public function __construct($name='小明')
        {
            $this->name = $name;
        }
        
        //创建类方法buy(),参数为$shop
        public function buy($shop='4S')
        {
          return $this->name. '去'. $shop. '店';  
        }
    }
}

//创建第一个trait
if(!trait_exists('Car'))
{
    trait Car
    {
        private $bmw = '宝马';
        
        public function bmw()
        {
            return $this->bmw; 
        }
    }
}

//创建第二个trait
if(!trait_exists('Fruit'))
{
    trait Fruit
    {
        private $apple = '苹果';
        
        public function apple()
        {
            return $this->apple; 
        }
    }
}

//创建子类Person继承父类People
if(!class_exists('Person'))
{
    class Person extends People{
        
        //导入trait(如果方法名称、变量名称有重复冲突需要在这里使用insteadof、as处理)
        use Car, Fruit;
        
        private $fruitShop = ''; 
        
        public function fruitShop($fruitShop='水果店')
        {
            $this->fruitShop = $fruitShop;
        }
        
        public function fruit($fruit='苹果')
        {
          //$this->name是继承自父类的属性
          return $this->name. '去'. $this->fruitShop. '买'. $fruit;  
        }
    }
}

//实例化子类为一个对象
$php = new Person();

//子类调用父类中的方法
echo $php->buy('手机'). '<hr>';

//子类调用trait中的方法
echo $php->bmw(). '<hr>';
//子类调用trait中的方法
echo $php->apple(). '<hr>';

//子类的方法
echo $php->fruit('梨子');

运行实例 »

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

知识点:

  1. Trait无法实例化,必须由子类调用。

  2. 尽量不使用$this。

  3. Trait相当于一个类的“类库”。

  4. 主要目的是实现代码复用。

  5. 优先级:父类 < Trait < 子类

  6. Trait不是类,是一种机制,支持抽象、静态、属性。

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