2014-12-18 25 views
7

Der Titel selbst spricht. So, hier ist meine Projektstruktur:PHP Komponist Autoloader-Klasse nicht gefunden Ausnahme

|src 
    |Database 
     |Core 
      |MySQL.php 
     |Support 
    start.php 
|vendor 
composer.json 
index.php 

mysql.php Datei:

<?php 
namespace Database\Core; 
//Some methods here 

index.php und start.php Dateien:

//start.php file 
<?php 
require __DIR__ . '/../vendor/autoload.php'; 
?> 

//index.php file 
<?php 
use Database\Core; 
require __DIR__ . '/src/start.php'; 

$mysql = new MySQL(); // Gets exception Class 'MySQL' cannot found etc. 
?> 

Und schließlich Teil meiner composer.json automatischer Dokumenteneinzug :

"autoload": { 
    "psr-4": "Database\\": "src/" // Also tried "src/Database" too 
} 

Wo ist das Problem? Ich bin es wirklich leid, mit dieser Situation fertig zu werden. Bitte helfen Sie Jungs! Vielen Dank.

Antwort

17

Sie müssen Namespace enthalten, wenn Sie eine Klasse initialisiert wird:

$mysql = new Database\Core\MySQL(); 

oder

use Database\Core\MySQL; 
$mysql = new MySQL(); 

Using namespaces: Aliasing/Importing Siehe

+1

Danke Ich bin wirklich dankbar, aber kann nicht abstimmen aufgrund niedrigen Rufs :) – lostbyte

+0

Lassen Sie mich für Sie stimmen :) –

4

Abgesehen von nicht das Recht use Aussage wie bereits erwähnt verwendet wird, PSR -4 funktioniert nicht so. Es ist eher ein Alias. Sie sagen, im Wesentlichen, dass srcDatabase entspricht. Wenn ein Verzeichnis mit dem Namen Database darin enthalten wäre, würde dies bedeuten, dass der vollständig qualifizierte Namespace + class gleich 'Datenbank \ Datenbank \ Core \ MySQL' ist. Sie möchten in diesem Fall PSR-0 verwenden oder Ihre PSR-4-Definition anpassen.

+0

Um ein bisschen auf diese gute Antwort zu erweitern: Sie möchten nicht, dass Ihr Namespace etwas sein soll generisch wie "Datenbank". Sie möchten etwas verwenden, das kein anderes PHP-Paket bereits verwendet, also ist der Name Ihrer Firma/Organisation eine gute Wahl, z. Wenn Ihre Firma Acme Baseball Cards heißt, könnte ein guter Namensraum "AcmeBaseball" sein. In Ihrer Mysql.php-Datei wäre dann der Namespace 'Namespace AcmeBaseball \ Database \ Core;' und in composer.json '" psr-4 ":" AcmeBaseball \\ ":" src/"' Das werden Sie bemerken, wenn Sie Installieren Sie ein Composer-Paket wie AWS PHP SDK; Öffnen Sie ihre compser.json und der Namensraum ist 'Aws' – KayakinKoder

Verwandte Themen