Het wordt me de laatste tijd steeds duidelijker dat php in veel opzichten tekort schiet. Nu heb ik zo'n 1,5 jaar ervaring met het programmeren in PHP. Ik heb kleine tot middelgrote projecten in php gedaan. Voor de kleine projecten is php redelijk bevallen, maar al heel snel loop je tegen de beperkingen van de taal op. De volgende beperkingen zijn hiervan voor mij de meest belangrijke:
OOP
"PHP is OO!" heb ik ooit eens gelezen in een artikel op internet. Nou, mooi niet dus
.
In PHP zijn standaard nagenoeg geen classes beschikbaar. Zo is er bijvoorbeeld zelfs geen datum/calender class beschikbaar. Als je OO wilt programmeren in PHP, dan zul je dus zelf voor deze classes moeten zorgen. Of hier al projecten voor zijn weet ik niet.
Private variabelen ondersteunt php ook niet. Zo is het dus niet mogelijk om "encapsulation" toe te passen in PHP. Wat volgens mij elke taal die OO wilt zijn, minimaal moet ondersteunen.
Een ander nadeel is het parameter meganisme. In PHP wordt een referentie naar een variabele meegegeven als parameter. Wanneer de variabele gewijzigd wordt, wordt de variabele gekopieerd en wijst de parameter naar het kopie. Het is wel mogelijk om aan te geven dat een parameter altijd een referentie moet zijn. Dit kun je doen door een & voor de parameter te zetten. Ook is het niet mogelijk om netjes aan te geven van welk type een parameter moet zijn. Je kunt wel een paar checks bovenin de methode zetten, maar dat is niet erg netjes
Een soortegelijk verhaal heb je bij het returnen van variabelen in methode Standaard wordt de waarde van een variabele zelf teruggegeven. Door voor de methodenaam een & te zetten, kun je aangeven dat een referentie teruggegeven moet worden. Een ander probleem bij het returnen van variabelen in methode is dat je niet kunt aangeven welk type variabele terug gegeven moet worden.
Maar wat misschien nog wel het meest irritant is aan PHP, dat is dat variabelen niet gedeclareerd hoeven te worden. Als je een typefout maakt en probeert een niet bestaande instance variabele een waarde te geven, zie je geen enkele foutmelding of warning. En als je dan in een groot project bezig bent en de applicatie doet niet wat je wilt, probeer dan de fout maar eens te vinden
Bibliotheek
In PHP heeft de programmeur de beschikking over een groot aantal functies. Het idee is goed, maar de uitvoering is stukken minder. PHP kent functies met dezelfde naam (aliases). Door aliases wordt de taal er niet veel overzichtelijker op. Ook op de naamgeving van de functies is genoeg aan te merken. Zoals b.v. de functie "count()", wat telt dat ding nu? Telt die functie nu ook het aantal characters in een string (character array)?
Runnen van scripts
In php wordt bij het runnen van een script het script door de interpreter gehaald en stopt het script na de uitvoer. Wat veel logischer zou zijn, is dat er een applicatie draait (als uitbreiding op de webserver) die voor dynamische content zorgt. Nu kan informatie bewaard worden in de sessie, filesystem, cookies of database. Het nadeel van als deze manieren is dat bij geen enkele manier het openhouden van een resource mogelijk is.
Het openhouden van een connectie met een database is wel mogelijk met persistent connections. Maar als je dan per gebruiker een connectie wilt hebben is dat niet mogelijk.
Dit is mijn mening over PHP. Graag zou ik van jullie willen weten wat jullie hiervan vinden. Of jullie voor mijn problemen oplossingen weten en of jullie zelf ook problemen in de taal tegenkomen.
OOP
"PHP is OO!" heb ik ooit eens gelezen in een artikel op internet. Nou, mooi niet dus
In PHP zijn standaard nagenoeg geen classes beschikbaar. Zo is er bijvoorbeeld zelfs geen datum/calender class beschikbaar. Als je OO wilt programmeren in PHP, dan zul je dus zelf voor deze classes moeten zorgen. Of hier al projecten voor zijn weet ik niet.
Private variabelen ondersteunt php ook niet. Zo is het dus niet mogelijk om "encapsulation" toe te passen in PHP. Wat volgens mij elke taal die OO wilt zijn, minimaal moet ondersteunen.
Een ander nadeel is het parameter meganisme. In PHP wordt een referentie naar een variabele meegegeven als parameter. Wanneer de variabele gewijzigd wordt, wordt de variabele gekopieerd en wijst de parameter naar het kopie. Het is wel mogelijk om aan te geven dat een parameter altijd een referentie moet zijn. Dit kun je doen door een & voor de parameter te zetten. Ook is het niet mogelijk om netjes aan te geven van welk type een parameter moet zijn. Je kunt wel een paar checks bovenin de methode zetten, maar dat is niet erg netjes
Een soortegelijk verhaal heb je bij het returnen van variabelen in methode Standaard wordt de waarde van een variabele zelf teruggegeven. Door voor de methodenaam een & te zetten, kun je aangeven dat een referentie teruggegeven moet worden. Een ander probleem bij het returnen van variabelen in methode is dat je niet kunt aangeven welk type variabele terug gegeven moet worden.
Maar wat misschien nog wel het meest irritant is aan PHP, dat is dat variabelen niet gedeclareerd hoeven te worden. Als je een typefout maakt en probeert een niet bestaande instance variabele een waarde te geven, zie je geen enkele foutmelding of warning. En als je dan in een groot project bezig bent en de applicatie doet niet wat je wilt, probeer dan de fout maar eens te vinden
Bibliotheek
In PHP heeft de programmeur de beschikking over een groot aantal functies. Het idee is goed, maar de uitvoering is stukken minder. PHP kent functies met dezelfde naam (aliases). Door aliases wordt de taal er niet veel overzichtelijker op. Ook op de naamgeving van de functies is genoeg aan te merken. Zoals b.v. de functie "count()", wat telt dat ding nu? Telt die functie nu ook het aantal characters in een string (character array)?
Runnen van scripts
In php wordt bij het runnen van een script het script door de interpreter gehaald en stopt het script na de uitvoer. Wat veel logischer zou zijn, is dat er een applicatie draait (als uitbreiding op de webserver) die voor dynamische content zorgt. Nu kan informatie bewaard worden in de sessie, filesystem, cookies of database. Het nadeel van als deze manieren is dat bij geen enkele manier het openhouden van een resource mogelijk is.
Het openhouden van een connectie met een database is wel mogelijk met persistent connections. Maar als je dan per gebruiker een connectie wilt hebben is dat niet mogelijk.
Dit is mijn mening over PHP. Graag zou ik van jullie willen weten wat jullie hiervan vinden. Of jullie voor mijn problemen oplossingen weten en of jullie zelf ook problemen in de taal tegenkomen.