+ -
当前位置:首页 → 问答吧 → PHP5.4的新特性Traits language construct的看法

PHP5.4的新特性Traits language construct的看法

时间:2011-07-07

来源:互联网

在PHP中使用这种语言特性是很糟糕的.
trait容易引起环形依赖, 甚至更复杂的依赖, 以https://wiki.php.net/rfc/traits中的例子来说:


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

trait SayWorld {
   public function sayHello() {
     parent::sayHello();
     echo 'World!';
   }
}

class MyHelloWorld extends Base {
   use SayWorld;
}

$o = new MyHelloWorld();
$o->sayHello(); // echos Hello World!
?>

使用SayWorld时, 必需要有sayHello()方法才行, 也就是依赖于MyHelloWorld, 这个例子更大的问题是, 还要求MyHelloWorld的父类中有实现sayHello()才行.
开发者使用SayWorld太纠结了.


虽然还没最终发布, 但我觉得这个特性还需要再慎重一些.
(也有可能在正式版中会被去掉, 当时在正式发布5.0时, 就去掉了很多测试版中的功能, 包括命名空间等等)

作者: programmerhuang   发布时间: 2011-07-07

MyHelloWorld 继承 Base  再引入空间SayWorld , SayWorld 中再实例 Base ?

php也适合玩桥接?

作者: spser   发布时间: 2011-07-07