2
我想爲我的數據庫創建一個小的RESTful API,並且我基於用戶請求動態創建控制器對象時遇到了問題,因爲我的所有代碼都使用命名空間,這樣做:動態創建一個具有不同名稱空間的類中的新對象
$api = new $controllerName($request);
將無法正常工作。由於$controllerName
將解析爲「ReadController」,但實際上是\controllers\lottery\ReadController
因此錯誤
定義到類路徑的整個部分是:
if ($method === 'GET') {
$controllerName = 'ReadController';
// @NOTE: $category is a part of $_GET parameters, e.g: /api/lottery <- lottery is a $category
$controllerFile = CONTROLLERS.$category.'/'.$controllerName.'.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
$api = new $controllerName($request);
} else {
throw new \Exception('Undefined controller');
}
}
而且ReadController的核心\控制器聲明\彩票\ ReadController.php
namespace controllers\lottery;
class ReadController extends \core\API {
}
任何想法如何動態創建對象?
謝謝!
那簡單......該死..謝謝,它工作。將在10分鐘內接受答案。 – deb0rian
是的,我有類似的問題。唯一需要改進的地方是:_why_事實如此。這是因爲PHP會將名稱空間別名替換爲解釋時的完整路徑,所以別名不會存在於操作碼中,虛擬機將不會知道它們。 –
@Alma我認爲這樣解釋太詳細了。它就像http://stackoverflow.com/a/16808358/476 – deceze