簡單的問題,但我不知道這是不是真的有可能..可能從對象使用spl_autoload_register?
例子:
類測試有這樣的spl_autoload_register:
function __construct() {
spl_autoload_register(function ($class) {
echo "{$this->projectroot}/include/{$class}.php";
require_once(strtolower("{$this->projectroot}/classes/{$class}.php"));
});
}
$ projectroot是與對象範圍變量項目目錄的路徑。
我包括類測試在我的項目,創建一個新的實例出來的:
$test = new test();
現在我想$測試以加載與函數的類文件,當我創建:
$test2 = new test2();
其中test2是/include/test2.php中稱爲test2的類。
當我試圖做到這一點,它給了我一個錯誤說:
Fatal error: Using $this when not in object context in
但是當我嘗試:
$test2 = new $test1->test2();
它忽略了測試1的spl_autoload_register功能完全:/只是指出顯然test2不是已知的方法(未定義的屬性)。
有沒有辦法在我的項目中的類測試中使用spl_autoload_register函數,而無需在我的主項目中進一步定義它?
編輯
我「固定」它使用全局變量,但我很好奇,如果有一些面向對象的方法? (不是說這是實用/最佳實踐OOP使用...)只是好奇。
如果您在__constructor中加載文件,則不需要spl_autoload;只需要文件,就是這樣... –
@Glavic,你說得對。問題是我將在不同的項目中使用這個類,這些項目有着完全不同的需求。所以項目a將有我將永遠不會在項目b或c中使用的類。因此,我希望能夠將新的類文件轉儲到包含文件夾中,而不必擔心每次啓動新項目時都將它們包含在manualy中。 –
你使用的是PHP + 5.4嗎? –