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();
}