dechim scrie:@mihaitha rogu-te (poate nu-i chiar offtopic) detaliaza un pic
"Strong Type Hinting, God-like power pentru programator ". Cu referire la framework. Ms
$a = new S ('asta_e_un_string');
$a->replaceToken ('e', 'a_fost_si_va_ramane');
$a == S ('asta_a_fost_si_va_ramane_un_string');
Pe scurt:
- in loc de tipurile de date normale, fw-ul accepta tipurile de date: O, B, I, F, S, R (object = can contain all, boolean, integer, float, string, resource) si inca cateva tipuri de date complexe, asupra carora actioneaza.
- ce se elimina: verificari peste verificari de variabile (method entry contracts) si bug-uri de inter-method communication. ($b->metoda ($a->altaMetoda)) ... insa $b->metoda se asigura ca $a->altaMetoda ii returneaza tipul de data CORECT, altfel apare mesaj de eroare si identificam bug-ul: DIN FAZA DE PROGRAMARE, ba chiar design as putea spune ... lucru care:
- adauga: enooooooorm de multa stabilitate cu performance loss neglijabila. (e 5/10x mai incet, dar faptul ca nu se face nici o copiere de valoare, totul fiind pasat prin referinta, exceptie cand s-ar clona obiectul si tehnicile de cache elibereaza serverul de stres, ducand aplicatia aproape de performanta codului nativ)
De ce o abordare de genul: programatorul se concentreaza asupra a ceea ce face metoda nu asupra faptului ca tre sa verifice ca un parametru sa fie de "tipul de data cutare" ... Intr-o aplicatie scalabila aceste verificari vin ca o nevoie naturala, la care noi raspundem deja, iar bugurile din acest domeniu se auto-raporteaza.
Luam caz:
$c->metoda1($b->metoda2 ($a->metoda3 ($param)));
metoda3, trebuia sa retunreze un integer catre metoda2 din b, insa s-a schimbat ceva intre timp si in loc sa returneze un string castable, codul e facut de asa natura incat returneaza un string, care casted da mereu 0, ceea ce face ca $c->metoda1 sa nu se executa normal, sau sa se execute, dar ciudat ...
Cat timp ar lua sa gasim un astfel de bug? Enorm. Cui i-ar fi trecut prin cap ca undeva $a->metoda3, nu mai intoarce ce trebuie.
Ce se intampla in cazul nostru: in momentul in care programatorul a schimbat return-ul in altceva decat ce asteapta $b->metoda2, BIG GREEN SCREEN OF DEATH la imediatul refresh. Asta ajuta la identificarea bug-ului cu 0 brain-power, lucru care e o efectiva placere sa ai un cod care stie sa se diagnosticheze singur.
Hope I was enlightening ... Cautati SPL_Int, SPL_Bool, un modul PECL dezvoltat de Marcus Boerger @ co-auther of PHP, si veti intelege de ce s-a mers pe acest tip de abordare. (think of the possibilities)