是否有可能在PHP中使用mixins

New*_*ser 28 php mixins

我开始了解mixins.所以我怀疑是,是否有可能在php中使用mixins?如果是,那么如何?

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

  • 谢谢 !这应该标记为答案. (5认同)

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__.

  • 这个答案已经过时,请参阅php 5.4和特征 (9认同)