2016-05-09 4 views
0

Ich versuche, eine Klasse von einer enthaltenen Datei zu erweitern, wenn die Datei ordnungsgemäß enthalten ist. Ich bekomme einen fatalen Fehler, der mir sagt, dass die Klasse nicht existiert.Datei ist richtig enthalten, Klasse existiert jedoch nicht

Dies ist die Datei, in der die Klasse erweitert werden soll. Global.php (Zeile 2) ist eine Autoload-Funktion.

namespace epsilon{ 
    include("global.php"); 
    error_reporting(E_ALL); 
    ini_set('display_errors', 'on'); 

    class epsilon extends Database{ 
      static $name = "Me"; 
    } 

Global.php

spl_autoload_register(function($class){ 
    $namespace = str_replace("\\","/", __NAMESPACE__); 
    $class = str_replace("\\","/",$class); 
    $path = __DIR__."/classes/".(empty($namespace)?"":$namespace."/")."{$class}.class.php"; 
    #var_dump($path); 
    require_once($path); 
}); 

Schließlich ist die diese Datei die Klasse. Welches ich die Epsilon-Klasse erweitern möchte.

class Database{ 

} 

Fatal error: Class 'epsilon\Database' not found

+0

Können Sie zeigen, was '$ path' Ausgaben? – Martin

+1

Funktioniert es, wenn Sie es speziell mit 'extends \ epsilon \ Database' aufrufen? – Martin

Antwort

0

Answer is probably wrong as had not originally realised Qwentalis was trying to extend a class in the same namespace rather than a global namespace class. I will update this answer with a more correct version with some feedback on comments by Qwentalis (or delete this answer)

Klasse epsilon epsilon\Database erstreckt, ist, weil es in dem Epsilon-Namensraum definiert ist, setzten so einfach class epsilon extends \Database es zu zwingen, die globale Namespace-Klasse namens Datenbank zu erweitern.

Sie dieses Verhalten von vorhergehenden, die Anrufe mit einem blackslash definieren können, Beispiele, was in spitzen Klammern ist von PHP angenommen wird:

1 Ihr aktuelles Gespräch):

class epsilon extends <current namespace\>Database 

2) Ihre beabsichtigte rufen Sie (meine Anmerkung oben lesen Sie bitte):

class epsilon extends <global namespace>\Database 
1

Sie müssen hinzufügen \ vor Datenbank-Klasse, weil es nicht unter epsilon-Namespace ist.

class epsilon extends \Database{ 
     static $name = "Me"; 
} 
Verwandte Themen