2014-02-17 3 views
0

Какой путь будет лучше,Лучший способ вызова необязательного метода в PHP?

A. Проверка существования метода вызова:

class Foo extends Bar { 
    public function __construct() { 
     . . . 
     if (is_callable([$obj, 'myMethod'])) { 
      $obj->myMethod(); 
     } 
     . . . 
    } 
} 

или

B. иметь пустой метод в родительском классе

class Bar { 
    protected function myMethod() {} 
} 

class Foo extends Bar { 
    public function __construct() { 
     . . . 
     $obj->myMethod(); 
     . . . 
    } 
} 
+0

Что такое «дополнительный метод» в первую очередь? –

ответ

1

Вам никогда не нужно угадывать, имеет ли объект метод или нет. Вам нужно знать, имеет ли этот объект метод, основанный на его типе. Вы должны не проверять, что его тип либо, как правило, вы должны иметь иерархию вменяемый класса и требуют правильного типа в соответствующих местах:

function foo(MyType $bar) { 
    ... 
} 

Эта функция требует объект класса MyType, и вы знать, что MyType может и не может сделать. Так что нет необходимости проверять что-либо.

Однако, в некоторых случаях вам, возможно, придется вручную проверять, в этом случае есть instanceof:

if ($foo instanceof MyType) { 
    ... 
} 

Если этот конкретный метод не вполне вписывается в определенной иерархии классов, то сделать интерфейс для этого:

interface MyMethodInterface { 
    public function myMethod(); 
} 

class Foo implements MyMethodInterface { 

    public function myMethod() { 
     ... 
    } 

} 

Затем выполните вышеуказанные проверки типа MyMethodInterface.

Смежные вопросы