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:
  1. function __autoload( $class ) {  
  2.     if (class_exists($class, false) || interface_exists($class, false)) {  
  3.         return;     
  4.     }  
  5.       
  6.     $file = 'classes' . DIRECTORY_SEPARATOR . $class . '.php' ;  
  7.     $file2 = 'classes' . DIRECTORY_SEPARATOR . 'models' . DIRECTORY_SEPARATOR . 'service_' . $class . '.php' ;  
  8.   
  9.     if ( file_exists$file2 )) {  
  10.         @require_once$file2 );  
  11.         if ( class_exists$class, false ) ) { echo 'igen osztaly van::: '.$class . ' ::: '; }  
  12.     }  
  13.     else if ( file_exists$file ) ) @require_once$file );  
  14.       
  15.        if ( ! class_exists($class, false) || !interface_exists($class, false)) {  
  16.            throw new Exception('Class ' . $class . ' not found', 0 );  
  17.        }  
  18. }  
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.