2016-07-06 25 views
1

我從來沒有在PHP中使用過命名空間,我無法導入某些使用它們的庫類。我試圖使用wsdl2php庫,這裏是如何使用該庫的示例代碼:PHP如何導入具有命名空間的類

$generator = new \Wsdl2PhpGenerator\Generator(); 
$generator->generate(
    new \Wsdl2PhpGenerator\Config(array(
    'inputFile' => 'input.wsdl', 
    'outputDir' => '/tmp/output' 
)) 
); 

但是,它不事關我放哪兒,執行該代碼我的PHP文件,它總是拋出類未發現錯誤,即使我包含includerequire這兩個類,那麼庫類也會拋出class not found錯誤,因爲它要使用另一個庫類。

下面是一些供參考的目錄樹:在config.php

[src] 
    [Filter] 
     DefaultFilter.php 
     ... 
    [Wsdl2PhpGenerator] 
     [Console] 
      Applicaton.php 
      ... 
    ... 
    Config.php 
    Generator.php 
    my_php_file_here.php 

命名空間聲明:namespace Wsdl2PhpGenerator;如何use是在config.php使用:use Wsdl2PhpGenerator\ConfigInterface;

從我所看到的,我已經加入以下以我的php文件開頭:

namespace Wsdl2PhpGenerator; 

use Wsdl2PhpGenerator\Generator; 
use Wsdl2PhpGenerator\Config; 

沒有成功,我仍然得到

Fatal error: Class 'Wsdl2PhpGenerator\Generator' not found in C:\kajacx\programming\PHP\EET\test\wsdl2phpgenerator-master\src\kappa.php on line 8 ($generator = new \Wsdl2PhpGenerator\Generator();) 

那麼,如何使這項工作?

+0

您忘記了在名稱空間之前添加一個起始'\':use \ Wsdl2PhpGenerator \ Generator;'這個''表示您的名字空間不在當前命名空間範圍內 – Timothy

+0

'namespace Wsdl2PhpGenerator;'爲上游保留你正在使用的軟件包,你不應該使用它。在你的代碼中,使用你自己的命名空間,例如'namespace kajacx'。您將需要使用自動加載器或自己需要所需的文件。爲了讓生活更輕鬆,繼續看看作曲家:https://getcomposer.org/ – ymas

+0

@Timothy是的,我已經嘗試在名稱空間之前添加'\\',但我仍然得到相同的錯誤。 @ymas我已經使用作曲家來首先獲取這些文件 – kajacx

回答

0

只需使用:

require_once __DIR__ . '/vendor/autoload.php'; 

和作曲家將解決進口爲您服務。 (具有相同的lib測試,它的工作)

1

因爲正如我剛纔與wsdl2php LIB(從GitHub克隆)工作,並有同樣的問題,這裏是我做過什麼來解決這個問題:

1)不要忘了首先推出composer install ...

2)將require_once dirname(dirname(__FILE__)) . '/vendor/autoload.php';添加到您的php文件的頂部。