classes automatisch laden wanneer nodig dus geen AutoLoader of toch wel?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
function __autoload($className) {
// haal de base dir op.
$base = dirname(__FILE__);
// het pad ophalen
$path = $className;
// alle paden samenvoegen tot waar ik zijn moet en de phpfile eraan plakken.
$file = $base . "/" . "/lib/" . $path . '.php';
// als file bestaat haal op anders error
if (file_exists($file)) {
require $file;
}
else {
error_log('Class "' . $className . '" could not be autoloaded');
throw new Exception('Class "' . $className . '" could not be autoloaded from: '.$file);
}
}
$car = new loginform();
?>
function __autoload($className) {
// haal de base dir op.
$base = dirname(__FILE__);
// het pad ophalen
$path = $className;
// alle paden samenvoegen tot waar ik zijn moet en de phpfile eraan plakken.
$file = $base . "/" . "/lib/" . $path . '.php';
// als file bestaat haal op anders error
if (file_exists($file)) {
require $file;
}
else {
error_log('Class "' . $className . '" could not be autoloaded');
throw new Exception('Class "' . $className . '" could not be autoloaded from: '.$file);
}
}
$car = new loginform();
?>
en ik heb voor de include van de loader een echo $file gedaan en ik krijg het juiste pad dus tot daar is het goed. het probleem ligt hem hier
$car = new loginform();
alleen weet ik niet wat.
Quote:
het probleem ligt hem hier
$car = new loginform();
$car = new loginform();
Kun jij me uitleggen waarom je denkt dat het probleem daar ligt?
Edit:
$base . "/" . "/lib/"
Slashje teveel?
Slashje teveel?
Gewijzigd op 28/06/2012 16:39:12 door Wouter J
hij probeert namelijk nog steeds de class te vinden die dezelfde benaming heeft als
$car = new loginform();
want als ik in dat bestandje de klas naar loginform noem doet hij het wel.
denk ik nu verkeerd of hoort het ook gewoon zo.
Gewijzigd op 28/06/2012 16:52:52 door Reshad F
Reshad F op 28/06/2012 16:37:22:
ik kom er nog steeds niet uit waarom hij verwacht dat classname hetzelfde heet als het bestandje
Nogmaals, je schrijft het zelf, dus je snapt niet wat je doet. Belangrijke observatie, want dan wordt het erg moeilijk om het op te lossen.
Knip en plak om de juiste delen even achter elkaar te zetten:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$car = new loginform();
// het pad ophalen
$path = $className;
$file = $base . "/" . "/lib/" . $path . '.php';
?>
$car = new loginform();
// het pad ophalen
$path = $className;
$file = $base . "/" . "/lib/" . $path . '.php';
?>
Je plakt dus gewoon de class achter een pad dat je definieert en daar nog een keer .php achter. Logisch dus dat class = filenaam geldt.
maar hoe zou ik dit anders moeten doen dan? of hoort het ook zo dat een bestandje vernoemd wordt exact aan de class
Ja, dat hoort zo. En het path naar het bestandje exact naar de klasse naam. Dus /lib/Post/BlogPost zou een klasse krijgen die Post_BlogPost heet oid.
Als je het niet doet, hoe ga je dan op basis van de classname het bestand bepalen?