是否有任何矛盾,用特质注入的辅助方法也是这样吗?
class Foo { use Helper\Array; function isFooValid(array $foo) { return $this->arrayContainsOnly('BarClass', $foo); } }
是否有任何矛盾,用特质注入的辅助方法也是这样吗?
class Foo { use Helper\Array; function isFooValid(array $foo) { return $this->arrayContainsOnly('BarClass', $foo); } }
这是与特质的想法。
但是你还是应该留意的耦合的代码。 如果Helper\Array
是什么一个完全不同的命名空间Foo
是你可能要重新考虑这个特别的方法。
性状已添加到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";
在我看来和谈论凝聚力的应用程序中,分发responsibilties是一件好事,但散射responsibilties真的是别的什么都没有合同做设计的东西。 这是我与性状帮手关注。 我一直在想了很多关于特质放在一个架构,我真的觉得性状应采取它们是什么:共享的实现意味着共享封装 。 因此,他们不应该取代接口,但留在他们身后。 我走在建筑和语言无关的意义上的“接口”鉴于特定的PHP接口只是一个抽象的工具,而不是特质特质感都只不过是实施工具。 接口来之前implementations.Rely抽象/接口,而不是混凝土/细节。 因此,要记住,性状不构建应用程序架构没有更多的他们发起类合约,但站在他们的服务抛在身后,是非常重要的。