PDA

View Full Version : [PHP][OOP][Classi] Delucidazione sull'overriding delle funzioni


ToO_SeXy
04-12-2008, 10:01
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 :\

ndakota
04-12-2008, 12:55
sicuramente non ho capito cosa intendi perchè con una prova del genere funziona ma mi sembra strano..


<?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 />";
?>


p.s. io ho un carlino e non fa "arfarf". Sembra più un "vufvuf"..

ToO_SeXy
04-12-2008, 13:37
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à

vizzz
04-12-2008, 13:46
prova con


class carlino extends cane
{
function bau()
{
return parent::bau()."arfarf";
}
}