PHP多继承实现--Traits

---恢复内容开始---

PHP 5.4.0 开始,PHP 实现了代码复用的一个方法,称为 traits。

Traits 是PHP中一种类似多继承的方法。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类相关的典型问题。

Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;

我理解的是 Trait 就是一个不需要继承,可以复用的类。

Trait 的两个简单用例

Trait 的使用

<?php
class Base {
    public function Hello() {
        echo ‘Hello ‘;
    }
}

trait Word{
    public function hello() {
        parent::Hello();
        echo ‘World!‘;
    }
}

class HelloWord extends Base {
    use World;
}

$o = new HelloWord ();
$o->Hello();
?>

在Traits里面调用Traits

trait Hello {
    public function Hello() {
        echo ‘Hello ‘;
    }
}

trait World {
    public function World() {
        echo ‘World!‘;
    }
}

trait HelloWorld {
    use Hello, World;
}

class base {
    use HelloWorld;
}

$o = new base();
$o->Hello();
$o->World();

参考地址:

http://www.php.net/manual/zh/language.oop5.traits.php

---恢复内容结束---

时间: 2024-10-03 14:51:01

PHP多继承实现--Traits的相关文章

PHP系列之一traits的应用

Traits 在PHP中实现在方法的重复使用:Traits与Class相似,但是它能够在Class中使用自己的方法而不用继承: Traits在Class中优先于原Class中的方法,引用PHP Document中的例子: <?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo '

PHP中的面向对象

访问控制(可见性) PHP的访问控制有 public(公有),protected(受保护)和 private(私有) 被定义为公有的类成员可以在任何地方被访问. 被定义为受保护的类成员则可以被其自身以及其子类和父类访问. 被定义为私有的类成员则只能被其定义所在的类访问. 不能用于修饰class 类属性不能省略,必须定义为公有,受保护,私有之一. 类中的方法如果没有设置这些关键字,则该方法默认为公有. 同一个类的对象即使不是同一个实例也可以互相访问对方的私有与受保护成员.这是由于在这些对象的内部具

more exceptional c++简要笔记

1.流 尽量提高可读性,避免撰写精简代码 在c++中,有四种方法获得多态行为:虚函数.模板.重载和转换2.predicates:状态带来的问题 3.可扩充的模板:使用继承还是traits? 4.typename 5.容器.指针和“不是容器的容器” 6.使用vector和deque 7.使用set和map 8.模板特殊化与重载 9.内联 10.内存增长分配策略比较 11.缓式拷贝 12.C++的构造函数模型: 构造函数正常返回,即控件抵达函数体的尾部或者执行了一个return语句.此情况下对象真实

C++学习书籍推荐《More Exceptional C++》下载

百度云及其他网盘下载地址:点我 编辑推荐 <More Exceptional C++:40个新的工程难题.编程疑问及解决方法(中文版)>作为广为人知的<Exceptional C++>的续篇,采取了实用的"提问--解答"的组织形式,为C++中现实世界问题的解决提供了各种成功的策略.根据多年的一线经验,Herb Sutter为C++软件系统(从小项目到企业级应崩)没计人员提供了经过测试的技术和实用的解决方案.围绕着40个编程难题,<More Exceptio

C++ traits技术浅谈

前言 traits,又被叫做特性萃取技术,说得简单点就是提取"被传进的对象"对应的返回类型,让同一个接口实现对应的功能.因为STL的算法和容器是分离的,两者通过迭代器链接.算法的实现并不知道自己被传进来什么.萃取器相当于在接口和实现之间加一层封装,来隐藏一些细节并协助调用合适的方法,这需要一些技巧(例如,偏特化).最后附带一个小小的例子,应该能更好地理解 特性萃取. 下面大部分来源于<STL源码剖析>,看原书能了解更多细节. Traits编程技法 让我们一点点抛出问题,然后

c++模板元编程七:类型判断的traits类

2 用于判断类型的traits类 is_void类可以判断模板参数的类型,使用很简单,注意,也可以直接使用::value. cout << std::is_void<void>::type::value << endl; cout << std::is_void<bool>::type::value << endl; 但是实现很有趣,特化居然可以用来继承不同的类.这里没有去找clang++实现代码,用boost代码代替吧. templ

转:PHP 5.4中的traits

原文来自于:http://www.cnblogs.com/thinksasa/archive/2013/05/16/3081247.html PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西.       Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化.先来例子看下语法: <?php trait myTrait{ function t

traits技法小计

在学习算法导论的时候,对于各数据结构,自然是实现一个才算掌握,工具当然是template编程,但是自己的demo经常存在很多问题,比如没有给出迭代器啊,操作符重载不够啊等等设计上的问题,而某些问题实际上是从设计之初就该考虑的大框架,而非小细节.对于C++而言,STL无疑是最佳的参考资料,侯捷先生的STL源码剖析一书给我们良好的示范,而直接从第四章开始看会云里雾里,无法得其精髓,因此在学习算法之余决定尾随侯捷先生脚步,学习STL traits技法,从而可以从STL中学到更多的数据结构实现. 收获自

PHP中的traits

PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西.Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化.先来例子看下语法: <?php trait myTrait{ function traitMethod1(){} function traitMethod2(){} } //然后是调用这个traits,语法为: class myClass