2015-07-21 58 views
0

我有兩個文件,第一個是test.php的,看起來像這樣:PHP類,但進口

<?php 
namespace My\Namespaces\Test; 

class Test { 
    const ALERT_EMAIL = "AlertEmail"; 
    const ALERT_SMS = "AlertSms"; 
    const ALERT_NOTIFICATION = "AlertNotification"; 
} // class - EnumAlertType 
?> 

和其他文件儘量使用常量從test.php的

<?php 
use My\Namespaces\Test; 
$a = Test::ALERT_SMS; 
?> 

但我仍然得到Class 'My\Namespaces\Test' not found錯誤,我不確定是否正確使用名稱空間。謝謝

+3

我認爲這是一個打字錯誤,而在第二個例子中('Namespace' vs'Namespaces'),對吧?無論如何,你有沒有配置自動加載(因爲我沒有看到你的代碼中包含任何手動提及)? – Rangad

+2

也許你會'include()'這個文件,而不是'使用'這個類。 – D4V1D

+0

[Autoload classes from different folders]可能的重複(http://stackoverflow.com/questions/5280347/autoload-classes-from-different-folders) – D4V1D

回答

1

您需要在這裏區分兩個術語:包括導入。前者是在正在執行的當前腳本中添加代碼,後者則是在代碼中輕鬆使用它們。包括litteraly複製粘貼代碼到當前腳本,以便稍後可以使用。

因此,您需要將包括require_once())類Test的代碼放入將使用該代碼的文件中。你確實可以在之後導入use)(特別是如果文件在分開的文件夾中)。因此,您需要:

<?php 
require_once('Test.php'); // include the code 
use My\Namespaces\Test; // import it if you want but not useful as the two file are in the same folder 
$a = Test::ALERT_SMS; // access to class constants 

您應該開始深入spl_autoloader_register()函數。

+0

嗨,我嘗試使用require_once,它的工作原理,真的非常感謝你。但我仍然困惑,當我使用symfony框架,我可以直接導入其他類沒有require_once(),我不知道如果symfony有什麼區別.. – user2810081

+0

[當然symfony確實有所作爲](http ://symfony.com/doc/current/components/class_loader/index.html)像ZF,我敢肯定,任何其他框架。 – D4V1D

+0

你是否考慮過接受這個答案,如果它解決了你的問題? – D4V1D