我希望能够首先创建一个基类的新实例,然后从该基类中我希望能够创建一个新的子类实例。我还希望能够从子类中调用基类方法。我尝试使用下面的代码,它按我想要的方式工作,但这是一个不好的做法,它是否有内存效率?还有其他意见吗?
<?php
class BaseClass {
private $subclass = NULL;
function __construct() {
print "In BaseClass constructor<br>";
$this->subclass = new SubClass();
}
function sayhello() {
print 'hello from base class';
}
}
class SubClass extends BaseClass {
function __construct() {
print "In SubClass constructor<br>";
$this->sayhello();
}
function saygoodbye($num) {
print 'goodbye from base class';
}
}
$SUB = new SubClass();
?>
我这样做的目的是能够使用$this->
访问所有内容,就像CodeIgniter的工作方式一样。这是我在私有API的index.php文件中所拥有的。我希望能够在调用call_user_func_array()之前验证API请求。我还需要连接数据库进行身份验证,但我希望能够从子类访问数据库。本质上,代码确定了调用的API方法,然后创建子类的实例,最后调用该方法。
$get_contents = $_GET;
$resource_name = $get_contents['_resource'];
unset($_GET['_resource']);
$resource_method = $get_contents['_resource_method'];
unset($_GET['_resource_method']);
//Load the resource class
include 'core/resources/' . $resource_name . '.php';
//If set to true, each method will require an API key to be used
$auth_required = array();
$auth_required['collections']['addcollection'] = TRUE;
if(isset($auth_required[$resource_name][$resource_method]) && $auth_required[$resource_name][$resource_method] == TRUE) {
print 'requires auth';
}
//Create a new instance of the resource
$API = new $resource_name();
$method_params = $_GET;
call_user_func_array(array(&$API, $resource_method), $method_params);
答案 0 :(得分:0)
我没有看到任何效率问题给你当前的代码。这取决于实际情况。如果你问它是否允许这也是设计问题.Means取决于问题域。因此,您应该熟悉design patterns而不是问这些问题。
了解设计模式将使您深入了解如何以标准方式解决设计和架构问题,以及特定编程语言如何解决这些问题。