如何从父类调用子类函数


How to call child class function from parent class PHP

我想开发一个私有框架,以便将来用PHP构建我的应用程序。我的示例代码是:

class system {
    const token = "1234";
}
class data extends system {
    public $driver = "mysql";
    function get_name() {
        if (parent::token == "1234") {
            return "John";
        }
    }
}
class about extends system {
    public $version = "10.1";
    function get_build() {
        if (parent::token == "1234") {
            return "920";
        }
    }
}

我的问题是是否可以调用包含类结构的子函数。我不知道这到底叫什么。我想大概是这样的。

$system = new system();
echo $system->data->driver; // Output "mysql"
echo $system->data->get_name(); // Output "John"
echo $system->about->version; // Output "10.1"
在LUA中,代码是这样的:
system = {};
system.token = "1234";
system.data.driver = "mysql";
function system.data.get_name()
    if (system.token == "1234") then
        return "John";
    end
end
system.about.version = "10.1";
function system.about.get_build()
    if (system.token == "1234") then
        return "920";
    end
end

用法:

name = system.data.get_name() -- variable "name" value will be "John"

谢谢。编辑:

该代码只是示例,以显示我想要实现的,因为我刚刚开始在PHP中工作。通常我使用LUA。我的计划是建立一个易于使用和易于理解的框架。这样人们就可以轻松地构建应用程序,并且可以轻松地记住函数引用。例如:

$tbl_result = $system->data->select("name", "table", "id='10'");

此代码用于方便地从数据库中选择数据而无需查询。返回值为数组列表。该功能还可以从配置中自动检测数据库驱动程序。因此,用户不需要了解特定驱动程序中的SQL查询。但是调用函数的方法应该是结构化的。为什么我必须使用system->data->function?因为我将有系统,组件和模块作为根。这样,每根树都会生出许多子树。例如,系统将有核心、数据、模型等。也许在每个根将有相同的子名称。这就是为什么我要建立这个结构

我不认为数据类和about类应该从系统类扩展出来。您可以这样做:

class data {
    public $driver = 'mysql';
    public $token;
    function __construct($token)
    {
        $this->token = $token;
    }
    function get_name() {
        if ($this->token == "1234") {
            return "John";
        }
    }
}
class about {
    public $version = "10.1";
    public $token;
    function __construct($token)
    {
        $this->token = $token;
    }
    function get_build() {
        if ($this->token == "1234") {
            return "920";
        }
    }
}
class system {
    public $token;
    public $about;
    public $data;
    function __construct($token)
    {
        $this->token = $token;
        $this->about = new about($this->token);
        $this->data = new data($this->token);
    }   
}

那么你可以这样做。

$system = new system('1234');
echo $system->data->driver; // Output "mysql"
echo $system->data->get_name(); // Output "John"
echo $system->about->version; // Output "10.1"

我只是想说明这是实现你想要的目标的一种方法。然而,在做任何事情之前,我会重新考虑你的框架的设计和结构。

这不是OOP在PHP中的工作方式,也不是OOP的一般用途。

如果你想访问子类的所有子函数你不想实例化一个系统对象你想实例化一个about对象:

$system = new about();
echo $system->driver; // Output "mysql"
echo $system->get_name(); // Output "John"
echo $system->version; // Output "10.1"

我会读一些关于PHP OOP的书。