如何从php中的子类访问超类

时间:2011-07-22 02:39:00

标签: php class inheritance

我有3个具有以下继承结构的类:

   <?php
     class admin {
       function __construct($module){
         echo $module;
       }
     }

     class user_admin extends admin {
       function __construct(){
         parent::__construct('user');
       }
     }

     class sales_admin extends user_admin {
       function __construct(){
         parent::__construct('sales');
       }
     }

你会注意到sales_admin扩展了user_admin,这是一个必要的步骤。当我运行此代码时,

$a = new sales_admin;

它将回显“user”,因为它将“sales”字符串传递给不接受构造函数的user_admin。

有没有办法在不更改user_admin的情况下访问其上方父级的构造函数,而我无法控制?

3 个答案:

答案 0 :(得分:1)

直接引用该课程:

class sales_admin extends user_admin
{
    function __construct()
    {
        admin::__construct('sales');
    }
}

$a = new sales_admin; // outputs 'sales'

由于user_admin扩展了admin,而sales_admin扩展了user_admin,sales_admin将具有admin构造函数的范围

答案 1 :(得分:0)

//super implimentation php

class object extends other_object {
    function __construct(){
        $this->super();
    }

    function super() {
        $parentClass = get_parent_class($this);
        $this->$parentClass();
    }
}

答案 2 :(得分:0)

sales_admin知道它有父级,因为它正在扩展user_admin。但是,如果user_admin有父项,sales_admin怎么可能知道呢?在PHP中,sales_admin没有办法知道 - 除非你用反思作弊。

您拥有的选项是借用admin的构造函数。您可以致电admin::__construct('sales');来完成此操作。请注意,无论继承树如何,您都可以通过这种方式借用任何类的方法 - 也就是说,调用者不必是被调用者的后代。

尽管有这个选项,但我建议您改变设计,以免完全避免继承。