Harrie's blog
Friday, October 27. 2006PHP en object-georienteerd programmerenTrackbacks
Tips voor functionele decompositie in PHP
Zoals mijn collega en teamgenoot Harrie meldde in zijn blog post is PHP meer dan een simpel script taaltje. Vooral met de komst van PHP5 is het goed mogelijk om met PHP een compleet object-geori�nteerde (web)applicatie te maken. Maar toch wel het mooi
Weblog: Ibuildings Blog
Tracked: Feb 07, 14:03 Comments
Display comments as
(Linear | Threaded)
Met alle respect, het feit dat je uit de voeten kan voor wat je nodig hebt, en dan nog op een pseudo OO manier, betekent bij lang niet dat PHP4 een prima (script)taal is om OO te programmeren.
Ik zal zeker je (ex)leraar niet goed willen praten, want ik heb ook niet zijn toespraak geluisterd, maar geef tenminste toe dat PHP4 niet de juiste tool is voor het OO programmeren. Je geeft een voorbeeld voor een workaround voor abstracte classes, maar dat is bij lang ook niet een geschikte oplossing. Het gaat om een workaround. In PHP4 mis je, zoals je goed aangeeft, ook interfaces en ik neem aan dat je ooit de principe gehoord hebt "program to an interface, not an implementation", een van de, naar mijn meningen, grotere waarheden over goed OO programmeren. Daarnaast mis je de scope kunnen aangeven aan je properties (public, private, protected) en bijvoorbeeld ook ondersteuning voor namespaces (die niet eens in PHP5 geïmplementeerd is) om nog wat te noemen. Al met al, ik ben met je eens dat voor gewone web applicaties best uit de voeten kan met PHP4, en dat het programmeren met PHP4 helemaal niet hoeft te betekenen dat de resultaat slordig is, maar strict gesproken, PHP4 is ver van een geschikte OO programmeer omgeving te zijn. PHP5 komt dichter bij, maar daar blijft het ook.
Ik zie deze reactie eigenlijk wel vaker van mensen die eigenlijk alleen maar met een OO omgeving als Java of C# werken. Naar mijn idee gaat die reactie gewoonweg te ver. Het is soms alsof het OO programmeren een doel op zich is, terwijl OO programmeren een hulpmiddel is om degelijke goed beheerbare applicaties te bouwen waarbij dankzij een goede structuur erg veel code kan worden hergebruikt. Nu...laat dat nu in PHP5 echt waanzinnig goed gaan !
In heel veel gevallen van webprojecten ben ik echt in PHP5 een stuk minder development tijd kwijt dan ik eerder in Java kwijt was. Op dit moment werk ik ook zo nu en dan met .NET, maar ook dat levert me geen snellere ontwikkeltijden en betere applicaties op dan PHP5, ondanks dat dat wel volledig OO is. Niet dat PHP5 daarom perse weer beter zou zijn dan die talen, maar ook zeker niet slechter. Wat de schrijver in het artikel naar mijn idee probeert te verwoorden is juist dat PHP (in zijn geval nog PHP4) misschien volgens de specificaties geen OO taal is, maar dat het daarom nog steeds niet minder effectief is. Just my 2cts...
Daar ben ik natuurlijk helemaal met je eens. Als het gaat om je doelen te bereiken op web gebied, is PHP4 zelfs al een uitstekend tool. Sterker nog, je kunt alles even goed realiseren door een library van functies te gebruiken waar geen object aan de pas komt.
Echter ging mij om de beweringen zoals: "door mensen die beweren dat PHP geen OO-programmeertaal is" Dit mag naar mijn mening niet gezegd worden van PHP want PHP is niet object georiënteerd. Objecten in PHP4 zijn in feit, zoals vaak wordt gezegd, niet meer en niet minder dan "glorified" arrays.
Wat deze docent niet heeft begrepen, is dat ook als zou het om een niet oject georienteerde taal gaan, je toch deze logica zoveel mogelijk toepast. Dit kan zelfs in bijvoorbeeld clientside javascript al. Ik heb bijzonder handige en goeie object georienteerde PHP scripts gezien, maar ook scripts waar totaal onzinnig classes worden gemaakt.
Mm, ik ben natuurlijk geen expert qua PHP dus mischien zit ik helemaal mis.
Toen ik kennis maakte met PHP stond v 5 zo op het punt om uit te komen. Ik heb toen een tijdje met PHP 4 geprobeerd OO te programmeren, maar dat was behoorlijk pijnlijk. Als ik het me goed herinner, kreeg bij het meegeven van een object als een functie parameter een kloon van je object - wijzigingen die je in de functie toepaste, vonden alleen plaats op de locale kloon. (Tenzij je natuurlijk een expliciete by reference parameter had) Ik ben heel wat uurtjes toen kwijt geraakt aan debuggen, omdat dit kloon probleem me hier en daar in de staart bleef bijten. Toen ben ik er maar mee opgehouden, en wezen wachten op PHP 5. PHP5 vind ik overigens prima - de OO daar is compleet genoeg voor mij, en ik kan daar prima mee overweg.
Hoi Roland,
misschien is het dan een kwestie van smaak, maar dat je bewust moet aangeven dat een bepaalde parameter call-by-reference is vind ik nou niet echt een probleem. Denk maar aan talen als C++ waarbij je ook hele dagen bezig bent met pointers enzo. en waarbij dat als de normaalste zaak van de wereld wordt gezien. In PHP5 wordt een object inderdaad altijd by-reference meegegeven, wat weer problemen geeft in dat ene geval dat je juist een kopie van het object wilt hebben voor wat voor reden dan ook. Maar goed, het call-by-reference en call-by-value verhaal vind ik eerlijk gezegt niet heel erg belangrijk in de OO-discussie, van een &-teken hier en daar typen is nog nooit iemand moe geworden
Hi Harrie,
"van een &-teken hier en daar typen is nog nooit iemand moe geworden" Daar heb je gelijk in natuurlijk. Wat denk ik meespeelde is dat het mij toendertijd ook niet goed duidelijk was waar ik de & precies moest plaatsen. Als ik het wel heb, moest het vroeger zowel bij aanroep als bij de definitie, dus: func myFunc(&myObject){ ...etc... } en myFunc(&myObject); En later is dat makkelijker geworden en hoefde je het alleen bij de definitie te doen. En ander iets dat ik toen verwarrend vond is wat je nu precies moest doen als je een object wilde retourneren, d.w.z ik kon me nooit herinneren of het nu zo: func myFunc(){ return &myObj; } of zo: $myObj = &myFunc(); moest zijn. Daarmee wil ik overigens niet suggeren dat er met PHP4 iets mis was of is; als PHP beginner had ik alleen moeite om me deze zaken te herinneren. Ik weet het niet zeker, maar ik kan me goed voorstellen dat de expliciete call by reference de drempel vergroot heeft voor diegenen die gewend zijn aan java, C++, javascript...etc. (Eigenlijk ken ik geen talen die objecten impliciet kloneren als je ze als parameter meegeeft.) "In PHP5 wordt een object inderdaad altijd by-reference meegegeven, wat weer problemen geeft in dat ene geval dat je juist een kopie van het object wilt hebben voor wat voor reden dan ook." Nou ja, het "probleem" is dan dat je eerst expliciet moet cloneren - iets wat mischien van dezelfde orde is als het plaatsen van het by-reference teken. Wel is deze aanpak iets dat beter aansluit op hoe je het -bij mijn weten- in de meeste andere OO talen zou aanpakken. |
Blog












