在PHP

2017-10-17 24 views
0

簡單的命名空間,我想從 包括Proxy類./proxy/Proxy.php./index.php在PHP

require_once 'proxy/Proxy.php'; 
$proxy = new Proxy(); 

不過下次我要使用的命名空間,所以我提出:

./proxy/Proxy.php

namespace proxy; 
class Proxy 
{ 
[...] 

./index.php

$proxy = new \proxy\Proxy(); 

$proxy = new proxy\Proxy(); 

use proxy\Proxy; 
$proxy = new Proxy(); 

,我總是得到: Fatal error: Uncaught Error: Class 'proxy\Proxy' not found in /var/www/proxy/index.php

有什麼不對?

+2

您仍然需要包含類文件....使用類的命名空間不會自動爲您做包含,它只是命名空間它們 –

回答

1

首先,如果您打算使用名稱空間,使它們符合PSR-4自動加載器!檢查此鏈接:

http://www.php-fig.org/psr/psr-4/

換句話說,我要問你你的命名空間與資本變更爲Proxy

其次,爲了讓自動加載工作,您需要註冊自動加載器。您可以通過檢查http://php.net/manual/en/function.spl-autoload-register.php來自己做,或者更好的方法是安裝Composer(https://getcomposer.org/)。

然後,如果您當前沒有使用Composer,請從您的站點根目錄運行composer init,這將生成一個composer.json

JSON的內部,添加此項:

"autoload": { 
    "psr-4": { 
     "Proxy": "src/" 
    }, 
}, 

,它假定所有的類命名空間代理走在src目錄開始。

由於您對自動加載配置進行了更改,請運行composer dumpautoload,它將生成新的類別映射。

最後,在你的腳本中,require_once 'vendor/autoload.php,你再也不需要require一個類!

require_once 'vendor/autoload.php'; 

use Proxy\Proxy; 

$proxy = new Proxy(); 

公約所依據的文件路徑和名稱,所以src/Proxy.phpnamepace Proxyclass Proxysrc/Something/Else.php將是namespace Proxy\Somethingclass Else

玩得開心! :-D

1

試試你的index.php裏面的以下內容:需要

include 'proxy/Proxy.php'; 
use proxy\Proxy; 

$proxy = new Proxy(); 

此文件與類被列入爲了訪問。只調用它的命名空間是不夠的。

0

^^從mega6382I的評論應該做的伎倆。

但是我想或許可以幫助您進一步開發,我建議您在需要時自動加載文件?您可以使用PHP自帶的自動加載器:「spl_autoload_register!」。 我還建議您使用一些更好的命名空間,\ proxy \ Proxy根本沒有意義...