以下所有示例都基於保證所有文件都存在於其正確位置。我已經高音檢查過了。使用PHP變量實例化類 - 命名空間問題
(1)未使用的命名空間時,該工作原理:
$a = "ClassName";
$b = new $a();
這不起作用:
// 'class not found' error, even though file is there
namespace path\to\here;
$a = "ClassName";
$b = new $a();
這是否工作:
namespace path\to\here;
$a = "path\to\here\ClassName";
$b = new $a();
所以它似乎命名空間聲明在使用變量實例化類時被忽略。
是否有更好的方法(比我的最後一個例子),所以我不需要通過一些代碼並更改每個變量以包含命名空間?
空間聲明通常在源文件的頂部去一次,不在你需要的變量前面。 –
你可以做的最好的事情就是使用'__namespace__'關鍵字來修改你的*變量名稱空間*,例如'$ a = __namespace__。 「\\類名」;'。不解決問題,但至少現在如果你的名字空間改變了,代碼也會如此。 –
感謝所有的評論和回答。我實際上認爲上面的最後一條評論是最好的方法(除非調用_namespace_有性能問題,我懷疑)。再次感謝這兩個答案,我已經提出了兩個答案。我接受的答案是上面的最後一條評論。 – user2143356