我有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的情况下访问其上方父级的构造函数,而我无法控制?
答案 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');
来完成此操作。请注意,无论继承树如何,您都可以通过这种方式借用任何类的方法 - 也就是说,调用者不必是被调用者的后代。
尽管有这个选项,但我建议您改变设计,以免完全避免继承。