ugrás a tartalomhoz

autoload erdekesseg

carstepPCE · 2008. Szep. 30. (K), 16.48
Sziasztok,

nem tudom valaki futott e mar bele valami hasonloba, de nekem nagyon furcsanak tunik itten valami:

	function __autoload( $class ) {
		if (class_exists($class, false) || interface_exists($class, false)) {
	        return;   
	    }
	    
		$file = 'classes' . DIRECTORY_SEPARATOR . $class . '.php' ;
		$file2 = 'classes' . DIRECTORY_SEPARATOR . 'models' . DIRECTORY_SEPARATOR . 'service_' . $class . '.php' ;
	
		if ( file_exists( $file2 ))	{
			@require_once( $file2 );
			if ( class_exists( $class, false ) ) { echo 'igen osztaly van::: '.$class . ' ::: '; }
		}
		else if ( file_exists( $file ) ) @require_once( $file );
		
        if ( ! class_exists($class, false) || !interface_exists($class, false)) {
            throw new Exception('Class ' . $class . ' not found', 0 );
        }
	}
erre kapom azt, hogy:

"igen osztaly van:::vrn_all_products ::: Unexpected error happened!Class vrn_all_products not found"

Ehhez mit szoltok, en nem latom a hibat? Az elirasokat lecsekkoltam!

Udv
Sanyi
 
1

megvan

carstepPCE · 2008. Szep. 30. (K), 17.02
Bocsi megtalaltam a hibat!

if ( ! class_exists($class, false) || !interface_exists($class, false)) {

helyett

if ( ! class_exists($class, false) && !interface_exists($class, false)) {

kellett

Udv
Sanyi
2

pár megjegyzés

Hodicska Gergely · 2008. Okt. 5. (V), 03.08
A feltétel eleve fölösleges, hisz az autoload csak akkor hívódik meg, ha nem létezik az osztály.

A helyedben valamilyen fix névkonvencióval megkülönböztetném a két esetet, nem pedig sorrendben megpróbálva.

Mivel az autoload csak egyszer fog meghívódni, a _once fölösleges.

Kivételt nem lehet autoloadból dobni, lásd: http://weblabor.hu/blog/20080710/phpautoloadbug.

Eleve ne használj @-ot, de van egy kis logikai bukfenc is a dologban. A @-cal azt sugallja a kódod, hogy majd te megoldod a hibakezelést, de ha a require hibázna, akkor az fatal error.

Plusz én nem használnék file_exist-et (ha mégis, akkor inkább is_readable), helyette include (visszatérési érték ellenőrzése), plusz saját hibakezelő. Így gyorsabb lesz az egész, plusz biztosan értesülsz a hibáról.