2014-09-30 1 views
0

Да, я знаю, что название громоздко :)PHP: Каков наилучший способ ввода подсказок класса в унаследованном методе из родительского класса конкретного класса?

код сделает этот путь более удобоваримый:

namespace AbstractLevel;  

abstract class Bar 
{ 
    public function addFoo(Foo $foo) 
    { 
     $this->foo = $foo; 
    } 
} 

namespace AbstractLevel\ConcreteLevel; 

class Bar extends \AbstractLevel\Bar 
{ 
    public function addFoo(Foo $foo) 
    { 
     parent::addFoo($foo); 
    } 
} 

Приведенный выше код должен получить уведомление, когда во время выполнения экземпляра класса AbstractLevel\ConcreteLevel\Bar, так как метод addFoo() является typehinting для другого класса, чем метод его родителя с тем же именем.

Есть ли способ обеспечить, чтобы AbstractLevel\ConcreteLevel\Bar::addFoo() типа для класса AbstractLevel\ConcreteLevel\Foo вместо AbstractLevel\Foo?

+0

Я думаю, что это невозможно, так как перезаписанный метод всегда должен следовать за его подписью класса родителей. Sady PHP не способен перегружать. – ToBe

ответ

0

Есть ли способ, чтобы обеспечить ...

Вы можете добавить абсолютный путь к typehinted класса:

public function addFoo(\AbstractLevel\ConcreteLevel\Foo $foo) 

Я в настоящее время не 100% уверен, что ключевое слово abstract,

вам, возможно, придется поставить его там в первом классе:

abstract class Bar 
{ 
    public abstract function addFoo(Foo $foo) 
+0

Используя абстрактный метод, вы не сможете реализовать логику, содержащуюся в 'AbstractLevel \ Bar :: addFoo()'. – jcroll

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