Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中从子类访问超类_Php_Class_Inheritance - Fatal编程技术网

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

如何在php中从子类访问超类,php,class,inheritance,Php,Class,Inheritance,我有3个具有以下继承结构的类: <?php class admin { function __construct($module){ echo $module; } } class user_admin extends admin { function __construct(){ parent::__construct('user'); } }

我有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');
       }
     }
它将回显“user”,因为它将“sales”字符串传递给不接受构造函数的用户\ u admin


有没有一种方法可以访问它上面的父类的构造函数而不更改我无法控制的用户\u 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构造函数的作用域,因为sales_admin扩展了user_admin,所以sales_admin知道它有一个父级。然而,销售管理员怎么可能知道用户管理员是否有家长?在PHP中,sales_admin没有一种知道的方法——除非你用反射作弊

//super implimentation php

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

    function super() {
        $parentClass = get_parent_class($this);
        $this->$parentClass();
    }
}
你可以选择借用管理员的构造函数。您可以通过调用
admin::uu-construct('sales')。请注意,您可以通过这种方式借用任何类的方法,而不考虑继承树——也就是说,调用方不必是被调用方的后代


尽管有此选项,我还是建议您以一种可以完全避免继承的方式更改设计。

需要实际代码和您遇到的问题。你是想回应“销售”吗?您应该有允许您更改其他内容的getter和setter,除非父对象是静态操作的,然后您只是运气不好,没有达到OO的目的。sales\u admin可以调用admin::\u construct(),但sales\u admin是admin的后代这一事实并不是原因。在scope参数中,admin的构造函数是公共的,因此可以在任何地方访问。在本例中,它可以是,您是对的,但在正常应用程序中,如果
sales\u admin
不是后代,则必须包含
admin
类。我的思想走了一条路,你的思想走了另一条路。这对OP来说很好,我想:)并且澄清一下,如果没有包含admin类,sales_admin不能扩展admin。它没有,它扩展了user_admin,后者扩展了admin。我们必须假设user_admin对admin类具有可见性。
//super implimentation php

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

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