在使用ThinkPHP開發過程中,因為需要使用一個外部庫,便直接在Model檔案夾下直接建立了一個libs檔案夾,將庫檔案放在裡面,然後在Model中require_once裡面的檔案。
但是ThinkPHP架構Model中使用了namespace,而這個庫裡面同樣使用了namespace,現在程式似乎只在Model引入的namespace中去搜尋庫裡面的use,所以一直報錯:
Class 'Falcon\Model\Thrift\Transport\TSocket' not found錯誤位置FILE: D:\wamp\www\Application\Home\Model\HelloModel.class.php LINE: 165
目錄組織:
- Application - Home - Model -libs -這裡是引入的庫檔案 -HelloModel.class.php
這是HelloModel.class.php檔案
不知道要如何解決這個問題,求助!!!先謝謝各位了!!!
回複內容:
在使用ThinkPHP開發過程中,因為需要使用一個外部庫,便直接在Model檔案夾下直接建立了一個libs檔案夾,將庫檔案放在裡面,然後在Model中require_once裡面的檔案。
但是ThinkPHP架構Model中使用了namespace,而這個庫裡面同樣使用了namespace,現在程式似乎只在Model引入的namespace中去搜尋庫裡面的use,所以一直報錯:
Class 'Falcon\Model\Thrift\Transport\TSocket' not found錯誤位置FILE: D:\wamp\www\Application\Home\Model\HelloModel.class.php LINE: 165
目錄組織:
- Application - Home - Model -libs -這裡是引入的庫檔案 -HelloModel.class.php
這是HelloModel.class.php檔案
不知道要如何解決這個問題,求助!!!先謝謝各位了!!!
既然你使用了單入口的架構,就不能這樣寫 require_once('libs/thrift_require.php');
1.你可以嘗試改成這樣 require_once('./Application/Home/Model/libs/thrift_require.php');
require_once 一定要寫成絕對路徑.
2.你的libs檔案目錄 建立錯了,因為你建在了Model檔案夾下面,這樣就破壞了架構本身的目錄結構,Thinkphp在自動匯入model裡的class的時候是根據命名空間名稱匯入的,錯誤修改: 在model平級目錄建立libs檔案夾,將第三方庫的每個class檔案加上自己的命名空間.自訂的類,如果沒有命名空間是無法自動載入的.
不要在架構的目錄下面建自己的目錄,不用破壞架構的目錄結構!!!
ps:我經常看你的個人部落格,發現有幾篇寫的非常好的文章
已經解決,只需要修改執行個體化代碼為:
$socket = new \Thrift\Transport\TSocket($host, $port);
如果在前面加上\
會從根尋找,如果不加,應該是在上面的namespace
裡面找。