php chiamare metodo parent
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
php chiamare metodo parent
classe A
public function foo() {}
classe B estende A
public function foo(){}
come faccio a chiamare il metodo foo() di A dall'esterno delle classi ?
avendo un'istanza di B
public function foo() {}
classe B estende A
public function foo(){}
come faccio a chiamare il metodo foo() di A dall'esterno delle classi ?
avendo un'istanza di B
Re: php chiamare metodo parent
Non puoi.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php chiamare metodo parent
mmmhh è una limitazione di php o anche altri linguaggi oop fanno così?
p.ex java
p.ex java
Re: php chiamare metodo parent
No, tutti i linguaggi ad oggetti funzionano così.
In alcuni puoi castare l'oggetto alla classe parent e richiamare il metodo ma usi un altro reference Errato, con il cast continui ad usare la stessa implementazione.
In alcuni puoi castare l'oggetto alla classe parent e richiamare il metodo ma usi un altro reference Errato, con il cast continui ad usare la stessa implementazione.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php chiamare metodo parent
se non ricordo male facendo un programmino in c# nella stessa situazione, con l'unica variante che il metodo nelle due classi aveva parametri diversi (cosa che php non ti fa fare)
potevo scegliere quale dei due chiamare con i rispettivi parametri
cmq sia allora non riesco a capire a cosa serva "l'overloading'"
potevo scegliere quale dei due chiamare con i rispettivi parametri
cmq sia allora non riesco a capire a cosa serva "l'overloading'"
Re: php chiamare metodo parent
PHP ha tipizzazione dinamica e argomenti opzionali, non puoi distinguere i metodi dagli argomenti.
Quindi hai a disposizione solo l'overriding.
Quindi hai a disposizione solo l'overriding.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- crap0101
- Rampante Reduce

- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: php chiamare metodo parent
ma le classi le scrivi tu o le puoi solo usare? Perchè altrimenti potresti aggiungere un metodo a B apposta per richiamare quello di A. Non so in tutti gli altri linguaggi OO come funzioni, probabilmente c'è il modo per farlo ma non credo che la cosa venga particolarmente agevolata, che potrebbe non avere molto senso fare una cosa del genere... il tuo scopo finale qual'è? Cioè, le motivazioni per cui vuoi fare così.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Re: php chiamare metodo parent
Se si potrebbe fare un cast da B al tipo A sarebbe semplice. Invecein PHP il cast si può fare solo a tipi di dato predefiniti(object,int) ect.
Tuttavia se deserializzi l'oggetto puoi vedere che la prima parola descrive la classe, quindi se la cambi ed effettui la serializzazione hai fatto un cast.
Ovviamente questo non è un vero e propio cast, se lo fosse dovrebbe essere chiamata la funzione in B
Tuttavia se deserializzi l'oggetto puoi vedere che la prima parola descrive la classe, quindi se la cambi ed effettui la serializzazione hai fatto un cast.
Codice: Seleziona tutto
class A{
public function foo()
{
echo "inside A";
}
}
class B extends A
{
public function foo()
{
echo "inside B";
}
}
function cast($obj, $to_class) {
if(class_exists($to_class)) {
$obj_in = serialize($obj);
$obj_out = 'O:' . strlen($to_class) . ':"' . $to_class . '":' . substr($obj_in, $obj_in[2] + 7);
return unserialize($obj_out);
}
else
return false;
}
$b = new B();
$a = cast($b, "A");
$a->foo(); // stampa "inside A"
Re: php chiamare metodo parent
No, il cast cambia il modo in cui viene tratta l'oggetto non la sua implementazione.disko [url=http://forum.ubuntu-it.org/viewtopic.php?p=4430410#p4430410][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Se si potrebbe fare un cast da B al tipo A sarebbe semplice. Invecein PHP il cast si può fare solo a tipi di dato predefiniti(object,int) ect.
Come esempio basta provare in JAva questo codice:
[code2=java]public class TestCall {
private static class A {
public void foo() {
System.out.println("A");
}
}
private static class B extends A {
public void foo() {
System.out.println("B");
}
}
public static void main(String[] args) {
B b = new B();
A a = (A) b;
a.foo(); // Stampa B
}
}[/code2]
Così però crei un'altro oggetto non lavori sullo stesso.disko [url=http://forum.ubuntu-it.org/viewtopic.php?p=4430410#p4430410][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: Tuttavia se deserializzi l'oggetto puoi vedere che la prima parola descrive la classe, quindi se la cambi ed effettui la serializzazione hai fatto un cast.
Codice: Seleziona tutto
class A{ public function foo() { echo "inside A"; } } class B extends A { public function foo() { echo "inside B"; } } function cast($obj, $to_class) { if(class_exists($to_class)) { $obj_in = serialize($obj); $obj_out = 'O:' . strlen($to_class) . ':"' . $to_class . '":' . substr($obj_in, $obj_in[2] + 7); return unserialize($obj_out); } else return false; } $b = new B(); $a = cast($b, "A"); $a->foo(); // stampa "inside A"
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Re: php chiamare metodo parent
sì infatti ho modificato il post dicendo che non è un cast vero e proprio ma mi hai risposto prima
. Certamente l'oggetto che si crea è un clone fisico
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php chiamare metodo parent
ringrazio tutti per i post la situazione reale è la seguente
la classe ajax è una mia classe base che gestisce l'interazione ajax in tutti i miei progetti
all'interno di un progetto estendo la classe per ogni richiesta ajax
e finora oltre un centinaio di classi estese e nessun problema
il metodo termina_errore
crea un oggetto std class che ritorna la risposta json alla pagina web che lo elabora
oggi per la prima volta mi sono imbatutto in un problema
sto facendo un upload utilizzando ajax con jQuery Form Plugin
la funzione di callback ajax che normalmente ritorna i dati in formato json in questo caso no ritorna solo una stringa di test
quello che volevo fare era di implementare termina_errore nella classe AjaxLogin in modo che torni i dati in formato testo
questo senza dover cambiare tutte le parti già implementate e di richiamare termina_errore sulla classe base quando necessario
è ovvio che ci sono una serie di workaround però comportano cambiare qualche centinaio di righe di codice.
e vvvabè
Codice: Seleziona tutto
class ajax {
public function termina_errore($messaggio,$extra=NULL){
}
all'interno di un progetto estendo la classe per ogni richiesta ajax
Codice: Seleziona tutto
class AjaxLogin extends ajaxil metodo termina_errore
crea un oggetto std class che ritorna la risposta json alla pagina web che lo elabora
oggi per la prima volta mi sono imbatutto in un problema
sto facendo un upload utilizzando ajax con jQuery Form Plugin
la funzione di callback ajax che normalmente ritorna i dati in formato json in questo caso no ritorna solo una stringa di test
quello che volevo fare era di implementare termina_errore nella classe AjaxLogin in modo che torni i dati in formato testo
questo senza dover cambiare tutte le parti già implementate e di richiamare termina_errore sulla classe base quando necessario
è ovvio che ci sono una serie di workaround però comportano cambiare qualche centinaio di righe di codice.
e vvvabè
Re: php chiamare metodo parent
Mi sembra chiaro che sia un problema di ingegnerizzazione della classe.
Il modo pulito di risolvere il problema sarebbe riscrivere la classe per il supporto al formato della risposta.
Il modo piu' sporco può essere aggiungere un argomento al metodo termina_errore di AjaxUpload (o come l'hai chiamata) che ti permette di discriminare se vuoi richiamare quello o quello del parent.
Il tutto si risolverebbe con qualcosa tipo:
[code2=php]if( $terzoArgomento === TRUE ){
return parent::termina_errore($primoArgomento, $secondoArgomento);
}[/code2]
Il modo pulito di risolvere il problema sarebbe riscrivere la classe per il supporto al formato della risposta.
Il modo piu' sporco può essere aggiungere un argomento al metodo termina_errore di AjaxUpload (o come l'hai chiamata) che ti permette di discriminare se vuoi richiamare quello o quello del parent.
Il tutto si risolverebbe con qualcosa tipo:
[code2=php]if( $terzoArgomento === TRUE ){
return parent::termina_errore($primoArgomento, $secondoArgomento);
}[/code2]
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php chiamare metodo parent
eh sì non è bello ma è veloce.
grazie.
grazie.
Re: php chiamare metodo parent
Beh in ogni caso in un qualche modo dovrai far sapere alla classe quando vuoi un formato o l'altro.
Un argomento lo devi aggiungere comunque...
PS: Questo però è il genere di problematiche che si risolvono utilizzando il pattern MVC e un template manager che filtra tutte le risposte.
Un argomento lo devi aggiungere comunque...
PS: Questo però è il genere di problematiche che si risolvono utilizzando il pattern MVC e un template manager che filtra tutte le risposte.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: php chiamare metodo parent
OT: per favore correggete "Se si potrebbe fare un cast da B al tipo A sarebbe semplice" non si può vedere.
"Se si potesse fare..."
Scusate l'intromissione.
"Se si potesse fare..."
Scusate l'intromissione.
Salva l'Ucraina! 
Re: php chiamare metodo parent
Per fortuna ci sono utenti di immensa utilità come te..
Questo è un forum di supporto tecnico non il bar dietro casa tua
Questo è un forum di supporto tecnico non il bar dietro casa tua
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: php chiamare metodo parent
l'ho detto per te! la figura di palta la fai te. Correggi e io cancello il mio commento. Altrimenti fai come vuoi!
Non mi metto a discutere con nessuno, figuriamoci con chi non si rende conto di cosa scrive!
addio!
Non mi metto a discutere con nessuno, figuriamoci con chi non si rende conto di cosa scrive!
addio!
Salva l'Ucraina! 
Re: php chiamare metodo parent
Se lo vuoi dire ad una persona singola puoi scrivere un messaggio privato visto che esistono ed è possibile utilizzarli.
Invece sei venuto quì a scrivere inutilmente in un thread risolto di un piccolo errore ortografico che ho commesso scrivendo una possibile soluzione al problema.
Direi che date le circostanze sei tu che non ti rendi conto di cosa scrivi, tesi maggiormente dimostrata dal fatto che pure hai risposto.
Dovresti partire dal presupposto di non discutere inutilmente invece di scegliere la persona con cui farlo pubblicamente. saluti
Invece sei venuto quì a scrivere inutilmente in un thread risolto di un piccolo errore ortografico che ho commesso scrivendo una possibile soluzione al problema.
Direi che date le circostanze sei tu che non ti rendi conto di cosa scrivi, tesi maggiormente dimostrata dal fatto che pure hai risposto.
Dovresti partire dal presupposto di non discutere inutilmente invece di scegliere la persona con cui farlo pubblicamente. saluti
- crap0101
- Rampante Reduce

- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: php chiamare metodo parent
OT: riguardo il tuo esempio, forse si può usare qualche trucchetto con reflection, però non son sicuro possa funzionare in ogni caso.Zoff [url=http://forum.ubuntu-it.org/viewtopic.php?p=4430414#p4430414][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:No, il cast cambia il modo in cui viene tratta l'oggetto non la sua implementazione.disko [url=http://forum.ubuntu-it.org/viewtopic.php?p=4430410#p4430410][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Se si potrebbe fare un cast da B al tipo A sarebbe semplice. Invecein PHP il cast si può fare solo a tipi di dato predefiniti(object,int) ect.
Come esempio basta provare in JAva questo codice:
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Chi c’è in linea
Visualizzano questa sezione: steff e 5 ospiti
