2015-09-07 68 views
3

我想使用同一段代碼來管理多個實體,但它可能有點不同,具體取決於它是否具有某種方法。這就是爲什麼我需要檢查對象是否有名稱的方法。有沒有辦法做到這一點?如何在Symfony2中檢查對象是否有方法

回答

9

您可以簡單地使用is_callable

if (is_callable([$entity, 'methodName'])) 
    doSomething(); 

更簡潔的方法是使用instanceof檢查對象的類。因爲方法會來來去去,但是物體的性質取決於它的類別:

if ($entity instanceof \Some\Bundle\Entity\Class) 
    doSomething(); 
5

這與Symfony無關,它是基本的PHP事情:使用method_exists PHP函數。

bool method_exists (mixed $object , string $method_name) 

PHP Docs

雖然這是一個完全正常的方式去解決它,你可能想看看接口作爲一種替代方案:PHP Interfaces

如果你決定使用它們,就可以只是檢查的對象是你的接口的實例:

interface MyAwesomeInterface 
{ 
    public function myFunction(); 
} 


if ($myObject instanceof MyAwesomeInterface) { 
    $myObject->myFunction(); 
} 
相關問題