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)
只是我的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)