溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php命名空間自動加載后使用單獨(dú)類include使用

發(fā)布時間:2020-07-21 00:55:07 來源:網(wǎng)絡(luò) 閱讀:1144 作者:gzcxl123 欄目:web開發(fā)

普通的命名空間自動加載后,又對框架不熟,在M層或者C層想include直接調(diào)用第三方類時通常都不行會報(bào)錯。原因是有命名空間和自動加載這兩個php特性制約。

要解決這兩個問題就只要兩步即可,但當(dāng)然在正規(guī)項(xiàng)目中不建議使用,要遵循MVC和PCR-0(1.只有一個入口文件;2.在類文件中不能使用直接實(shí)現(xiàn)方法的寫法;3.命名空間與絕對路徑一致)法則,這只是一個偏門技巧。

解決方法

  1. 在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;
	}	
}


最終還是叮囑不建議程序用這個,盡量遵守面向過程的編程方法。


向AI問一下細(xì)節(jié)

免責(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)容。

AI