2013-08-09 1 views
-2

У меня есть класс:Если у меня есть два метода с одинаковыми именами в разных классах, расширяющих класс PHP

class Controller{} 

и 2 другие классы:

class HomeController extends Controller() 
{ 
    public function ActionResult_Index() 
    { 
    } 
} 

class AboutController extends Controller() 
{ 
    public function ActionResult_Index() 
    { 
    } 
} 

Если я называю $ this-> ActionResult_Index(); из класса Controller, который будет вызван? Есть ли способ определения?

+0

Если вы вызываете '$ this-> ActionResult_Index();' тогда вы должны создать экземпляр либо Homecontroller, либо AboutController и вызывать его из этого экземпляра ... он выберет то, что вы создали в этом дело. Если вы просто создали экземпляр контроллера, то метод, который вы вызываете, недоступен –

+0

Вы пробовали? Что случилось? – JJJ

+0

Что делать, если я создал экземпляр контроллера? будет ли оконтроллер или homcontroller просто не быть доступным еще? – Jimmyt1988

ответ

0

Рассмотрим следующий пример ...

class A { 

} 

class B extends A { 
    public function boo() 
    { 
     return 'B'; 
    } 
} 

class C extends A { 
    public function boo() 
    { 
     return 'C'; 
    } 
} 

$a = new A; 
$b = new B; 
$c = new C; 

$a->boo(); // Undefined method 
$b->boo(); // B 
$c->boo(); // C 

Поскольку A не имеет метод boo() вы не получите никакого результата (на самом деле вы просто получите сообщение об ошибке). B и C каждый огонь будет иметь собственную версию метода.

0

С HomeController и AboutController расширяет Controller и HomeController и AboutController содержит ActionResult_Index и Controller не содержит ActionResult_Index, если не экземпляр HomeController или AboutController вы не сможете получить доступ к ActionResult_Index из Controller

0
$home = new HomeController; 
$home->ActionResult_Index(); 

В выше ActionResult_Index вызывается метод HomeController.

$about = new AboutController; 
$about->ActionResult_Index(); 

В приведенном выше примере вызывается метод ActionResult_Index AboutController.

Если у вас есть:

$controller = new Controller; 
$controller->ActionResult_Index(); 

Вы получите неопределенную ошибку метода. Класс контроллера не имеет метода с этим именем.

1

Если вы вызываете $this->ActionResult_Index() из класса Controller, вы получите фатальную ошибку, потому что класс Controller не реализует этот метод. Родители не наследуют своих детей, это наоборот.

Также: ваш синтаксис extends неправильный; избавиться от () после имени базового класса.