PHP - 性状帮手(PHP - Traits as helpers)

2019-07-30 08:38发布

是否有任何矛盾,用特质注入的辅助方法也是这样吗?

   class Foo
   {

       use Helper\Array;

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

   }

Answer 1:

这是与特质的想法。

但是你还是应该留意的耦合的代码。 如果Helper\Array是什么一个完全不同的命名空间Foo是你可能要重新考虑这个特别的方法。



Answer 2:

性状已添加到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";


Answer 3:

在我看来和谈论凝聚力的应用程序中,分发responsibilties是一件好事,但散射responsibilties真的是别的什么都没有合同做设计的东西。 这是我与性状帮手关注。 我一直在想了很多关于特质放在一个架构,我真的觉得性状应采取它们是什么:共享的实现意味着共享封装 。 因此,他们不应该取代接口,但留在他们身后。 我走在建筑和语言无关的意义上的“接口”鉴于特定的PHP接口只是一个抽象的工具,而不是特质特质感都只不过是实施工具。 接口来之前implementations.Rely抽象/接口,而不是混凝土/细节。 因此,要记住,性状不构建应用程序架构没有更多的他们发起类合约,但站在他们的服务抛在身后,是非常重要的。



文章来源: PHP - Traits as helpers
标签: php traits