2016-06-19 9 views
-1

funktioniert Wenn ich require_once oder include_once verwenden, um eine Datei schließen es nicht funktioniert, während, wenn ich require oder include verwenden es funktioniert gut.‚verlangen‘ Arbeit, sondern ‚require_once‘ nicht

public function ParseURL() { 
    require_once (APP_PATH . "config/config.php"); 

    $this->url_as_parts = explode('/', $this->url); 
    $class = isset($this->url_as_parts[0]) ? $this->url_as_parts[0] : $config['default_controller']; 
    $method = isset($this->url_as_parts[1]) ? $this->url_as_parts[1] : "index"; 
    $parms = isset($this->url_as_parts[2]) ? $this->url_as_parts[2] : ""; 

    if (!class_exists($class)) { 
     trigger_error("The class {$class} not exists <br/>"); 
     exit; 
    } 
    $controller = Object::get($class); 
    if (!method_exists($controller, $method)) { 
     header('HTTP/1.0 404 Not Found'); 
     include(SYSTEM_PATH . "languages/" . $config['system_language'] . "/errors/404_not_found.html"); 
     exit;   
    } 

    if (empty($parms)) { 
     $controller->{$method}(); 
    } else { 
     $parms_array = array_slice($this->url_as_parts, 2); 
     call_user_func_array(array($controller, $method), $parms_array); 
    } 
} 

Die folgende Zeile erzeugt keinen Fehler und der Pfad korrekt ist require_once (APP_PATH . "config/config.php"); aber ich kippe Zugang $config['system_language'] die config.php in der Datei ist.

Beachten Sie, dass alles in Ordnung ist, wenn ich die require_once zu require oder include ändern.

+0

Weil Sie die Funktion zweimal und für alle Zeiten nach dem ersten verwenden diese Datei nicht enthalten? –

+0

Baybe Sie es einmal eingeschlossen, und überschreiben Sie die Werte von '$ config' irgendwo anders später in Ihrem Code –

+1

Oh, es ist in einer Funktion ... Do 'global $ config;' innerhalb der Funktion oder übergeben Sie $ Config als Parameter Zu der Funktion –

Antwort

0

Kann es sein, dass etwas anderes config/config.php enthält und dann die Variable $config neu definiert/überschreibt?

Der Unterschied zwischen require_once() und ist regelmäßig Pendants (include() usw.) ist, dass require_once() enthält nur (und führt, falls zutreffend) etwas, wenn es vor nicht eingeschlossen wurde.

0

Dies könnte sein, weil Sie bereits Laden config/config.php irgendwo vor in Ihrem Code. Aufruf require_once(APP_PATH . "config/config.php"); prüft, ob die Datei config.php bereits enthalten ist und daher nicht innerhalb dieser Funktion enthält. Das ist der Grund, warum Ihre Funktion keinen Zugriff auf $config Variable hat.

Hoffe, dass hilft.

1

Wie kommt aus require_once Beschreibung - Datei benötigt nur einmal

Jede andere require_once dieser Datei wird nicht Arbeit.

Und Sie führen Sie offensichtlich Funktion ParseURL mehr als einmal. So funktioniert Ihre require_once nicht bei zweiten und aufeinanderfolgenden Anrufen.

So können Sie nur require10 verwenden oder, wie ich sehe, dies ist Teil einer Klasse, erstellen Sie zum Beispiel eine Wrapper-Methode, die config Daten zu Ihrer Klassenvariablen zuweisen. Das heißt:

public function getConfig() 
{ 
    $this->config = require_once('FILE'); 
} 

In diesem Fall Ihre Konfigurationsdatei sollte Rückkehr Array oder ein Objekt von Konfigurationsvariablen.

Verwandte Themen