是否有任何矛盾使用特征来注入这样的辅助方法?
class Foo { use Helper\Array; function isFooValid(array $foo) { return $this->arrayContainsOnly('BarClass', $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";
Run Code Online (Sandbox Code Playgroud)