鍍金池/ 問(wèn)答/PHP  Linux/ 沒(méi)有使用php命名空間的項(xiàng)目是否可以調(diào)用使用了命名空間的插件呢?

沒(méi)有使用php命名空間的項(xiàng)目是否可以調(diào)用使用了命名空間的插件呢?

如題:沒(méi)有使用php命名空間的項(xiàng)目是否可以調(diào)用使用了命名空間的插件呢?

比如在yaf框架下,沒(méi)有開(kāi)啟命名空間的情況下,想把workerman當(dāng)一個(gè)模塊引入到library目錄下,然后使用,不知道是否可行,以及具體如何使用呢?

回答
編輯回答
忠妾

可以。前提是PHP>=5.3,否則只能手動(dòng)require
如果你依賴的包有命名空間,一般來(lái)說(shuō),包源碼里面會(huì)有一個(gè)autoload.php,auto_load.php,ClassLoader.php這樣的文件,如果有,直接require這個(gè)文件可以完成自動(dòng)加載

2017年4月4日 14:51
編輯回答
法克魷

可以使用的
1.php版本要大于等于5.3
2.安裝composer
3.引入composer文件 require 'vendor/autoload.php';
4.composer的基本配置 已經(jīng)定義命名空間

{
    "autoload": {
        "psr-4": {
        "命名空間的名字\\": "命名空間所對(duì)應(yīng)的路徑/"
        }
    }
}
2018年5月18日 03:09
編輯回答
檸檬藍(lán)

可以使用,但是無(wú)法自動(dòng)加載,要么實(shí)現(xiàn)自動(dòng)加載函數(shù),要么手動(dòng) require 進(jìn)來(lái),不過(guò)還是會(huì)有坑,最好是用 composer

2017年7月5日 23:43
編輯回答
終相守

建議使用composer安裝組件,自動(dòng)完成自動(dòng)加載。
深入理解composer的autoload自動(dòng)加載原理

2018年3月28日 12:01
編輯回答
膽怯

沒(méi)有開(kāi)啟命名空間之后,你如果想調(diào)用一個(gè)類的話,還是需要引入相關(guān)類文件。這種情況話最好祈禱自己跟引入類沒(méi)有沖突。。。。

2018年3月19日 20:54
編輯回答
挽歌

這里只針對(duì)問(wèn)題做一個(gè)回答。因?yàn)闆](méi)用過(guò)yaf框架所以就不說(shuō)了。

實(shí)際上,這個(gè)問(wèn)題要分兩個(gè)方面的回答。

第一,php版本>=5.3的項(xiàng)目沒(méi)用命名空間,而引用用了命名空間的類。意思是你得php版本支持命名空間,但是你沒(méi)有用。這個(gè)時(shí)候問(wèn)題不大,你大可在你的項(xiàng)目里采用命名空間的方式調(diào)用你要引入的類,不過(guò)可能這樣不支持自動(dòng)加載,所以在使用前,先將代碼include進(jìn)來(lái)。

第二,php版本<5.3項(xiàng)目里沒(méi)用命名空間(php不支持).這種情況下就苦逼了。解決辦法有兩種:1,升級(jí)PHP版本到5.3以上(解決兼容問(wèn)題)。2,刪除引用目標(biāo)代碼中使用到的命名空間部分,修改源碼。

第二種情況建議 使用解決辦法1。

另外,還有種情況也說(shuō)了吧。就是在有命名空間的代碼里引用沒(méi)用用命名空間的代碼。這個(gè)也很好解決,只要記住沒(méi)用命名空間的代碼都被放在了跟命名空間下就好了,實(shí)例化類的時(shí)候在前面加上一個(gè)就ok了。

最后,PHP的命名空間已經(jīng)是大勢(shì)所趨,建議還是趕快使用起來(lái)。如今框架的版本都已經(jīng)全面使用了,其中的好處還是很多很多的

2018年2月13日 03:34