`

PHP 5.4中的traits初探

    博客分类:
  • PHP
阅读更多
PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好。其实际
的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个
东西。
  Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!
不能被实例化。先来例子看下语法:

  trait myTrait

{

function traitMethod1()

{


}

function traitMethod2()

{


}

}

    然后是调用这个traits,语法为:
class myClass

{

use myTrait;

}
  这样就可以通过use myTraits,调用Traits中的方法了,比如:
$obj = new myClass();


$obj-> traitMethod1 ();

$obj-> traitMethod2 ();
  
  接下来,我们探究下为什么要用traits,举个例子,比如有两个类,分别为business(商务者)和Individual(个人),它们都有地址的属性,传统的做法是,再抽象出一个这两个类都共同有特性的父类,比如client,在client类中设置访问属性address,business和individual分别继承之,如下代码:
// Class Client

class Client

{

private $address;

public getAddress() {

return $this->address;

}

public setAddress($address) {

$this->address = $address;

}

}

class Business extends Client

{

  //这里可以使用address属性
}

// Class Individual

class Individual extends Client

{

  //这里可以使用address属性

}

    但假如又有一个叫order类的,需要访问同样的地址属性,那怎么办呢?order类是没办法继承client类的,因为这个不符合OOP的原则。这个时候traits就派上用场了,可以定义一个traits,用来定义这些公共属性。
 

// Trait Address

trait Address

{

private $address;

public getAddress() {

return $this->address;

}

public setAddress($address) {

$this->address = $address;

}

}

// Class Business

class Business

{

use Address;

// 这里可以使用address属性

}

// Class Individual

class Individual

{

use Address;

//这里可以使用address属性

}

// Class Order

class Order

{

use Address;

////这里可以使用address属性

}
   看,这样就方便很多了
2
1
分享到:
评论
3 楼 jjiale 2016-12-29  
hnlixf 写道
  但假如又有一个叫order类的,需要访问同样的地址属性,那怎么办呢?order类是没办法继承client类的,因为这个不符合OOP的原则。

order没办法继承client类,国为不符合oop的原则。这个能说具体一些吗?不太懂。谢谢


懂毛线,因为你这个破问题,导致我朋友纠结半天。

client是客户的意思,客户类包含一些客户的信息什么的,很多的属性,比如客户分男女,客户有地址,客户有电话,客户有xxxx属性和方法;公司和个人都属于客户吧。订单是你客户?订单是你客户?

能不能思考一下啊,醉了。
2 楼 hnlixf 2016-05-27  
  但假如又有一个叫order类的,需要访问同样的地址属性,那怎么办呢?order类是没办法继承client类的,因为这个不符合OOP的原则。

order没办法继承client类,国为不符合oop的原则。这个能说具体一些吗?不太懂。谢谢
1 楼 netkiller.github.com 2012-04-02  
php 离我越来越远

相关推荐

    PHP中的traits简单使用实例

    PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好。其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西。  Traits可以理解为一组能被不同的类都能调用到的...

    PHP中的traits实现代码复用使用实例

    PHP5.4后新增traits实现代码复用机制,Trait和类相似,但不能被实例化,无需继承,只需要在类中使用关键词use引入即可,可引入多个Traits,用’,’隔开。 (1)Trait简单使用 <?php trait A { public $var1 = '...

    详解PHP中的Traits

    PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法。php的Traits和Go语言的组合功能类似,通过在类中使用use关键字声明要组合的Trait名称,而具体某个Trait的声明使用trait...

    在 PHP 和 Laravel 中使用 Traits的方法

    在 PHP 5.4 中 一个新的语言特性被添加进来,这就是众所周知的 Traits,它在 Laravel 框架中被广泛使用。 PHP 官方网站给出了 Traits 的定义,如下: “ Trait 是单继承语言(如 PHP )中的一种代码复用机制。 Trai ...

    PHP之认识(二)关于Traits的用法详解

    PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法。Traits的出现解决了这一问题。 1、通过在类中使用use关键字声明要组合的Trait名称,而具体某个Trait的声明使用trait关键词...

    thinkPHP5.0框架引入Traits功能实例分析

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

    PHP 匿名函数与注意事项详细介绍

    PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改 PHP5.5:yield, list() 用于 foreach, 细节修改 PHP5.6: 常量增强,可变函数参数,命名空间增强 现在基本上都使用PHP5.3以后的版本,但是...

    C++ STL Template Traits使用代码

    设计一个Measurement计量单位类型,满足如下要求, 1.当为距离单位,当构造米或者千米等不同距离单位的实例时,统一以米为基本单位,实例调用description函数返回单位...注意:代码实现中运用了模板中的traits技术。

    c++_traits.pdf

    c++_traits Classes which encapsulate properties of types Is this an integer type? An arithmetic type? A pointer type?... Closely related to partial specialization

    对于PHP 5.4 你必须要知道的

    新特性与改动此次更新的关键新特性,包括:新增traits,更精简的Array数组语法,供测试使用的内建webserver,可以闭包使用的$this指针,实例化类成员访问,PHP 5.4.0 性能大幅提升, 修复超过100个bug. 废除了...

    traits-6.1.0-cp36-cp36m-win_amd64.rar

    包含内容:traits-6.1.0-cp36-cp36m-win_amd64.whl 安装tvtk需要 VTK-7.1.1-cp36-cp36m-win_amd64.whl numpy-1.12.1+mkl-cp36-cp36m-win_amd64.whl traits-4.6.0-cp36-cp36m-win_amd64.whl mayavi-4.5.0+vtk71-cp36...

    traits-4.6.0-cp36-cp36m-win_amd64.whl

    Python科学计算三维可视化应用中需要安装TVTK库,traits-4.6.0-cp36-cp36m-win_amd64.whl为安装TVTK库所需要的5个库之一,该库为64位的

    traits-4.6.0-cp34-cp34m-win32

    traits-4.6.0-cp34-cp34m-win32

    traits-6.2.0-cp310-cp310-win32

    traits-6.2.0-cp310-cp310-win32

    Python库 | link_traits-1.0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:link_traits-1.0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    英语写作六要素the traits of English writingPPT课件.pptx

    英语写作六要素the traits of English writingPPT课件.pptx

    PHP 实现代码复用的一个方法 traits新特性_.docx

    PHP 实现代码复用的一个方法 traits新特性_.docx

Global site tag (gtag.js) - Google Analytics