Dienstag, Januar 21, 2020

PHP-namespaces nicht funktioniert

Ich versuche, PHP-namespaces für das erste mal und kann noch nicht mal ein sehr einfaches Beispiel arbeiten mit 2 Dateien. Hier mein Verzeichnis:

/Framework/

/Framework/index.php

/Framework/Models/TestModel.php

Und hier ist der code, der hinter den beiden Dateien.

index.php:

 namespace Rahmen; 

verwenden Sie \Framework\Models\TestModel; 

$model = new TestModel(); 
$model->test(); 

TestModel.php:

 namespace Framework\Models; 

Klasse TestModel 
{ 
public function test() 
{ 
print("test"); 
} 
} 

Der Fehler ist einfach, dass es nicht finden können, das TestModel Klasse:

Fatal error: Class ‚Framework\Models\TestModel‘ not found in C:\xampp\htdocs\Framework\index.php auf der Linie 7

Ich bin mit dem PHP über einen web-browser an localhost/Framework/index.php. Es muss etwas sein, was wirklich einfach bin ich nicht zu sehen, kann jeder Punkt, der für mich?

  • Wir müssen sehen, wie Sie das automatische laden von Klassen…
  • Sie haben noch nicht geladen, die Datei mit TestModel Klasse require_once 'Models/TestModel.php';
  • Was ist der Sinn von Namespaces, falls Sie haben zu verwenden require_once?
  • PHP viel mehr verwirrend, die Sprache, als es vorher war. (Im ernst, viele wissen nicht, wie namespaces implementiert wurden.) Das heißt, das technisch zu verhindern, dass überlappende Namen, wenn Sie viele Dateien (oder eine lange änderungen enthält) Hinzugefügt werden. Selbst wenn Sie Sie brauchen, für einige Grund, Ihre bestimmte Datei zu können, müssen die Funktionen und Klassen, um nur ein paar für, was es tut. In der Regel sind Sie ein Zeichen dafür, dass eine codebase ist mittlerweile so unweildly, dass niemand komplett weiß, was Los ist nicht mehr, und Sie sind ein Werkzeug, um zu halten von shooting selbst in den Fuß.
InformationsquelleAutor user1695736 | 2012-09-24

1 Kommentar

  1. 0

    Sollten Sie entfernen „namespace“ Framework “ und gehören TestModel.php stattdessen in Ihrer index.php – so Etwas wie dieses:

    require_once('Models/TestModel.php');
    
    use \Framework\Models\TestModel;
    
    $model = new TestModel();
    $model->test();

Kostenlose Online-Tests