Jea*_*nno 51
TraitPHP 5.4中引入的用法
<?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();
?>
Run Code Online (Sandbox Code Playgroud)
打印 Hello World!
http://php.net/manual/en/language.oop5.traits.php
zzz*_*Bov 11
从PHP 5.4开始,这个答案已经过时了.请参阅Jeanno关于如何使用特征的答案.
这实际上取决于mixins你想要什么级别的PHP.PHP处理单继承和抽象类,它们可以帮助您完成大部分工作.
当然,mixins最好的部分是它们是可互换的片段,可以添加到任何需要它们的类中.
要解决多重继承问题,您可以使用include拉入代码片段.在某些情况下,您可能必须转储一些样板代码才能使其正常工作,但它肯定有助于保持程序干燥.
例:
class Foo
{
public function bar( $baz )
{
include('mixins/bar');
return $result;
}
}
class Fizz
{
public function bar( $baz )
{
include('mixins/bar');
return $result;
}
}
Run Code Online (Sandbox Code Playgroud)
它不像能够定义一个类那样直接class Foo mixin Bar,但是它应该能够让你在那里大部分时间.存在一些缺点:您需要保留相同的参数名称并返回变量名称,您需要传递依赖于上下文的其他数据,例如func_get_args_array或__FILE__.