Newsgroup: it.comp.www.php
Titolo: Oggetti e funzioni "annidiate"

Ciao, ho un problema con una classe che sto realizzando (spero di
riuscire ad esporre il problema!)
In sostanza la mia classe è qualcosa del genere:
//class_foo.php
require_once('classe_fee.php');
class foo
{
    var $a;
    funcion foo()
    {
     $this->a = new fee();
    }
    function mia()
    {
    global $aaa;
    //parte di codice ...
    //questa è la funziona incriminata: sotto_mia()
    function  sotto_mia()
    {
        global $aaa;
        //parte di codice ...
    }
    //l'esempio non è a caso: utilizzo la classe path_parser ed in
particolare il metodo:
    $this->a->set_handler('/aaaa/bbbb/cccc','sotto_mia');
   }
}//end class
}
il problema sorge quando in un file voglio creare 2 oggetti della mia
classe: il primo è OK, mentre il alla chiamata del 2o oggetto mi dice
"impossibile ri-definire la funzione "sotto_mia()" in file
"class_foo.php": funziona già definita in "class_foo.php".
Come posso risolvere?
La presenza della "sotto_funzione" annidiata è data dal fatto che devo
utilizzare (cioè utilizzo questa perhcè non ho trovato di meglio) per
fare il parsing di files XML, e richiede l'inserimento di funzioni che
vengono richiamate quando viene incontrato un determinato elemento
durante il parsing (nell'esempio la mia funzione "sotto_mia" dovrebbe
venire richiamata quando viene trovato l'elemento /aaaa/bbbb/cccc ...
manon posso utilizzare una funzione della mia classe perchè poi
l'oggetto path_parser non riesce a richiamarla ... help!
Ciao ... sono preparato anche insulti sulla costruzione della classe ...
mi basta imparare poi a fare meglio! :-)
Ciao
-- 
..::[ Panz ]::..
-----------------------
per rispondere riscrivi in numeri la mia eMail!

, 
panzOTT...@tin.it
 says...

In tutta sincerità la soluzione trovata non è il massimo della vita, 
fossi in te estenderei/modificherei il parser per poter avere una 
struttura piu' regolare.
Una seconda soluzione sarebbe mettere sotto_mia fuori dalla classe, ma 
dipende dal codice che c'è dentro.
Se vuoi un accrocchio puoi provare (poi facci sapere, mi è venuta in 
mente così) a mettere sotto_mia in un altro file che richiami con un 
include_once. Chissà che non funzioni.
Tac

 utilizzare per fare il parsing di files XML
Utilizza 
http://www.php.net/xml_set_object
-- 
I am what I am, I do what I can
L'uomo, conscio di sbagliare, persevera.

T.A.C. One wrote:
|| In sostanza la mia classe è qualcosa del genere:
[...cut...]
| In tutta sincerità la soluzione trovata non è il massimo della vita,
| fossi in te estenderei/modificherei il parser per poter avere una
| struttura piu' regolare.
Hola Tac! :-)
So che la classe che ho creato fa abbastanza caccare (l'uso del global
per passare alla sotto-funzione i valore della funzione "padre" mi fa
proprio schifo!) , ma è l'unica soluzione "funzionante" che ho trovato
per risolvere il problema del "passaggio della funzione" all'oggetto
path_parser che avevo trovato ... era solo che non volevo mettermi a
studiacchiarmi il funzionamento delle funzioni xml_xxxxxxx che fornisce
già PHP!
A 'sto punto (come anche suggerisce Setec) mi sa che faccio prima a
studiarmi il funzionamento e basta!
| Se vuoi un accrocchio puoi provare (poi facci sapere, mi è venuta in
| mente così) a mettere sotto_mia in un altro file che richiami con un
| include_once. Chissà che non funzioni.
Ok,  appena ho tempo provo il tuo "trucco"!
Ciao!
..::[ Panz ]::..
ps: quello che volevo realizzare era una classe per la gestione di menu
in xml (con i18n): la classe semplicemente stampa a video i collegamenti
con accesskeys, titoli dei links e il testo concorde con la "traduzione"
scelta (tutto nel fiel xml) ... sapete se esite qualcosa di già fatto?
Grazie ancora a tutti e due! Ciao! -Panz-


 studiarmi il funzionamento e basta!
Regola Zero: non reinventare la ruota. :-)


Infatti, ho trovato il sistema per risolvere il problema: leggendo il
codice della classe path_parser ho visto che volendo rifarmi io il
parser avrei dovuto riscrivere quasi per intero la classe, quindi mi
sono detto: perchè non aggiungere la parte che mi manca? Avevo già fatto
delle modifiche alla suddetta classe (per chi l'ha provata, ho fatto in
modo che il contenuto di un elemento gestito dall'handler fosse il testo
compreso tra i tag, non i tag + gli attributi). Ho aggiunto la
possibilità di specificare un handler con relativo oggetto e poi
utilizzo la chiamata call_user_function() spero di non aver sbagliato a
scrivere. In questo modo passo alla classe parser come handler i metodi
della mia classe che poi verranno richiamati! (l'unico inconveniente è
che in questi metodi non posso riferirmi a $this->xxxxx ... credo perchè
vengono richiamati da "fuori" ... spero!
Ok, per ora funziona ... se qualcuno fosse interessato alle mie
modifiche alla classe path_paser mi faccia sapere, almeno per sentirmi
dire qualche insulto sulla mia programamzione! (spero di no!) :-)
Ciao!
-- 
..::[ Panz ]::..
