如果我在不同的类中有两个同名的方法来扩展一个类PHP


If i have two methods with same name in different classes that extend a class PHP

我有一个类:

class Controller{}

和2个其他类别:

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

如果我调用$this->ActionResult_Index();从Controller类中,将调用哪一个?有没有一种定义的方法?

如果从Controller类中调用$this->ActionResult_Index(),则会出现致命错误,因为Controller类没有实现该方法。父母不会从孩子那里继承遗产,相反。

此外:您的extends语法错误;去掉基类名称后面的()

举下面的例子。。。

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()方法,所以您不会得到任何结果(实际上您只会得到一个错误)。CCD_ 8和CCD_。

由于HomeControllerAboutController扩展了ControllerHomeController,并且AboutController包含ActionResult_Index,而Controller不包含ActionResult_Index,除非实例化HomeControllerAboutController,否则您将无法从Controller 访问ActionResult_Index

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

在上面的例子中,调用了HomeController的ActionResult_Index方法。

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

在上面的例子中,调用了AboutController的ActionResult_Index方法。

如果您有:

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

您将得到一个未定义的方法错误。控制器类没有该名称的方法。