0
我希望能夠首先創建一個基類的新實例,然後從該基類內部我希望能夠創建一個子類的新實例。我也希望能夠從子類中調用基類方法。我用下面的代碼嘗試了它,它的工作原理是我想要的,但是這是一種不好的做法,它的內存效率如何?還有其他意見嗎?在Baseclass中創建一個子類的新實例
<?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->
訪問的一切,像笨是如何工作的。這是我在我的私人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);
你必須讓BaseClass具有子類實例的屬性的原因是什麼? – xdazz 2012-04-07 15:49:00
你需要存儲在基類中的子類有什麼可能的原因?這是不好的做法,似乎沒有給你任何你不會有的東西。 – clexmond 2012-04-07 15:52:23
這是我爲我的網站構建REST API的方式之一,但只會被我使用。最初我設置了創建子類的新實例,然後子類構造函數可以調用基類構造函數。然後調用子類方法,我使用了call_user_func_array()。我試圖使用API密鑰來實現簡單的身份驗證,該密鑰只是檢查它是否存在於數據庫中。基本上,子類包含所有可以調用的單個方法,基類包含像sendResponse()這樣的方法。 – musubi 2012-04-07 15:59:18