2016-07-13 12 views
1

ich ein Verzeichnis bin, die wie folgt aussehen:Benutzer Autoloader enthalten Klassen

Directory Schema

in der Datei inc/class/autoload.php habe ich einen Code geschrieben alle enthalten automatisch die Klassen (Cart.class.php und Database.class.php).

autoload.php

<?php 

spl_autoload_register('autoload'); 

function autoload($class){ 
    require_once($class.'.php'); 
} 

Das Problem ist, dass, wenn ich das Datei inc/class/autoload.php in inc/templates/header.php oder products/index.php, die Klasse Cart.class.php und Database.class.php kann nicht gefunden werden.

den Autoloader sind, verwende ich:

  1. require_once('../inc/class/Database.class.php'); in products/index.php
  2. require_once('../class/Database.class.php'); in inc/templates/header.php

Bitte helfen Sie mir dieses Problem zu beheben.

+0

Ihre Autoload-Funktion scheint nicht mit dem '.class'-Suffix oder dem konkreten Unterverzeichnis zu behelligen, das Ihre Dateien enthält (und nein, Sie haben nicht erwähnt, dass der include_path vorbereitet wird). – mario

Antwort

2

verwendet in automatischem Laden zu schließen, die Dateien aus dem gleichen Ort, an dem Ihr autoload.php ist:

require_once(dirname(__FILE__) . "/{$class}.class.php"); 

und dies nur einmal in index.php

require_once('../inc/class/autload.php'); 

Jeder PHP-Skript läuft in Der aktuelle Speicherort, also alle Dateien, die enthalten sind, haben denselben Arbeitsspeicherort. Also, wenn Sie /products/index.php aufrufen, ist der Arbeitsordner /products. Und mit dirname(__FILE__) erhalten Sie den aktuellen Ordner aus der Datei, die das Skript aufruft. Hier ../inc. Für weitere Informationen suchen: Aktuelles Arbeitsverzeichnis - Wie Ordner PHP ändern? Absolute und Relativ Pathes in PHP.

+0

Danke, es funktioniert. Kannst du es mir besser erklären? Normalerweise befinden sich die Dateien im selben Ordner, so dass ich nur den Namen der Datei angeben muss. Aber wieso muss ich den Namen des Ordners erwähnen, in dem der Autoload ist? – Prince