Hi mensen,

Ik wil al mijn PHP-klassen laten includen met de functie set_include_path(). Maar deze werkt niet:

<?php

$includePath = "php/classes/";
set_include_path(get_include_path().PATH_SEPARATOR.$includePath);
// set_include_path() zoals hierboven geeft TRUE terug

?>

Maar als ik vervolgens een nieuw object aanmaak, dan geeft ie een fatal error: Fatal error: Class 'Database' not found.

<?php

new Database();

?>

Hoe kan dit? Is dit een bekend probleem?

Greetz,
Maurits
Ik denk dat je [php]autoload[/php] zoekt.
set_include_path() definieert alleen de paden waarin gezocht wordt met include() en verwanten. Zelf included het niets.
Dank jullie wel! Ik had inderdaad niet goed begrepen wat een include path was.
Ik heb het probleem vervolgens zo opgelost:

<?php

// Huidige include path
$includePaths = get_include_path().PATH_SEPARATOR;

// Include de file reader class
require_once "FileReader.class.php";

// Lees de directory's (plus alle subdirectory's) uit
// (alleen directory's, geen bestanden) en sla deze op
// in een array.
$directoryList = FileReader::directoryToArray($baseIncludePath, true, FileReader::DIRECTORIES_ONLY);

// Include elke subdirectory
foreach ($directoryList as $directory) {
$includePaths .= $directory.PATH_SEPARATOR;
}
set_include_path($includePaths);

// Autoload
function __autoload($className) {
// Als een klasse niet gevonden
// kan worden: include hem.
require_once $className.".class.php";
}

?>

Nogmaals: bedankt!

Reageren