Newsgroup: it.comp.www.php
Titolo: Identificare la classe chiamante

Salve,
ho un problema un po' strano: ho una classe da cui sono state derivate
altre classi, e devo modificare un metodo di questa classe, ma non mi
ricordo piu' se viene richiamato dalle classi figlie e in generale dove
viene richiamato.
Sto cercando un modo, o una funzione, che mi dica una certa funzione
da chi e' stata chiamata, cioe' da quale altra funzione ma soprattutto da
quale altra classe. Cosi' poi giro per il sito e con un po' di print di
debug so' dove viene richiamato il metodo
Sperando che si sia capito qualcosa, vi saluto :-)
-- 
Ciao,           | Sostituisci "dontspam" con "softhome"
 Francesco      | nell'indirizzo email per avere quello corretto

 viene richiamato.
Forse non ho ben afferrato, ma non sarebbe meglio fare un bel find o ancora
meglio un "extended find" (almeno cosě lo chiama su homesite) e correggere
dove serve?

 dove serve?
Si, certo, anche in quel modo funziona :), diciamo che non ho detto
tutti i particolari. Oltre a trovare i punti in cui la tot funzione
viene chiamata da script a cui ho accesso, dovevo anche verificarlo
per altre classi e funzioni a cui non ho accesso. Questo perche' ho
dato accesso a un mio amico alle mie, e le include, ma io non leggo
le sue, e volevo evitare di incasinargli il tutto se cambio qualcosa
di cruciale


quale altra classe. 
get_class(object) restituisce il nome della classe...
va passato un oggetto della classe.
Altre funzioni utili sono :
get_class_method(nome_classe) (restituisce tutti i metodi
della classe) e get_parent_class(object) .
Cerca queste funzioni nel manule di PHP ufficiale per
saperne di più:)
Ciao!
-- 
WEbdOM webmaster di
Metronic.It mobile phone philosophy
www.gadgetpoint.it
 serigrafia on line

 Sperando che si sia capito qualcosa, vi saluto :-)
Non è una risposta costruttiva. Mi chiedevo quale fosse l'esigenza di
trovare quali altre classi usino una funzione.
Tanto se modifichi la classe padre, in automatico anche tutte le classi
figlie, da essa derivata, chiameranno la classe derivata nuova.
A meno che tu non debba modificare il numero di parametri di un metodo (il
che, purtroppo, in php richiede una modifica di tutti gli altri files per
adeguare il numero di parametri passati al metodo) non vedo l'esigenza di
cercare chi e cosa chiama quel metodo.
Certo tu mi dirai "ma a te che ti frega?" :)) E io rispondo "c'hai ragione"
:)
Però il bello delle classi sta anche nel fatto di poter modificare classi
parenti ed in automatico far ereditare le nuove proprietà anche a tutte le
classi derivate :) O cambiare i metodi (Java in questo è molto molto molto
fico - overloading) i magari aggiungerne qualcuno nuovo differente dal
precedente solo per il numero di argomenti/tipo di argomenti passati.
Byez
J

 cercare chi e cosa chiama quel metodo.
Ecco, bravo, il caso e' poprio questo, purtroppo, e praticamente il
casino si crea a causa della mancanza dell'overloading del php.
Mah, mi pare che questo famigerato modo che cercavo non ci sia, una
cosa che si avvicina vagamente e' loggare il $PHP_SELF quando viene
chiamata la funzione, cosi' so da che file e' stata chiamata.


 chiamata la funzione, cosi' so da che file e' stata chiamata.
Si, però se ci sono delle include, il file incluso prende il php_self del
file che lo chiama.
in pratica:
index.php
include("test.php");
Se scrivo echo $PHP_SELF; nel file test.php, esso stamperà index.php
quindi dipende un po' come hai realizzato il progetto.
Io consiglio, se sei in un ambiente unix, di fare un bel
grep "nome_funzione(" *
Che ti restituisce tutte le chiamate a quella particolare funzione nella
cartella in cui sei in quel momento.
Ciao
J

Più precisamente, restituisce tutti i files in cui c'è la stringa
"nome_funzione("
Non essendo possibile l'overloading, otterrai tutte le chiamate di quel
particolare metodo.
L'unico rischio potrebbe esserci nel caso in cui quella funzione fosse
definita con lo stesso nome anche per oggetti diversi, quindi sarebbero
metodi diversi per oggetti diversi,ma con nome uguali... argh :)
J

 Sperando che si sia capito qualcosa, vi saluto :-)
Ho visto solo adesso la domanda :)
Con questi dovresti essere in grado di ricostruire il tutto:
get_class()
get_declared_classes()
get_parent_class()
get_class_methods()
is_subclass_of()
http://it2.php.net/classobj
 :
function visualizza_var($oggetto) {
    $matrice = get_object_vars($oggetto);
    while (list($prop, $val) = each($matrice))
        echo "\t$prop = $val\n";
}
function visualiazza_metodi($oggetto) {
    $matrice = get_class_methods(get_class($oggetto));
    foreach ($matrice as $metodo)
        echo "\tfunzione $metodo()\n";
}
function padri_classe($oggetto, $classe) {
    global $$oggetto;
    if (is_subclass_of($$oggetto, $classe)) {
        echo "Oggetto $oggetto appartiene alla classe
".get_class($$oggetto);
        echo " derivata da $classe\n";
    } else {
        echo "Oggetto $oggetto non deriva da una sottoclasse di
$classe\n";
    }
}