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

时间:2013-08-09 09:30:40

标签: php controller extend

我有一个班级:

class Controller{}

和另外2个班级:

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

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

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

4 个答案:

答案 0 :(得分:1)

如果从$this->ActionResult_Index()类中调用Controller,则会出现致命错误,因为Controller类没有实现该方法。父母不会继承他们的孩子,反之亦然。

另外:您的extends语法错误;摆脱基类名称后的()

答案 1 :(得分: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()方法,因此您不会得到任何结果(事实上您只会收到错误)。 BC将各自触发该方法的版本。

答案 2 :(得分:0)

由于HomeControllerAboutController延伸ControllerHomeControllerAboutController包含ActionResult_IndexController不包含{{ 1}}除非您实例化ActionResult_IndexHomeController,否则您将无法从AboutController

访问ActionResult_Index

答案 3 :(得分:0)

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

在上面调用HomeController的ActionResult_Index方法。

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

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

如果你有:

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

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