您好,登錄后才能下訂單哦!
普通的命名空間自動加載后,又對框架不熟,在M層或者C層想include直接調(diào)用第三方類時通常都不行會報(bào)錯。原因是有命名空間和自動加載這兩個php特性制約。
要解決這兩個問題就只要兩步即可,但當(dāng)然在正規(guī)項(xiàng)目中不建議使用,要遵循MVC和PCR-0(1.只有一個入口文件;2.在類文件中不能使用直接實(shí)現(xiàn)方法的寫法;3.命名空間與絕對路徑一致)法則,這只是一個偏門技巧。
解決方法
在include文件后,用spl_autoload_unregister()把自動加載的函數(shù)注銷掉;
如:spl_autoload_unregister('\\Test\\Loader::autoload');
但在運(yùn)用完第三方類的時候要馬上把之前的自動加載函數(shù)運(yùn)行一次,不然其他方法加載不了會報(bào)錯。
\main\Test1::test();
spl_autoload_register('\\Test\\Loader::autoload');
2. 第三方類要加上單獨(dú)的命名空間,不然在使用的時候會,include類會以當(dāng)前的命名空間來使用。如果加載類不是在跟當(dāng)前命名空間同一個目錄,就會報(bào)錯。
貼其中一個類代碼:
namespace Test; class Factory { public static function createDatabase() { $db = new Database(); Register::set('db1',$db); include BASEDIR.'/Test1.php'; spl_autoload_unregister('\\Test\\Loader::autoload'); \main\Test1::test(); spl_autoload_register('\\Test\\Loader::autoload'); return $db; } }
最終還是叮囑不建議程序用這個,盡量遵守面向過程的編程方法。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。