博主信息
博文 55
粉丝 0
评论 0
访问量 61315
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP-Trait类的声明与工作原理-0905
Bean_sproul
原创
792人浏览过

php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性


实例

<?php
/**
 * Trait 是什么东西?
 * 1. php 只能实现单继承,trait打破了限制
 * 2. trait 是代码复用机制(函数, 类的继承)
 * 3. trait 使的类的语法,但不是类,所以不能实例化new
 * 4. triat 相当于方法集
 */


if (!class_exists('Person')) //小技巧 判断类名是否重复
{
    class Person
    {
        protected $name;
        public function __construct($name='小明')
        {
            $this->name = $name;
        }
        public function study($course='php')
        {
            return $this->name . '在学习: ' . $course;
        }
    }
}
// 创建一个trait特性类
trait Course
{
    public $frient = '小华';
    public function study($name='踢足球')
    {
        return $this->name .'在学习'. $name;
    }
}

trait Recreation
{
    public $friend = '小军';
    public function study($name='打篮球')
    {
        return $this->name.'和'.$this->friend.$name;
    }
}

//问题1: 父类Person与triat类Course之间的关系?
// trait 类位于 Person 与 Student之间
class Student extends Person
{
//    use Course;  // 导入了一个trait 类
//    use Recreation;

    use Course, Recreation {
        Course::study insteadof Recreation;//将course中的study这个方法替换成Recreation中的
        Recreation::study as MySport;//访问并给个别名
    }
}

$student = new Student();

echo $student->study(), '<hr>';
echo $student->MySport(), '<hr>';

运行实例 »

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


批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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

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