1
如何测试这个没有抛出错误或使用“@”?如何测试属性中是否存在方法?
可以是有效的:
$foo->bar_x;
或
$foo->bar()->x();
我需要的东西,如:
if(($foo->bar()->x()))
echo $foo->bar()->x();
if(($foo->bar_x))
echo $foo->bar_x();
如何测试这个没有抛出错误或使用“@”?如何测试属性中是否存在方法?
可以是有效的:
$foo->bar_x;
或
$foo->bar()->x();
我需要的东西,如:
if(($foo->bar()->x()))
echo $foo->bar()->x();
if(($foo->bar_x))
echo $foo->bar_x();
$bar = $foo->bar();
if (method_exists($bar, 'x')) {
echo $bar->x();
}
if (property_exists($foo, 'bar_x')) {
echo $foo->bar_x;
}
当然,处理你甚至不能很好地知道能够调用方法的对象并不好。应该清楚一个对象是什么类,一个方法将返回什么样的对象,以及哪些方法和属性可用。定义的接口是OOP的一个关键点。
在你最应该决定调用基于对象的类型是什么,它是:
if ($foo instanceof SomeClass) {
$foo->bar();
} else if ($foo instanceof SomeDefinedInterface) {
$foo->baz();
}
你最好不要有歧义,在所有只处理已知类型的对象:
function (SomeClass $foo) {
$foo->bar();
}