我希望能够首先创建一个基类的新实例,然后从该基类中创建一个子类的新实例。我还希望能够从子类中调用基类方法。我用下面的代码尝试了它,它按我想要的方式工作,但这是一种不好的做法,它的内存效率高吗?还有其他意见吗?
<?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();
?>
我这样做的目的是能够通过 using 访问所有内容$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);