使用 Trait 来注入辅助方法是否存在任何矛盾?
class Foo {
use Helper\Array;
function isFooValid(array $foo) { return $this->arrayContainsOnly('BarClass', $foo); }
}
这就是trait的设计目的。
但是,您仍然应该注意耦合代码的问题。如果Helper\Array
和Foo
所在的命名空间完全不同,您可能需要重新考虑这种特定的方法。
ArrayHelper::arrayContainsOnly('BarClass', $foo)
这样的通用帮助类,并在整个项目中使用适当的 traits 替换它们。类的命名空间可能会有所不同。这是否意味着这种方法仍然是正确的? - Mateusz CharytoniukArrayer
库,你可以实例化并注入到你的Foo
类中。这样它们之间就不必紧密耦合,当测试代码时,你可以轻松地替换其中一个。 - Tobias Sjösten<?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";