如何从php的子类访问父类


how to access the super class from a child class in php

我有以下继承结构的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不接受构造函数。

是否有一种方法可以访问它上面的父类的构造函数而不改变user_admin,这是我无法控制的?

直接引用类:

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构造函数的作用域

//super implimentation php
class object extends other_object {
    function __construct(){
        $this->super();
    }
    function super() {
        $parentClass = get_parent_class($this);
        $this->$parentClass();
    }
}

sales_admin知道它有父类,因为它扩展了user_admin。但是,sales_admin怎么可能知道user_admin是否有父节点呢?在PHP中,sales_admin没有办法知道——除非你用反射作弊。

你有一个选项是借用admin的构造函数。可以通过调用admin::__construct('sales');来实现。请注意,您可以通过这种方式借用任何类的方法,而不必考虑继承树——也就是说,调用者不必是被调用者的后代。

尽管有这个选项,我还是建议您修改您的设计,使您可以完全避免继承。