如何在php-class中使用traits?

Tes*_*son 23 php oop traits

PHP(5.4)中是否有任何函数可以将使用的特征作为数组或类似函数:

class myClass extends movingThings {
  use bikes, tanks;

  __construct() {
    echo 'I\'m using the two traits:' . ????; // bikes, tanks
  }
}
Run Code Online (Sandbox Code Playgroud)

Mau*_*ice 34

要轻松获取使用的特征,您可以调用class_uses()

$usedTraits = class_uses(MyClass);
// or
$usedTraits = class_uses($myObject);
Run Code Online (Sandbox Code Playgroud)

一般建议

在检查可用功能时,我通常建议使用interfaces.要为您要使用的接口添加默认功能traits.这样您也可以从类型提示中受益.

通过实现接口强制具有功能的对象,然后使用特征为该接口实现默认代码.

class MyClass 
    implements SomeInterface 
{
    use SomeTrait;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以检查界面;

$myObject = new MyClass();
if ($myObject instanceof SomeInterface) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

并且仍然使用类型提示;

function someFunction( SomeInterface $object )
{ 
    //...
}
Run Code Online (Sandbox Code Playgroud)


Ziu*_*min 10

您可以使用ReflectionClass自己编写

$rc = new ReflectionClass('myClass');
$count = count($rc->getTraits());
Run Code Online (Sandbox Code Playgroud)


Mar*_*oek 8

只是我的2美分=)

in_array( "CLASS_NAME", class_uses($model) ) 
Run Code Online (Sandbox Code Playgroud)

或者使用PHP> 5.6

in_array( CLASS_NAME::class, class_uses($model) )
Run Code Online (Sandbox Code Playgroud)