vi sottopongo un problema che ho, vorrei ricavarne una classe ereditabile utilizzabile come design pattern. Leggetevi questo codice:

Se dobbiamo utilizzare ripetutamente la classe Pippo e i relativi metodi, siamo costretti a fare così, occupando un casino di linee di codice ripetitivo

Codice PHP:
<?php

class Pippo
{
     function 
_1(){echo "1";}
     function 
_2(){echo "2";}
     function 
_3(){echo "3";}
}

class 
Topolino{function add(){foreach(func_get_args() as $oget_class($o);}}

$x=0;
$pippo[$x] = new Pippo();
$pippo[$x]->_1();
$pippo[$x]->_2();
$pippo[$x]->_3();
$x++;
$pippo[$x] = new Pippo();
$pippo[$x]->_1();
$pippo[$x]->_2();
$pippo[$x]->_3();
$x++;
$pippo[$x] = new Pippo();
$pippo[$x]->_1();
$pippo[$x]->_2();
$pippo[$x]->_3();

$altro = new Topolino();
$altro->add($pippo[0],$pippo[1],$pippo[2]);

?>
la prima soluzione, senza particolari sbattimenti, è questa:

Codice PHP:
<?php

class Pippo2
{
     function 
_1(){echo "1";return $this;}
     function 
_2(){echo "2";return $this;}
     function 
_3(){echo "3";return $this;}
}

class 
Topolino2{function add(){foreach(func_get_args() as $ogettype($o) . "
"
;}}

for(
$x=0;$x<3;$x++)
    
$pippo2[$x] = new Pippo2();
$altro = new Topolino2();
$altro->add($pippo2[0]->_1()->_2()->_3(), $pippo2[1]->_1()->_2()->_3(),$pippo2[2]->_1()->_2()->_3());

?>
quante righe di codice abbiamo risparmiato?
con return $this; abbiamo la possibilità di lavorare sulla stessa riga, chiamando metodo su metodo.

Cosa voglio ottenere? costruttore e metodi sulla stessa linea:

$top = new Topolino()->add();

Codice che chiaramente in php non va... adesso non so se questa sintassi funzioni in java c c#, ma ad occhio dovrebbe funzionare, in quanto il costruttore dovrebbe ritornare proprio l'oggetto (return $this)

un bel design pattern potrebbe essere questo:

$topolinoObject = Topolino::newInstance()->add(Pippo::newInstance()->_1()->_2()->_3(),
Pippo::newInstance()->_1()->_2()->_3(),
Pippo::newInstance()->_1()->_2()->_3());
ma sarà realizzabile?

a voi, phpespertoni