2017-05-21 2 views
0

나는 학교 프로젝트 용 API를 구현하려고합니다. 나는 모든 것이 옳다고 생각합니다. 그러나 어떤 이유로 코드는 그렇지 않습니다. '이 t은PHP 치명적인 오류 : "클래스 '...'을 (를) 찾을 수 없습니다 ... 온라인에

use repository\PDOPersonRepository; 
use repository\PDOEventRepository; 
use view\PersonJsonView; 
use view\EventJsonView; 
use controller\PersonController; 

$user = 'root'; 
$password = ''; 
$database = 'wp1'; 
$pdo = null; 

try { 
$pdo = new PDO("mysql:host=127.0.0.1;dbname=wp1", 
    $user, $password); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, 
    PDO::ERRMODE_EXCEPTION); 

$personPDORepository = new PDOPersonRepository($pdo); 
$personJsonView = new PersonJsonView(); 
$personController = new PersonController($personPDORepository, $personJsonView); 
$eventPDORepository = new PDOEventRepository($pdo); 
$eventJSonView = new EventJsonView(); 
$eventController = new EventJsonView($eventJSonView, $eventPDORepository); 

Fatal error: Class 'repository\PDOPersonRepository' not found in C:\xampp\htdocs\Werkpakket1\app.php on line 22 

phpstorm 코드에서 오류를 제공하지 않습니다. 사용 라인을 읽고, 그래서 난 정말

+0

그래서 어떤 자동 로딩 메커니즘을 사용하고 있습니까? – CBroe

+0

파일에 클래스를 정의하지 않은 것 같습니다. 일종의 자동 로딩 메커니즘을 포함 시키거나 적어도 클래스가 정의 된 파일을 포함시켜야합니다. – mooiamaduck

답변

0

use 라인이 자신의 namespace에 근거하기보다는 클래스를 포함하는 것이 않는 이유를 이해하지 않습니다 실제 위치는 include 또는 require과 다릅니다. use 키워드가 클래스를 찾으려면 먼저 해당 클래스의 코드를 포함시켜야합니다.

또 다른 방법은 네임 스페이스를 클래스 디렉토리와 일치시킬 수있는 사용자 지정 autoloader을 사용하는 것입니다. 그러면 사용자가 (use)이 필요할 때만 자동으로로드됩니다. 당신은 하나의 파일에 여러 개의 네임 스페이스를 사용할 수

namespace repository; 
class PDOPersonRepository { ... } 

: 해당 파일 같은 것을 포함됩니다

inculde 'Person.php'; 

: 즉

, 당신의 위의 코드는 같은 앞에 추가 할 필요가 , 그러나 이것은 일반적인 관행이 아닙니다.

+0

어떻게하면 제대로 할 수 있습니까? 내가 "저장소 \ PDOPersonRepository"를 포함하면 경로를 찾을 수 없다고 말합니다. – hyperfonic

+0

음 ... [PHP가 기대하는 것] (http://php.net/manual/en/function.include.php)을 사용하면 'include' 명령으로 다른 코드 파일을 찾을 수있는 곳을 알려줄 수 있습니다. 파일에 코드를 넣고 PHP로 읽어 들여야합니다. 파일 시스템에 대한 기본적인 이해는 도움이 될 것입니다. – Code4R7

관련 문제