PHP - 作为助手的特质

Mat*_*iuk 5 php traits

是否有任何矛盾使用特征来注入这样的辅助方法?

   class Foo
   {

       use Helper\Array;

       function isFooValid(array $foo)
       {
            return $this->arrayContainsOnly('BarClass', $foo);
       }

   }

小智 7

这就是特征的想法.

但是你仍然应该留意耦合代码.如果Helper\Array是一个完全不同的命名空间Foo,你可能想要重新思考这个特定的方法.


Pan*_*ajR 5

将特性添加到 PHP 中的原因很简单:PHP 不支持多重继承。简而言之,一个类一次不能扩展超过一个类。当您需要在其他类也使用的两个不同类中声明功能时,这变得很费力,结果是您必须重复代码才能完成工作,而不会让自己陷入蜘蛛网的迷雾中。

输入特征。这些允许我们声明一种包含可以重用的方法的类。更好的是,它们的方法可以直接注入到您使用的任何类中,并且您可以在同一个类中使用多个特征。让我们看一个简单的 Hello World 示例。

<?php

trait SayHello
{
    private function hello()
    {
        return "Hello ";
    }

    private function world()
    {
        return "World";
    }
}

trait Talk
{
    private function speak()
    {
        echo $this->hello() . $this->world();
    }
}

class HelloWorld
{
    use SayHello;
    use Talk;

    public function __construct()
    {
        $this->speak();
    }
}

$message = new HelloWorld(); // returns "Hello World";
Run Code Online (Sandbox Code Playgroud)