Newsgroup: it.comp.www.php
Titolo: autoload solo tre classi!

function __autoload($class_name)
{
   //require_once $class_name . '.php';
   echo $class_name.'<br>';
}
ecco questo codice viene chiamato solo 3 volte !
ma io di classi ne istanzio parecchie
quale può essere il motivo ?
grazie
ciao
--
The framework for develoment user interface on application web-based
http://sourceforge.net/projects/rdmyframework/


Dipende, generalmente dall include, php5 non va recuperando l'autoload
in maniera automatica , ma lo fa tramite include, e' probabile quindi
che venga recuperato solo nella classi dove e' incluso. Altro motivo,
potrebbe essere che la classe chiamata probebilmente non ha un file
.php con lo stesso nome, ma e' differente.
In caso comunque, potresti darmi delleinformazioni piu precise, tipo
errori di ritorno ed eventuale struttura delle directory del tuo
progetto, forse si riesce a capire meglio :-)

>progetto, forse si riesce a capire meglio :-)
Allora forse non mi è chiaro come funziona __autoload
io ho tanti file che hanno anche più classi!
pensavo che autoload veniva chiamata quando si cercava di creare una classe
un pò prima! (anche per le classi derivate) così da includere prima di 
usarlo
il codice appunto della classe!
perchè cmq come parametro autoload riceve il nome della classe poi
l'assocciazione nome classe -> file .php la fa il programmatore
non credo sia d'obbligo!
ho sbaglio ?


 non credo sia d'obbligo!
Non capisco l'ultima frase.
__autoload di suo non fa niente. E` una semplice funzione che viene
richiamata quando tenti di istanziare una classe non definita.
Dentro puoi farci quello che vuoi, dal sollevare un eccezione al caricare
500 file con tutte le classi del tuo software.
Naturalmente se una classe deriva o usa un'altra classe, __autoload viene
richiamata ricorsivamente.
Io solitamente creo un file per ogni classe, con lo stesso nome della
classe, e faccio un require_once("classes/" .$classname. ".php");
Bye.


Ok forse mi sono spiegato male la penso esattamente come te.
Il punto ora č perchč con questo codice:
function __autoload($class_name)
{
   //require_once $class_name . '.php';
   echo $class_name.'<br>';
}
la funzione autoload viene chiamata solo 3 volte mentre io nella mia pagina
instanzio decine di classi ?
Dichiaro la funzione autoload all'inizio del file principale.


 instanzio decine di classi ?
Forse perche` le istanzi dentro degli if che non vengono eseguiti.
O perche` istanzi sempre le stesse classi.
Bisognerebbe vedere il codice per capirlo.
Ti assicuro comunque che __autoload funziona benissimo. La uso gia` in una
decina di siti da oltre 6 mesi e non ha mai mancato un colpo.
Bye.

 decina di siti da oltre 6 mesi e non ha mai mancato un colpo.
Guarda il codice :
//index.php
<?php
function __autoload($class_name)
{
 global $i;
   //require_once $class_name . '.php';
   echo $class_name.'<br>';
   echo $i++ .'<br>';
}
require("fileprova.php");
$prova = new prova();
?>
//fileprova.php
<?php
class prova extends ISectionCache
{
function prova()
{}
function pre_draw()
{
}
function get_NameEntryCache()
{
}
}
?>
purtroppo non capisco perchč non passa! nell'__autoload



forse ho capito cosa non andava in pratica __autoload viene chiamata
solo quando la classe non č inclusa
Perchč se nel codice di prima tolgo il require e lo metto dentro autoload
allora tutto il meccanismo funziona.
...


 solo quando la classe non è inclusa
ovvio! :P
stavo per dirtelo quando ho visto che includevi il file della classe ma
vedo che ci sei arrivato da solo
pero' ti segnalo questo problema in cui mi sono imbattuto, potrebbe
tornarti utile...
sto iniziando un progetto ad oggetti che utilizza altre librerie oltre
le classi del progetto stesso.
queste librerie le includo a mano in un file di prepend e hanno un path
di inclusione diverso da quello definito nell'__autoload(). nessun
problema, queste classi risultano gia' incluse e l'__autoload() non
interviene. senonche'... senonche' alcune oggetti del progetto (che
instanziano un singleton delle librerie) sono in sessione, per cui al
session_start() viene cercata l'inclusione di tutte le classi in
sessione (quelle del progetto e quelle delle librerie instanziate via
singleton dagli oggetti del progetto). avevo messo il session_start()
all'inizio del file di prepend, per cui anche per le librerie veniva
richiamato l'__autoload() dal momento che l'inclusione statica al path
corretto era successiva alla deserializzazione degli oggetti in
sessione (e quindi alla necessita' della definizione della classe). e'
bastato spostare il session_start() dopo l'inclusione statica delle
librerie (ma sul momento non riuscivo a spiegarmi il perche'
dell'errore)

 ha scritto nel messaggio 
news:1161713179....@i42g2000cwa.googlegroups.com...




si molto utile grazie mille


"yappo" <yappo2 no basta spam@ tisc_ali . it> ha scritto nel messaggio 
news:453e85fd$0$13758$4faf...@reader3.news.tin.it...

Aggiungo scusate ma autoload funziona anche con le interfacce ?
