2011-08-05 10 views
3

PHP 프로그래밍에서 4 년을 보냈지만 새로운 프로젝트를 만들려고합니다.클래스를 찾을 수 없습니다 - "use"를 사용합니다

몇 가지 유용한 라이브러리를 수집 중입니다. 그리고 "사용"키워드에 문제가 있습니다. 다음은 오류가 발생하는 코드의 일부입니다.

<?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" 

내가나요 뭔가보고 싶니?

BTW. 나는 nginx + php-fpm을 사용하고있다.

+0

Assetic 독립 실행 형 또는 프레임 워크를 사용하고 있습니까? – Maerlyn

+0

독립 실행 형. 내 말은, 나는 어떤 프레임 워크도 사용하지 않는다는 것이다. – ThomK

+0

그리고 그 클래스의 정의가 들어있는 파일은 어디에 포함 시켰습니까? –

답변

9

use 키워드에는 실제로 어떤 파일도 포함되어 있지 않습니다. 오토로드 기능을 spl_register_autoload() 호출로 등록하거나 수동으로 파일을 포함시켜야 할까봐 걱정됩니다.

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

일반적으로 다음과 같이 네임 스페이스와 같은 경로를 따라 파일을 찾을 것입니다 좋은 기본 자동 로더 :

PHP에서 autloading에
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; 
    } 
); 

더, 구조 많은 (새로운) 프로젝트 다음과 같습니다 : http://groups.google.com/group/php-standards/web/psr-0-final-proposal

+0

오! :) 나는 PHP로 초보자 시작을 읽어야한다고 생각한다 ... 다시. ;) 감사. 이제 작동 중입니다. :) – ThomK

+0

그레이트 :) 즐기십시오! – Pelshoff

+0

이 오토로더는 assetic과 잘 작동합니다 : https://github.com/symfony/symfony/blob/master/src/Symfony/Component/ClassLoader/UniversalClassLoader.php – Maerlyn

관련 문제