Namespaces und traits
Ich erhalte eine Fehler mit traits und namespaces, denn der Zug kann nicht gefunden werden.
index.php:
require_once 'src/App.php';
use App\main;
$App = new App();
src/App.php
namespace App\main;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'DataBase.php';
/**
* code
*/
src/DataBase.php
namespace App\DataBase;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'Singleton.php';
class DataBase {
use Singleton; //or use App\Singleton
/**
* code
*/
}
src/Singleton.php
namespace App\Singleton.php;
trait Singleton {
/**
* code
*/
}
Aber, wenn ich ausführen, die von Index.php ich bin immer diese Fehlermeldung:
Fatal error: Trait 'App\DataBase\Singleton' not found in (...)
Wie kann ich es beheben?
BEARBEITEN
Php automatisch legen Sie die class-Namen im Namensraum, zum Beispiel:
Bar.php
namespace App;
class Bar {
/**
* code
*/
}
Die, wenn Sie rufen Sie dieses Paket, das Sie verwenden können App\Bar, das bedeutet, dass die Klassen gesetzt standardmäßig.
use App\main
imindex.php
nichts.App\main
ist ein namespace, nicht ein symbol name
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht importieren (oder verwenden-ing in PHP-Sprachgebrauch) der
App\Singleton\Singleton
- symbol in IhremApp\DataBase
- namespace, damit PHP geht davon aus, dassSingleton
im gleichen namespace.In
src/DataBase.php
...Auch, ich sehr empfehlen Sie implementieren einen autoloader-Strategie (vorzugsweise PSR-0) zu vermeiden, alle
require_once
Anrufe.Update
Klären, wenn Sie dies tun...
Der volle name dieser Klasse ist
\App\DataBase\DataBase
. Dienamespace
Erklärung nicht enthalten ist die Klasse /Merkmal-Namen.Singleton
imApp
- namespace anstelle desApp/Singleton
namespace, dann einfach ändern. Gleiches gilt fürDataBase
imApp/DataBase
namespace.