|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
[PHP][OOP][Classi] Delucidazione sull'overriding delle funzioni
Ciao a tutti
ultimamente mi sto cimentando con il PHP ma non ho ben chiaro una cosa: posto qualche riga di codice. class cane { function bau() { return "baubau"; } } class carlino extends cane { function bau() { return "arfarf"; } } La classe "carlino" estende la classe "cane" e ne sovrascrive la funzione "bau". Esiste un modo per "concatenare" (o "appendere") il codice della funzione carlino->bau alla funzione cane->bau senza che la 1° sovrasciva la 2° (vorrei evitare di usare ulteriori funzioni per aggirare il problema) Ho una situazione simile in un piccolo applicativo che sto realizzando e non capisco come fare :\ |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
sicuramente non ho capito cosa intendi perchè con una prova del genere funziona ma mi sembra strano..
Codice:
<?php
class cane
{
function bau()
{
return "baubau";
}
}
class carlino extends cane
{
function bau()
{
return "arfarf";
}
}
$c = new cane();
$car = new carlino();
echo $c->bau() . $car->bau() . "<br />";
?>
Ultima modifica di ndakota : 04-12-2008 alle 13:02. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
provo a spiegarlo meglio...
Sto pasticciando con un framework (CakePHP) che utilizza il pattern MVC. Ho una classe (AppController) che viene estesa da varie sottoclassi (es: BranoController, ArtistaController). Prima di salvare i dati nel DB ho alcune formattazioni da eseguire, tipo ucwords su tutte le stringhe ecc. - Alcune formattazioni sono comuni a tutti i controller (Quindi per evitare di ripeterle le colloco nell'AppController) - Alcune formattazioni sono proprie del controller corrente (ad es formattare la durate dei CD o il bitrate dei brani). Per ottenere ciò ho inserito del codice nella funzione beforeSave() di ogni controller. Il problema é che la funzione beforeSave() del controller CD mi sovrascrive la beforeSave() del controller applicazione, ignorando di fatto le formattazioni comuni. Mi servirebbe quindi sapere una maniera furba per far eseguire prima il codice nella funzione sovrascritta e poi quello della funzione sovrascrivente (o viceversa) spero di essere stato chiaro PS: io di carlini ne ho 2 :P PPS: grazie della disponibilità |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
prova con
Codice:
class carlino extends cane
{
function bau()
{
return parent::bau()."arfarf";
}
}
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:27.











ho concluso con: kvegeta, doctordb, Leland Gaunt.








