我想开发私有框架,以便将来使用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。 Usualy我正在使用LUA。我的计划是构建易于使用且易于理解的框架。因此,人们可以轻松地构建应用程序,他们可以轻松地记住功能参考。例如:
$tbl_result = $system->data->select("name", "table", "id='10'");
此代码用于在不查询的情况下轻松从数据库中选择数据。返回值是数组列表。此功能还可以自动从配置中检测数据库驱动程序。因此用户不需要知道特定驱动程序中的SQL查询。但是调用函数的方法应该是结构化的。为什么我必须使用system-> data->函数?因为我将以root身份拥有系统,组件和模块。然后每个根都会有很多孩子。例如,系统将具有核心,数据,模型等。可能在每个根中将具有相同的子名称。所以这就是我必须建立这种结构的原因。
答案 0 :(得分:1)
我认为没有任何理由认为数据类和类应该从系统类扩展。您可以改为执行以下操作。
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"
我只是表明这是实现你想要实现的目标的一种方式。但是,在用它做任何事情之前,我会重新思考你的框架的设计和结构。
答案 1 :(得分:0)
这并不完全是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上做一些阅读。