`

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 离我越来越远

相关推荐

    php5.4中文手册

    1. **短数组语法**:在PHP5.4中,数组定义的语法得到了简化,可以使用`[]`代替`array()`创建数组,如`$arr = [1, 2, 3];` 2. **Traits**:这是一种代码重用机制,类似于其他语言中的“混入”或“多重继承”。Traits...

    PHP5.4 64位

    2. **Traits**:这是一个新的代码复用机制,类似于其他语言中的混入或接口实现,用于解决单继承限制下的代码重用问题。 3. **短数组语法**:PHP5.4开始支持更简洁的数组声明方式,如`[元素1, 元素2]`,使得代码更易...

    php 5.4 中文手册 chm 绝对可以用的!

    PHP 5.4作为PHP发展中的一个重要里程碑,引入了许多性能优化和新特性,使得开发速度得到了显著提升。以下是PHP 5.4中的一些关键知识点: 1. **命名空间(Namespaces)**:PHP 5.4引入了命名空间机制,类似于其他...

    PHP5.4最牛逼的中文手册

    “特点”章节将重点放在PHP5.4的新增功能和改进上,如 Traits 的引入、闭包的增强、新的数组操作等,这些新特性为开发者提供了更多的编程选择,使得代码更加简洁高效。 “函数参考”是手册的一大亮点,它提供了...

    php5.4 中文函数

    本文将深入探讨PHP 5.4中的中文函数,以及如何在实际开发中运用它们。 ### PHP 5.4 的主要改进 1. **命名空间(Namespaces)**:PHP 5.3引入了命名空间的概念,但在5.4中得到了进一步加强,允许更好的代码组织和...

    ecshop(php5.4修订版)

    ECShop是一款基于PHP5.4开发的开源电子商务系统,专为中小企业设计,提供了一套完整的网上商店解决方案。在"ecshop(php5.4修订版)"中,我们重点关注的是其针对PHP5.4版本的优化和调整,这使得ECShop在该版本的PHP...

    PHP5.4+php.ini标配.rar

    2. **Traits**:PHP5.4引入了Traits,这是一种代码复用机制,类似于Java的接口和C++的混入类。Traits允许开发者将一组方法定义在一个可重用的块中,然后在多个类中引入,解决了单继承限制下的功能扩展问题。 3. **...

    PHP5.4源码包

    `__DIR__`魔术常量在PHP5.4中被引入,它始终指向包含该常量的文件的目录,无论是在类中还是函数中,这对于获取当前文件路径非常有用。 6. **内置Web服务器** PHP5.4提供了一个内置的命令行Web服务器,用于开发和...

    hdwiki_php5.4懒人包

    3. **数据库连接优化**:更新数据库连接代码,适应PHP 5.4中的MySQLi或PDO API变化。 4. **错误处理和日志记录**:增强错误处理机制,确保在遇到问题时能提供清晰的错误信息,便于排查。 5. **性能优化**:可能...

    ZendLoader.dll支持PHP5.4.X

    3. **PHP 5.4**: PHP 5.4 是 PHP 语言的一个版本,包含了各种性能优化和新特性,如Traits、Short array syntax 和命名空间等。在 PHP 5.4 中使用 ZendLoader.dll 可能需要特定的配置步骤。 4. **Windows环境配置**...

    php5.4+mysql5.6

    1. **Traits**: PHP 5.4引入了Traits,这是一种代码重用机制,类似于类的混合,允许开发者在多个类之间共享方法,解决了单继承的限制。 2. **短数组语法**: 新的短数组语法`[]`替代了旧的`array()`,使代码更加简洁...

    php5.4 32位exe安装包

    1. **Traits**:PHP 5.4引入了Traits,这是一个代码重用机制,类似于其他面向对象语言中的接口或混入。Traits允许开发者在多个类之间共享行为,解决了单一继承的限制。 2. **命名空间(Namespaces)改进**:在5.3...

    ecshop兼容jquery php 5.3以上版本 完美兼容php 5.4 5.5

    在PHP 5.5中,还有一些特性值得一提,比如改进的OPcache(提高脚本执行速度)、Traits(用于代码复用)和更严格的类型提示。这些特性可能间接地影响到ECShop的性能和代码结构。如果你的服务器已经升级到PHP 5.5或更...

    PHP5.4操作文档说明

    2. **Traits**:PHP5.4引入了一种新的代码重用机制——Traits,类似于其他语言的混入(Mixins)。Traits允许在多个类之间共享方法,解决了单继承的限制。通过`trait`关键字定义,然后使用`use`关键字在类中引入。 3...

    apache2.2+php5.4+mysql5.5+phpMyAdmin4.0.5安装文件

    此版本的 PHP 带来了许多改进,包括更强大的语法特性(如 Traits),提高了性能,以及内置的开发服务器,方便开发者进行本地测试。此外,它还增强了错误处理和异常处理机制,使得代码更加健壮。 MySQL 5.5 是一个高...

    php5.4 linux

    本文将深入探讨PHP 5.4在Linux环境中的安装、配置、特性和常见问题。 1. **PHP 5.4的新特性** - ** Traits**:引入了Traits作为代码复用的一种方式,解决了单继承限制的问题。 - **短数组语法**:支持更简洁的...

    不错的,可能是最新版php5.4

    标题中的“不错的,可能是最新版php5.4”指的是PHP编程语言的一个特定版本,即5.4.14。PHP是一种广泛使用的开源脚本语言,主要用于Web开发,可以嵌入到HTML中,使得动态网页的创建更为便捷。PHP 5.4是该语言的一个...

    PHP 5.4 & Nginx 1.4.2 [整合Zend Debuger for PHP 5.4]

    PHP 5.4是PHP的一个重要版本,它引入了许多新特性,包括改进的性能、增强的语法和新的内置函数,比如 Traits 和 Short Array Syntax,这些都极大地提高了开发效率和代码质量。 Nginx 1.4.2则是一款高性能的HTTP和...

    ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64.tar.gz

    标题中的"ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64.tar.gz"是一个特定版本的 ZendGuardLoader 的软件包,专为 PHP 5.4 构建,适用于基于 Linux 的系统,且依赖于 glibc 2.3 库,支持 x86_64(64位)架构...

Global site tag (gtag.js) - Google Analytics