| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
taipan
Data înscrierii: 24/Sep/2004
Mesaje: 44
|
| Trimis: Mar Oct 12, 2004 3:01 pm Titlul subiectului: Curata Vrajeala PHP 5 |
|
|
S-au batut atatea clopote legate de PHP dar in opinia mea partea legata de OOP e vrajeala.
Adica dupa atata timp nici macar nu pot sa fac overloading pe metode ce naiba asta e bataie de joc. Adica in loc sa am si eu ca omul 6 constructori ca asa imi este mie super bine trebuie sa fac o gramada de artificii care consuma timp si resurse. :x |
|
| Sus |
|
adrianpopa
Data înscrierii: 05/Iul/2004
Mesaje: 4
|
| Trimis: Mar Oct 12, 2004 4:10 pm Titlul subiectului: |
|
|
@taipan
Racoreste-te ma baiete, nu te obliga numeni sa-l folosesti. Nu-ti bate nimeni joc de tine. Poate doar aia de la care iti vand un soft pe bani grei si ai probleme cu el dupa. Nu ti se pare ca exagerezi? Asta consideri tu topic de pus in forumul <<PHP Avansat>>? |
|
| Sus |
|
stealth
Data înscrierii: 21/Iun/2004
Mesaje: 304
Locație: Timisoara
|
| Trimis: Mie Oct 13, 2004 5:26 am Titlul subiectului: |
|
|
| scrie-le o scrisoare sau ceva fe genul... |
|
| Sus |
|
arond
Data înscrierii: 11/Mar/2004
Mesaje: 580
Locație: 127.0.0.1
|
| Trimis: Mie Oct 13, 2004 8:20 am Titlul subiectului: Re: Curata Vrajeala PHP 5 |
|
|
taipan a scris: ...Adica dupa atata timp nici macar nu pot sa fac overloading pe metode...
Switch to Java (JSP, etc, etc).
PHP fiind un limbaj interpretat SI fiind loose-typed SI acceptand natural un numar variabil de parametri pentru o functie/metoda, cam cum sa decida interpretorul care overload sa-l apeleze ?
La orice te-ai gandit, da loc la ambiguitati mai problematice decat problema pe care o rezolva si/sau denatureaza limbajul in sine (ideea e ca nu vrea sa faca nimeni din PHP C++ interpretat :) ).
Numa' bune. |
|
| Sus |
|
taipan
Data înscrierii: 24/Sep/2004
Mesaje: 44
|
| Trimis: Mie Oct 13, 2004 12:57 pm Titlul subiectului: |
|
|
Deci e simplu sa vezi care metode sa o apelezi, acum eu folosesc un surogat care sa zicem emuleaza putzin acel oveloarding-ul numai ca e un mare crap:
an style="color: #000000"><?php function ConstructorClasa() {
$intParameters = func_num_args();
switch($intParameters) {
case :
FunctieUnu();
break;
//In continuare la fel :)
}
}
Si e normal sa-l pun la PHP avansat deoarece si PHP-ul intr-un final va ajunge mai mult sau mai putzin OO :D |
|
| Sus |
|
taipan
Data înscrierii: 24/Sep/2004
Mesaje: 44
|
| Trimis: Mie Oct 13, 2004 1:02 pm Titlul subiectului: |
|
|
Citat: La orice te-ai gandit, da loc la ambiguitati mai problematice decat problema pe care o rezolva
Nu cred ca da asa ambiguitati, mai ales ca de fapt poate sa numere doar argumentele functiei si pe nea php nu-l interseaza ca in java tipul deparametrii primiti.
java:
function FunctieUnu(int param1) {
}
function FunctieUnu(int param1, int param2) {
}
Adica ii dureau si pe ei sa numere macar parmetrii ramanand la latitudinea noastra sa nu definin doua functii cu acelasi numar de parametrii? |
|
| Sus |
|
arond
Data înscrierii: 11/Mar/2004
Mesaje: 580
Locație: 127.0.0.1
|
| Trimis: Mie Oct 13, 2004 8:56 pm Titlul subiectului: |
|
|
Asta ar fi rupt in doua mult din codul PHP existent (sau ar fi creat ambiguitati... ehh.. imi place cuvantul).
Ambiguitatile apar datorita faptului ca functiile PHP accepta un numar variabil de parameteri.
Asta inseamna ca (din punct de vedere conceptual):
an style="color: #000000"><?php function FunctieUnu($param1) {
}
function FunctieUnu($param1, $param2) {
}
...
/*
AMIBGUITATE pentru ca si definitia:
FunctieUnu($param1)este un match pentru apelul de mai jos
avand in vedere ca accepta un numar variabil de parametri
*/
FunctieUnu(1, 3);
In alta ordine de idei, overloading-ul de functii nu este o caracteristica STRICT a programarii orientate obiect.
Vezi [url=http://www.google.ro/search?hl=ro&lr=&oi=defmore&q=define:Object+Oriented+Programming+(OOP)] definitie[/url]... deci, la modul strict, nemultumirea ta nu are obiect avand in vedere ca PHP poate fi OO fara a permite function overloading :).
Numa' bune. |
|
| Sus |
|
taipan
Data înscrierii: 24/Sep/2004
Mesaje: 44
|
| Trimis: Mie Oct 13, 2004 11:41 pm Titlul subiectului: |
|
|
Citat: Basic support needed consists of a class mechanism with inheritance and a mechanism that allows calls of member functions to depend on the actual type of an object
Damn someone can explain me this :D |
|
| Sus |
|
arond
Data înscrierii: 11/Mar/2004
Mesaje: 580
Locație: 127.0.0.1
|
| Trimis: Joi Oct 14, 2004 2:06 am Titlul subiectului: |
|
|
Exemplu (se presupune ca stii C++, aici e mai evident):
Cod: class A
{
public:
virtual int function(int x);
}
class B: public A
{
public:
virtual int function(int x);
}
B* pB = new B();
...
A* pA;
pA = pB;
/* aici se va apela B::function(), desi pA are tipul "pointer catre A */
pA->function(1);
Asta se numeste "polimorfism": codul generat de compilator stie sa apeleze functia corecta, bazata nu pe tipul declarat al pointerului ci pe tipul cu care a fost creat.
In PHP asta e in firea lucrurilor, limbajul nefiind "strong-typed" (si tocmai de asta polimorfismul e mai putin evident, sau apare atat de natural incat probabil ca te intrebi ce tot balbai eu aici).
Numa' bune. |
|
| Sus |
|
taipan
Data înscrierii: 24/Sep/2004
Mesaje: 44
|
| Trimis: Joi Oct 14, 2004 2:49 pm Titlul subiectului: |
|
|
Nu ne intelegem deloc, eu spun ceva si tu ajungi pe alte plaiuri.
Overloadingul (supraincarcare) unei functii inseamna din cate imi aduce eu aminte posibilitatea de a scrie functii care au acelasi nume dar care au numar de parametrii diferiti, polimorfismul tine de tipul parametrilor sau polimorfism e si la mostenire...aceeasi semnatura de metoda poate sa exista si in clasa de baza si in cea derivata
Vei intelege asta cel mai bine daca ai lucrat cu clase abstracte sau structuri de clase mai complexe.
Have a nice day :P |
|
| Sus |
|
arond
Data înscrierii: 11/Mar/2004
Mesaje: 580
Locație: 127.0.0.1
|
| Trimis: Joi Oct 14, 2004 4:41 pm Titlul subiectului: |
|
|
taipan a scris: Overloadingul (supraincarcare) unei functii inseamna din cate imi aduce eu aminte posibilitatea de a scrie functii care au acelasi nume dar care au numar de parametrii diferiti, polimorfismul tine de tipul parametrilor sau polimorfism e si la mostenire...aceeasi semnatura de metoda poate sa exista si in clasa de baza si in cea derivata
Vei intelege asta cel mai bine daca ai lucrat cu clase abstracte sau structuri de clase mai complexe.
1. Point taken... sunt de acord, overloading-ul functiilor e o forma de polimorfism (dar nu singura).
2. Unul din fundamentele PHP sta in faptul ca o variabila este convertita transparent la ce tip e nevoie in expresia in care e folosita. Asta inseamna ca overloading-ul functiilor pe baza tipului variabilei NU se poate face (de altfel, in declaratiile de functii PHP nu specifici tipul parametrilor... sau da ? :D).
3. Alt element fundamental in PHP este ca o functie, indiferent de cum e declarata, accepta un numar variabil de parametri. Ceea ce inseamna ca NU se poate face overloading de functii pe baza numarului de parametri ai functiei.
4. Si da, am lucrat si cu clase abstracte (desi nu vad ce relevanta au, in contextul dat... dar suna bine, oricum :)) si cu structuri de date complexe :).
Si aici ajungem iar la argumentele initiale: pentru a putea face function overloading in PHP ar trebui introduse elemente noi de sintaxa.
Si in plus, daca tot faci overloading de functii, de ce sa nu faci si overloading de operatori ?
Si daca tot faci overloading de functii si de operatori, apare ca naturala nevoia de class/function template-uri, nu ?
Si uite asa, din aproape in aproape, PHP devine C++ interpretat :).
Numa' bune. |
|
| Sus |
|
taipan
Data înscrierii: 24/Sep/2004
Mesaje: 44
|
| Trimis: Vin Oct 15, 2004 11:17 am Titlul subiectului: |
|
|
Daca citesti mai sus toate reply-urile mele
Citat: Nu cred ca da asa ambiguitati, mai ales ca de fapt poate sa numere doar argumentele functiei si pe nea php nu-l interseaza ca in java tipul deparametrii primiti.
.
Vei remarca ca eu am precizat tipul de overloading (ca sa spun asa) deci tinusem cont de cum lucreaza PHP-ul cu parametrii.
In felul acesta ti-ai fi salvat putzin timp din viatza in loc sa dai acel post useless. :evil: |
|
| Sus |
|
arond
Data înscrierii: 11/Mar/2004
Mesaje: 580
Locație: 127.0.0.1
|
| Trimis: Vin Oct 15, 2004 2:29 pm Titlul subiectului: |
|
|
Dam drumu' la flame ?
Ti-am spus de vreo 3 ori ca nu ai cum sa faci function overloading in PHP dupa numarul parametrilor si am si argumentat. Dar iti mai spun o data, ca azi ma simt generos :): nu se poate face pastrand modelul de executie curent.
Citeste aceleasi argumente aici: http://www.zend.com/expert_qa/qas.php?id=10&single=1
Da' incearca varianta cu grenada, poate-ti iese :).
In loc sa consideri post-urile altora ca a fi far' de folos, mai pune mana pe carte si mai studiaza (si mai zi... cum e cu clasele abstracte si function overloading-ul ? :) ).
Numa' bune. |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |