Citat:
Originalno napisao japan
Jedno pet puta već čitam pokušavajući da shvatim tvoj argument, ali mi ne uspeva. Daj, molim te, objasni mi šta hoćeš da kažeš...
|
Hoću da mi neko objasni čemu služe apstraktne klase u dinamičkom jeziku kao što je PHP.
Primer:
Ti u PHP-u možeš da uradiš sledeće:
Kôd:
class Duck{
function quack(){ echo "Quack\n";}
function fly(){ echo "Flap, Flap\n";}
}
class Person{
function __construct($name){$this->name=$name;}
function quack(){echo "{$this->name} walks in the forest and imitates ducks to draw them\n";}
function fly(){ echo "{$this->name} takes an airplane\n";}
}
function QuackAndFly($obj){$obj->quack(); $obj->fly();}
QuackAndFly(new Duck());
QuackAndFly(new Person("Jules Verne"));
Tj. ne postoji kompajler koji će da kaže koju klasu funkcija QuackAndFly mora da primi kao argument (isto važi i za npr. dodelu promenljivih, jedna ista promenljiva u jednom trenutku može držati instancu Duck, a u drugom instancu klase Person itd). Samim tim ne postoji obaveza programera da pravi klase u kojima kaže "e sad ovde će biti jedna metoda, ali neću sad da je implementiram, već će to morati da urade potklase", da bi zadovoljio kompajler, kao što postoji u statičkim jezicima tipa Jave. U Javi bi za gornji primer morao da napraviš parent apstraktnu klasu QuackableFlyableItem, koju bi onda Duck i Person nasleđivale, pa onda da kažeš da funkcija QuackAndFly prima argument tipa QuackableFlyableItem itd itd.
Dakle, interesuje me zašto je u PHP dodat feature koji je u statičkim jezicima tu samo kao nužno zlo, upravo zato što su statički?
Nadam se da sam jasniji.