是否可以在 php 中使用 mixins

2022-08-30 13:37:33

我开始了解mixins。所以我的疑问是,在php中使用mixins是可能的吗?如果是,那么如何?


答案 1

PHP 5.4 中引入的使用Trait

<?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();
?>

哪些印刷品Hello World!

http://php.net/manual/en/language.oop5.traits.php


答案 2

这个答案从 PHP 5.4 开始已经过时了。请参阅Jeanno的答案,了解如何使用特征


这实际上取决于你想要从PHP的水平。PHP处理单继承和抽象类,这可以让你得到大部分的方式。mixins

当然,mixins最好的部分是它们是可互换的片段,可以添加到任何需要它们的类中。

若要解决多重继承问题,可以使用拉入代码段。在某些情况下,您可能必须转储一些样板代码才能使其正常工作,但这肯定有助于保持程序干燥。include

例:

class Foo
{
  public function bar( $baz )
  {
    include('mixins/bar');
    return $result;
  }
}

class Fizz
{
  public function bar( $baz )
  {
    include('mixins/bar');
    return $result;
  }
}

它不像 能够定义类那样直接,但它应该让你大部分时间都在那里。有一些缺点:您需要保持相同的参数名称并返回变量名称,您需要传递依赖于上下文的其他数据,例如或 。class Foo mixin Barfunc_get_args_array__FILE__


推荐