2011-08-05 56 views
3

經過4年的PHP編程缺席之後,我試圖在其中創建一些新項目。找不到類 - 使用「使用」

我正在收集一些有用的庫。我有「使用」關鍵字的問題。這是我的代碼中引發錯誤的部分。

<?PHP 

    use Assetic\Asset\AssetCollection; 
    use Assetic\Asset\FileAsset; 
    use Assetic\Asset\GlobAsset; 

    $js = new AssetCollection(array(
    ... 
?> 

而且我得到錯誤:

Fatal error: Class 'Assetic\Asset\AssetCollection' not found in /home/php/index.php on line 7 

我想,也許是有點問題在php.ini的include_path,但它看起來像這樣:

include_path = ".:/usr/share/php5:/usr/share/php" 

難道我想念什麼?

順便說一句。我正在使用nginx + php-fpm。

+0

你使用資產獨立,還是在框架? – Maerlyn

+0

獨立。我的意思是,我沒有使用任何框架。 – ThomK

+0

你在哪裏包含了包含這些類定義的文件? –

回答

9

use關鍵字實際上並不包含任何文件。恐怕你必須使用spl_register_autoload()調用來註冊一個自動加載函數,或者手動包含這些文件。

http://www.php.net/manual/en/function.spl-autoload-register.php

通常是一個很好的默認自動加載機將尋找文件下面的命名空間相同的路徑,像這樣:

spl_autoload_register(
    function($className) 
    { 
     $className = str_replace("_", "\\", $className); 
     $className = ltrim($className, '\\'); 
     $fileName = ''; 
     $namespace = ''; 
     if ($lastNsPos = strripos($className, '\\')) 
     { 
      $namespace = substr($className, 0, $lastNsPos); 
      $className = substr($className, $lastNsPos + 1); 
      $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; 
     } 
     $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; 

     require $fileName; 
    } 
); 

更多關於在PHP autloading,結構,許多(更新)項目如下:http://groups.google.com/group/php-standards/web/psr-0-final-proposal

+0

哦! :)我想我應該讀一些新手開始PHP ...再次。 ;) 謝謝。現在正在工作。 :) – ThomK

+0

大:)享受! – Pelshoff

+0

這個自動加載器可以很好地工作:https://github.com/symfony/symfony/blob/master/src/Symfony/Component/ClassLoader/UniversalClassLoader.php – Maerlyn