2012-11-20 33 views
0

我編寫了一個包含一些抽象類的小型PHP引擎。引擎的用戶必須實現這些抽象類的子類,並將其子類提供給引擎。引擎必須能夠創建和操作這些子類的實例,因此用戶不能只創建一個實例並將其傳遞給引擎。在PHP中導入用戶子類

所以我需要一種方式讓用戶將他們的子類傳遞給引擎。一種顯而易見的方式是強制用戶給這些子類一個特定的名稱並將它們放在一個特定的目錄中,但這似乎不太方便。知道PHP可以將類存儲在變量中,我首先嚐試的是將類存儲在常量中,因此我有一個文件,其中包含幾個define,用戶可以使用它們的子類的名稱和路徑填充該文件。這不起作用 - 看起來PHP不能將類存儲在常量中,僅存儲變量。

所以現在我正在嘗試相同的方法,但用變量而不是常量。有一個文件,UserIncludes.lib.php,其中用戶需要設置兩個變量爲其子類的名稱。然後,這些變量用於在整個引擎代碼中調用這些子類。我不確定這是否是一個好系統,特別是因爲需要使用關鍵字global將變量導入每個需要它們的函數,從而增加了引擎上的文書和精神負載。

那麼在PHP中做這種事情的最佳做法是什麼?看起來它一定是一個相當普遍的任務。

回答

0

只需使用namespaces,並使用正確的autoload function即可。

這樣的文件系統變成只是一個透明層,你依靠只是命名約定 - 這是「力的用戶給這些子類中一個特定的名稱,並把它們放在一個特定的目錄」實際上,但是它的工作原理相當好。

+0

你能更具體嗎?我看不出使用__autoload的任何方式,這不僅僅是讓用戶使用特定文件名和路徑的更迂迴方式。 –

+0

井類實際上駐留在文件中 - 命名空間是處理這個問題最聰明的方法。不清楚你的意思是什麼*將它們的子類提供給引擎* - 無論如何,我正在考慮symfony命名空間註冊:應用程序通過告訴「嘿,你也應該看看這個命名空間!」來了解用戶自己的類。在引導時間[見[在此註冊軟件包](http://symfony.com/doc/2.0/quick_tour/the_architecture.html)]。 – moonwave99