2012-11-22 122 views
1

我有一個文件夾結構,像這樣動態生成的命名空間:基於PHP的文件夾結構

index.php 
app/ 
    controllers/ 
       folder1/ 
         class.php 

有一個在class.php沒有命名空間的定義。是否有可能將class.php放入由文件夾結構生成的名稱空間中相對於索引?所以它會被加載,如:

new \app\controllers\folder1\classInFile(); 

或者有沒有辦法動態創建名稱空間?

+0

很好的問題+1 –

回答

2

包含名稱空間的文件必須在任何其他代碼之前聲明文件頂部的名稱空間。

http://php.net/manual/en/language.namespaces.definition.php

即,你不能在命名空間聲明之前執行任何代碼,事後爲時已晚。儘管存在反省的運行時間攻擊:不,這是不可能的。即使是這樣,它依賴於運行時信息,例如代碼被執行/包含在哪個文件夾中。命名空間可以是var\www\myproject\foo\bar\baz或只是foo\bar\baz。你打算如何確定?這太麻煩了。

真的,只是讓它明確,即使這意味着打字多一點。命名空間是類名稱的一部分。您不應在運行時動態生成名稱

0

您不應該動態生成名稱空間,在編譯時無法設置和讀取名稱空間。

在任何情況下,在執行任何代碼之前提供/定義命名空間。

0

如果您可以動態創建PHP源文件,則需要在class.php中定義名稱空間,您可以動態地創建名稱空間。