This entry was posted on Monday, October 27th, 2008 at 12:30 pm and is filed under php. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Lei av å inkludere hauger av klassefiler i PHP? Prøv __autoload!
Obs! Autload fungerer kun i PHP5
Autoload er en funksjon som kalles ved bruk av en udefinert klasse eller interface.
Eks:
Høres dette skummelt ut? Som alltid bør slike funksjoner brukes med fornuft.
Her er et par ting å tenke på:
- Vurder å vaske $class_name-parameteren. For å minimere hacker-muligheter.
- Feil kan ikke fanges med catch inne i __autoload-funksjonen.
Tenk også på kodens lesbarhet. I noen tilfeller kan include være nyttig for å synliggjøre avhengighet til visse klasser.
Selv bruker jeg autoload på løse avhengigheter som f.eks Log, Profiler eller Cache-klassene, men lar include gjerne stå ved sterke knytninger.
Her er min autoload-funksjon med whitelist-vasking av $class_name parameteren:
function __autoload($class_name) {
// Whitelist-vasking
$class_name = preg_replace( "/[^a-zA-Z0-9_]/", "", $class_name );
// Sjekk etter filene i alle include-kataloger
$include_path_tokens = explode(':', get_include_path() );
// Aktuelle underkataloger
$dirs = array("classes","models","controllers");
foreach($include_path_tokens as $prefix){
if ($prefix==".")
continue;
foreach($dirs as $dir){
$path = $prefix . '/'.$dir.'/' . $class_name . '.php';
if(file_exists($path)){
require_once $path;
return;
}
}
}
}
Les mer om autoload i PHP-dokumentasjonen.
posted by October 27, 2008 12:30 pm | read comments (0)
