2017-05-21 14 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キーワードがクラスを見つけるには、それらのクラスのコードを最初に含めなければなりません。

もう1つの方法は、ネームスペースをクラスのディレクトリと一致させることができるカスタム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