Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
Noujah dat zeggen sommige mensen ook over Mac, of over Linux op de desktop, toch gebruiken veel mensen het dus they must be doing something right.
Verwijderd
De documentatie van PHP is IMHO vrij slecht, veel nieuwe features staan er niet in of gewoon erg slecht.
De voorbeelden zitten vol met bad practices. Sinds ze over zijn gegaan naar die nieuwe structuur zijn veel dingen compleet onvindbaar totdat je weet waar je moet zoeken.
Er is geen overall structuur, het is meer een naslagwerk, als je niet precies weet wat je zoekt vind je nooit iets terug.
Een van de ergste punten is nog wel dat de documentatie alleen geldig is voor de nieuwe release versie van PHP (met uitzonderingen voor vaak lege pagina's van de nightly build) maar dit is nergens echt aangegeven.
Wijzigingen in de werking kunnen dus erg verwarrend zijn omdat jouw PHP wellicht niet doet wat de handleiding zegt dat ie moet doen.
Echter maakt succesvol het niet meteen goed. En dat het niet goed is leidt ook tot het volgende punt:Verwijderd schreef op maandag 25 augustus 2008 @ 01:04:
.oisyn zegt dat PHP ook slecht is, ik zeg dus dat sommige mensen dat ook over andere dingen zeggen maar het uiteindelijk toch succesvol is.
Over heel veel dingen in PHP wordt niet nagedacht. Veel neven-effecten van veel functies laten zich leiden door hoe de code geschreven is, ipv dat die neven-effecten van tevoren goed worden uitgedacht / gedocumenteerd en dat men de code daar dus ook op ontwerpt. Het gevolg hiervan is dat een wijziging in de implementatie van een functie ineens gevolgen gaat hebben voor de inmiddels gedocumenteerde bijwerkingen.Wijzigingen in de werking kunnen dus erg verwarrend zijn omdat jouw PHP wellicht niet doet wat de handleiding zegt dat ie moet doen
Een goed voorbeeld hiervan was geloof ik een bug-report van het feit dat een willekeurige niet-integer string altijd true comparet met int of float 0. De bug werd gewaved met de mededeling dat dat geen bug was omdat PHP de string eerst cast naar een int of float, wat 0 oplevert bij ongeldige strings. Wat ze dus feitelijk zeggen is dat het geen bug is omdat de code nou eenmaal zo is opgeschreven. Maar als je die redenatie aanhoudt dan bestaan er geen bugs meer

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
dat php de RNG seed met de pid en de microtijd is inderdaad niet sterk maar php gebruikt volgensmij de mersenne twister wat toch best een sterk algorithme is en zich immidels wel heeft bewezen. maar inderdaad elke RNG is zo sterk als zijn seed. maar /dev/random op elke hit openen heeft ook duidelijk zijn nadelen en kan je zelf ook makelijk implementeren maar niet echt cross-platform he.
de PHP documentatie kun je inderdaad beter een naslag werk noemen welke toch best compleet is. het is wel een gemis dat je niet per versie kunt filteren want hoeveel webhost draaien de laaste versie van PHP. vele zitten nog in PHP4 terwijl PHP5 een stap in de goede richting is.
PHP heeft zeker zijn zwake kanten maar als je kijk naar de geschieden en hoe PHP onstaan is wordt het een steeds profesionellere programmeer taal. vergelijkbaar met hoe Linux zich heeft ontwikkeld. PHP's grooste probleem is dat ze backward compatible willen zijn en daarom dus ook slechte keuzes uit het verleden vandaag nog steeds moeten dragen. PHP6 zou een echt breekpunt met het verleden moeten zijn. maar ik ga hier niet de PHP vs C/C++/C# vs Java discussie voeren.
de 'bug' die jij noemt is inderdaad geen bug maar een gevolg van dat PHP loose-typed is. veel loose-typed programmeer talen zullen precies het zelfde resultaat geven. je kunt een string niet direct vergelijken met een int of float dus casten is noodzaak. en als de string geen numerieke waarde beschrijft is de enige logische waarde die je er aan kunt geven 0 wat eigenlijk zo iets betekent als 'deze string kan ik niet lezen als een nummer'. en 0 == 0 is inderdaad true. pas wanneer een geldige string zoals '43' niet zou casten naar integer 43 zou er een bug zijn want '43' == 43 is true in loose-typed programmeer talen. dat is nou de eigenschap van een loose-typed programmer taal welke PHP is.
daarom is er ook de === operator welke naast de waarde ook het type vergelijkt en '43' === 43 geeft dan ook false. een andere vraag is waarom iemand '0' == 0 zou willen vergelijken. niet echt zinvol he.
Daar heb je inderdaad een aantal hele sterke punten. Ik geef toe dat het inderdaad meer een naslagwerk is. Het hangt ook wel af van je ervaring met de documentatie (ik blijf het voor het gemak toch zo noemenVerwijderd schreef op maandag 25 augustus 2008 @ 01:04:
.oisyn zegt dat PHP ook slecht is, ik zeg dus dat sommige mensen dat ook over andere dingen zeggen maar het uiteindelijk toch succesvol is.
De documentatie van PHP is IMHO vrij slecht, veel nieuwe features staan er niet in of gewoon erg slecht.
De voorbeelden zitten vol met bad practices. Sinds ze over zijn gegaan naar die nieuwe structuur zijn veel dingen compleet onvindbaar totdat je weet waar je moet zoeken.
Er is geen overall structuur, het is meer een naslagwerk, als je niet precies weet wat je zoekt vind je nooit iets terug.
Een van de ergste punten is nog wel dat de documentatie alleen geldig is voor de nieuwe release versie van PHP (met uitzonderingen voor vaak lege pagina's van de nightly build) maar dit is nergens echt aangegeven.
Wijzigingen in de werking kunnen dus erg verwarrend zijn omdat jouw PHP wellicht niet doet wat de handleiding zegt dat ie moet doen.
@.oiysin:
PHP gaat in die zin wel de goede kant op. Vooral het behouden van backwardscompatibiliteit is het probleem. En tsja, zoals al eerder gezegd is jouw "bug" natuurlijk vrij logisch te verklaren bij een loose-typed taal. Het is gewoonweg geen bug.
En daar doe je nu precies wat .oisyn de PHP ontwikkelaars verwijt. Het gedrag is verklaarbaar (al het gedrag van de computer is verklaarbaar aangezien het een exact logisch apparaat is), maar dat praat de bug nog niet goed. Zolang dit nog steeds de manier is waarop ze daar met bugreports om gaan kun je onmogelijk spreken van een professionele aanpak.Patriot schreef op maandag 25 augustus 2008 @ 08:56:
PHP gaat in die zin wel de goede kant op. Vooral het behouden van backwardscompatibiliteit is het probleem. En tsja, zoals al eerder gezegd is jouw "bug" natuurlijk vrij logisch te verklaren bij een loose-typed taal. Het is gewoonweg geen bug.
* Janoz heeft ff lopen zoeken en kwam inderdaad deze nog tegen : [PHP] Array met foreach() wijzigen .... It's not a bug, it's a feature....
[ Voor 5% gewijzigd door Janoz op 25-08-2008 09:12 ]
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Het is geen bug! Waarom is het überhaupt fout? Omdat het in andere talen anders gaat? Als je een string vergelijkt met 0 en die string bevat tekens anders dan cijfers dan is dat jouw fout, niet wat PHP er vervolgens van tracht te maken.Janoz schreef op maandag 25 augustus 2008 @ 09:11:
[...]
En daar doe je nu precies wat .oisyn de PHP ontwikkelaars verwijt. Het gedrag is verklaarbaar (al het gedrag van de computer is verklaarbaar aangezien het een exact logisch apparaat is), maar dat praat de bug nog niet goed. Zolang dit nog steeds de manier is waarop ze daar met bugreports om gaan kun je onmogelijk spreken van een professionele aanpak.
Ook dit gedrag is te verklaren, hoewel het in deze handiger zou zijn als de reference alleen bestaat in de scope van de foreach.* Janoz heeft ff lopen zoeken en kwam inderdaad deze nog tegen : [PHP] Array met foreach() wijzigen .... It's not a bug, it's a feature....
Dat het gedrag exact te verklaren is is niet meer dan logisch voor software. Dat kun je uiteindelijk namelijk met elke bug (muv hardware falen). Het is een bug omdat 0 == "blaat" nu eenmaal naar false zou moeten evalueren.Patriot schreef op maandag 25 augustus 2008 @ 09:18:
[...]
Het is geen bug! Waarom is het überhaupt fout? Omdat het in andere talen anders gaat? Als je een string vergelijkt met 0 en die string bevat tekens anders dan cijfers dan is dat jouw fout, niet wat PHP er vervolgens van tracht te maken.
Ik raad je aan om de post van .oisyn nog even goed door te lezen.Ook dit gedrag is te verklaren, hoewel het in deze handiger zou zijn als de reference alleen bestaat in de scope van de foreach.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Vaag. Je zou dan toch denken dat de impliciete cast de enige geldige conversie gebruikt, namelijk de integer 0 casten naar de string "0".Verwijderd schreef op maandag 25 augustus 2008 @ 04:48:
de 'bug' die jij noemt is inderdaad geen bug maar een gevolg van dat PHP loose-typed is. veel loose-typed programmeer talen zullen precies het zelfde resultaat geven. je kunt een string niet direct vergelijken met een int of float dus casten is noodzaak. en als de string geen numerieke waarde beschrijft is de enige logische waarde die je er aan kunt geven 0 wat eigenlijk zo iets betekent als 'deze string kan ik niet lezen als een nummer'. en 0 == 0 is inderdaad true. pas wanneer een geldige string zoals '43' niet zou casten naar integer 43 zou er een bug zijn want '43' == 43 is true in loose-typed programmeer talen. dat is nou de eigenschap van een loose-typed programmer taal welke PHP is.
Waarom moet dat naar false evalueren? Dat is toch gewoon het gedrag van een loose-typed taal? Ik snap wel dat het niet hetzelfde is, maar je levert gewoon wat in als de taal loose-typed is. Dat het in strictere talen wel naar false zou evalueren maakt het toch niet een fout van PHP?Janoz schreef op maandag 25 augustus 2008 @ 09:38:
[...]
Dat het gedrag exact te verklaren is is niet meer dan logisch voor software. Dat kun je uiteindelijk namelijk met elke bug (muv hardware falen). Het is een bug omdat 0 == "blaat" nu eenmaal naar false zou moeten evalueren.
EDIT: Wat ik dus eigenlijk wil zeggen: Waarom is het een bug, en waarom is het fout, als het door de ontwikkelaars zo bedoeld is? Ze weten er gerust van, en hadden het allang kunnen veranderen als zij dit zo zouden willen. Dat is niet het geval, dus is het gewoon de manier waarop PHP werkt.
Ok, na het lezen van een reactie door iemand van PHP op de bugreport in deze kwestie, besef ik dat het wellicht gevaarlijker kan zijn dan ik dacht. En daarom zeg ik ook, het zou niet gek zijn als de ref automatisch verdwijnt na het eindigen van de loop.[...]
Ik raad je aan om de post van .oisyn nog even goed door te lezen.
[ Voor 13% gewijzigd door Patriot op 25-08-2008 10:09 ]
Als je graag 'blaat' == 0 naar false wilt laten evalueren dan heb je simpelweg de verkeerde operator te pakken, en moet je === nemen
Wel kan je natuurlijk stellen dat het een onhandige keuze is geweest om een operator == in PHP een andere betekenis te geven dan in vrijwel elke andere taal.
1
2
3
4
5
6
7
8
9
10
11
12
| <?php if ("test" == 0) { echo "test = 0\n"; } if (0 == "test") { echo "0 = test\n"; } ?> |
Geeft:
test = 0
0 = test
Als het de integer had gecast naar een string omdat de string rechts in de vergelijking staat dan was de test "0" == "test" geweest wat false had opgeleverd.
[ Voor 6% gewijzigd door Creepy op 25-08-2008 10:18 ]
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Dit voorbeeld wordt er maar wat vaak bijgetrokken, maar als je weet wat je aan het doen bent en je code uberhaupt ergens opslaat, zal je nooit integers met een willekeurige string vergelijken. Maar goed, PHP bashen is leuk, zelfs al moet je (in dit geval) gekunstelde voorbeelden gebruiken.
{signature}
Maakt voor de redenatie niet zoveel uit; er moet een oplossing gekozen worden voor het vergelijken van variabelen van een verschillend type, en welke keuze je ook maakt, het is geen bug.
Beter nog, hoe PHP omgaat met het omzetten ("type juggling") van variabelen voor operators is gedefinieerd: http://nl2.php.net/language.types.type-jugglingVoutloos schreef op maandag 25 augustus 2008 @ 10:55:
Pfff, hoe de == operator werkt is gewoon gedefinieerd. Het is enkel de definitie die jullie niet aanstaat.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
QFT.Voutloos schreef op maandag 25 augustus 2008 @ 10:55:
Pfff, hoe de == operator werkt is gewoon gedefinieerd. Het is enkel de definitie die jullie niet aanstaat.
Dit voorbeeld wordt er maar wat vaak bijgetrokken, maar als je weet wat je aan het doen bent en je code uberhaupt ergens opslaat, zal je nooit integers met een willekeurige string vergelijken. Maar goed, PHP bashen is leuk, zelfs al moet je (in dit geval) gekunstelde voorbeelden gebruiken.
Het lijkt tegenwoordig steeds leuker te worden om PHP te bashen. Vaak gebeurt dit om dingen die anders gedaan worden dan bij de hogere programmeertalen.
Mja, dat heeft in principe niet zoveel te maken met de operator, meer met het feit dat de taal loose-typed is. Maar ik snap wat je bedoelt, en dit kan inderdaad lastig zijn voor iemand die eerder werkte met andere programmeertalen om zich vervolgens in PHP te verdiepen.Wel kan je natuurlijk stellen dat het een onhandige keuze is geweest om een operator == in PHP een andere betekenis te geven dan in vrijwel elke andere taal.
Nee, het is een gevolg van het feit dat de mensen bij Zend een stel eikels zijnVerwijderd schreef op maandag 25 augustus 2008 @ 04:48:
de 'bug' die jij noemt is inderdaad geen bug maar een gevolg van dat PHP loose-typed is
Onzin. Het gedrag van PHP is niet inherent aan het feit dat het loosely typed is. Dat is bijv. Javascript ook, toch geeft die false als je een int met een string vergelijkt en de string is niet castbaar naar int, terwijl het true geeft als het wel castbaar is én de int-vergelijking geeft true. Natuurlijk moet je casten om de vergelijking te doen. Maar als de cast niet kan impliceert dat dat de twee objecten ongelijk zijn aan elkaar. Wat PHP doet is simpelweg een arbitraire waarde (0) nemen als een string niet castbaar is naar int. De situatie was imho niet anders geweest als ze bijv. 1337 als die arbitraire waarde hadden gekozen. Maar dan is iedereen het er ineens over eens dat het een complete absurditeit is.veel loose-typed programmeer talen zullen precies het zelfde resultaat geven. je kunt een string niet direct vergelijken met een int of float dus casten is noodzaak. en als de string geen numerieke waarde beschrijft is de enige logische waarde die je er aan kunt geven 0 wat eigenlijk zo iets betekent als 'deze string kan ik niet lezen als een nummer'. en 0 == 0 is inderdaad true. pas wanneer een geldige string zoals '43' niet zou casten naar integer 43 zou er een bug zijn want '43' == 43 is true in loose-typed programmeer talen. dat is nou de eigenschap van een loose-typed programmer taal welke PHP is.
Waarom is '0' == 0 niet zinvol maar '1' == 1 wel?daarom is er ook de === operator welke naast de waarde ook het type vergelijkt en '43' === 43 geeft dan ook false. een andere vraag is waarom iemand '0' == 0 zou willen vergelijken. niet echt zinvol he.
Zucht. Anders lees je mijn eerste reactie hierover nog eens door. De definitie staat mij idd niet aan, maar het was slechts een voorbeeld. Waar het om gaat is hoe die definitie tot stand is gekomen, waarom het zo is gedefinieerd. Omdat dat toevallig de bijwerking was van hoe de code is opgeschreven, of omdat ze er goed over hebben nagedacht? Gezien de overall design van PHP zet ik mijn geld in op dat eerste. En dat was nou juist de aanleiding van deze discussie.Voutloos schreef op maandag 25 augustus 2008 @ 10:55:
Pfff, hoe de == operator werkt is gewoon gedefinieerd. Het is enkel de definitie die jullie niet aanstaat.
Allereerst klopt je opmerking over "hogere programmeertalen" niet. PHP is gewoon 3GL, net als C++ en Java e.d. dat zijn. Maar even los daarvan, als wat jij zegt waar zou zijn, waarom wordt er dan zo weinig gebashed op andere talen die anders zijn? Zoals bijv. javascript?Patriot schreef op maandag 25 augustus 2008 @ 11:53:
Het lijkt tegenwoordig steeds leuker te worden om PHP te bashen. Vaak gebeurt dit om dingen die anders gedaan worden dan bij de hogere programmeertalen.
Natuurlijk zijn er veel napraters, maar dat neemt niet weg dat er weldegelijk wat te bashen valt met valide argumenten. Het feit dat dat populair zou zijn doet daar verder niets aan af. "Oh, shit, nu is het populair, nu kan het niet meer"

Niet dus, zie boven.Mja, dat heeft in principe niet zoveel te maken met de operator, meer met het feit dat de taal loose-typed is.
[ Voor 33% gewijzigd door .oisyn op 25-08-2008 13:12 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
PHP is geen lagere GL dan een andere taal (waar jij op doelt); PHP is net zo 3GL als (bijv.) C#. If anything, dan is PHP zelfs een hogere GLPatriot schreef op maandag 25 augustus 2008 @ 11:53:
Het lijkt tegenwoordig steeds leuker te worden om PHP te bashen. Vaak gebeurt dit om dingen die anders gedaan worden dan bij de hogere programmeertalen.

[ Voor 6% gewijzigd door RobIII op 25-08-2008 13:01 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Het is zeker een gevolg van. Als de taal niet loose-typed was, dan hadden we deze discussie niet..oisyn schreef op maandag 25 augustus 2008 @ 12:47:
[...]
Nee, het is een gevolg van het feit dat de mensen bij Zend een stel eikels zijn
Dat is ook niet inherent aan het feit dat het loose typed is, maar het speelt wel mee. Jij zou er voor kiezen om de vergelijking tot false te evalueren (valt zeker wat voor te zeggen), maar daarmee is het mijns inziens zeker niet fout een string die niet begint met cijfers naar 0 te "casten" (want echt casten is het niet, het is meer omzetten).[...]
Onzin. Het gedrag van PHP is niet inherent aan het feit dat het loosely typed is. Dat zijn bijv. Javascript en Python ook, toch geven zij beide false als je een int met een string vergelijkt en de string is niet castbaar naar int, terwijl ze true geven als het wel castbaar is én de int-vergelijking geeft true. Natuurlijk moet je casten om de vergelijking te doen. Maar als de cast niet kan impliceert dat dat de twee objecten ongelijk zijn aan elkaar. Wat PHP doet is simpelweg een arbitraire waarde (0) nemen als een string niet castbaar is naar int. De situatie was imho niet anders geweest als ze bijv. 1337 als die arbitraire waarde hadden gekozen. Maar dan is iedereen het er ineens over eens dat het een complete absurditeit is.
Ik denk dat hij letterlijk de vergelijking "'0' = 0" bedoelt, welke inderdaad niet hardcoded in je script hoeft voor te komen. En dat gaat in feite op voor elke hardcoded vergelijking.[...]
Waarom is '0' == 0 niet zinvol maar '1' == 1 wel?
Het is inderdaad goed mogelijk dat deze uitkomst het gevolg is van eerder gemaakte beslissingen. Maar dat neemt niet weg dat het niet mogelijk is dat het een bewuste beslissing is geweest om dit later niet af te vangen. Ook weet je simpelweg niet of het überhaupt op die manier tot stand is gekomen. Kun je wel over speculeren maar ik heb toch echt het idee dat dat niet de discussie is die we hier voeren.[...]
Zucht. Anders lees je mijn eerste reactie hierover nog eens door. De definitie staat mij idd niet aan. Wat ik me echter afvraag is hoe die definitie tot stand is gekomen. Omdat dat toevallig de bijwerking was van hoe de code is opgeschreven, of omdat ze er goed over hebben nagedacht? Gezien de overall design van PHP zet ik mijn geld in op dat eerste. En dat was nou juist de aanleiding van deze discussie.
Als je kijkt naar de strictere regels, naar de mensen die het gebruiken en de manieren waarop dan kun je m.i. PHP en C++, Java, etc. niet in hetzelfde rijtje zetten.[...]
Allereerst klopt je opmerking over "hogere programmeertalen" niet. PHP is gewoon 3GL, net als C++ en Java e.d. dat zijn. Maar even los daarvan, als wat jij zegt waar zou zijn, waarom wordt er dan zo weinig gebashed op andere talen die anders zijn? Zoals bijv. javascript?
En alsof mensen zo gek zijn van javascript, wie heeft daar nou nog nooit een vreemd probleem mee gehad. De redenen die er zijn om het te gebruiken zijn over het algemeen noodzaak en gebrek aan alternatieven.
Ik ben net als jou van mening dat kritiek op bepaalde punten, mits ondersteund met goede argumenten, helemaal geen probleem is. Maar ik vind het vreemd hoe sommige mensen PHP direct afdoen om soms redelijk triviale punten. Vaak speelt gevoel daarin een grotere rol dan objectiviteit.Natuurlijk zijn er veel napraters, maar dat neemt niet weg dat er weldegelijk wat te bashen valt met valide argumenten. Het feit dat dat populair zou zijn doet daar verder niets aan af. "Oh, shit, nu is het populair, nu kan het niet meer"
Wederom, het heeft er wel mee te maken want als PHP niet loose typed was dan zou het met de == operator gewoon naar false evalueren.[...]
Niet dus, zie boven.
Instant update:
Slechte verwoording van mij, ik bedoel gewoon de strictere (en daarmee eigenlijk gewoon alle niet-loose typed) talen.PHP is geen lagere GL dan een andere taal (waar jij op doelt); PHP is net zo 3GL als (bijv.) C#. If anything, dan is PHP zelfs een hogere GL![]()
Euh ja, dat is wat casting betekent. De term casting komt uit de metaalbewerking - je giet een type als het ware in een andere vorm. Type conversion en typecasting zijn equivalentPatriot schreef op maandag 25 augustus 2008 @ 13:23:
Dat is ook niet inherent aan het feit dat het loose typed is, maar het speelt wel mee. Jij zou er voor kiezen om de vergelijking tot false te evalueren (valt zeker wat voor te zeggen), maar daarmee is het mijns inziens zeker niet fout een string die niet begint met cijfers naar 0 te "casten" (want echt casten is het niet, het is meer omzetten).
Inmiddels niet meer nee, maar dat krijg je als mensen selectief reagerenHet is inderdaad goed mogelijk dat deze uitkomst het gevolg is van eerder gemaakte beslissingen. Maar dat neemt niet weg dat het niet mogelijk is dat het een bewuste beslissing is geweest om dit later niet af te vangen. Ook weet je simpelweg niet of het überhaupt op die manier tot stand is gekomen. Kun je wel over speculeren maar ik heb toch echt het idee dat dat niet de discussie is die we hier voeren.
Dan heeft de big bang er ook mee te maken, want als die er niet was dan was PHP er ook niet geweestWederom, het heeft er wel mee te maken want als PHP niet loose typed was dan zou het met de == operator gewoon naar false evalueren.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
EDIT: Niet om te zeggen dat iedereen die iets slechts heeft te zeggen over PHP de taal direct aan de kant zet hoor, is meer een rant in het algemeen dan tegen iemand die in deze discussie heeft gereageerd.
[ Voor 21% gewijzigd door Patriot op 25-08-2008 14:21 ]
?? het lijkt mij zelf toch makkelijker als je van te voren al precies weet wat voor type iets is en er dan mee te rekenen dan met loose types te werken en converteer algoritmes te moeten werken en types proberen te herkennen on the fly.Zoijar schreef op maandag 25 augustus 2008 @ 14:10:
Het ontbreken van type checking in PHP is ook geen "feature", maar is gewoon gedaan omdat het de implementatie makkelijker maakt(e). En dan zit je ineens al snel vast aan backward compatibility... Het wordt in ieder geval mooi vekocht onder de illusie dat het is om het programmeren makkelijker te maken en de learning curve lager
Voorbeeld:
1
2
3
4
5
6
| int i = 10; string s = "10"; if(s.CompareTo(i.toString()) == 0) { //doe iets } |
Lijkt me een veel makkelijker te programmeren programmeer taal dan.
1
2
3
4
| if(10 == "10") { //doe iets. } |
Immers moet bij optie 2 de compiler gokken wat voor types hij mee te maken heeft (10 kan een long, double, int of byte zijn) en moet dus proberen 10 te converteren nav een vrij uitgebreide parse tree en dan daar de equals methode (wat == eigenlijk doet) van vinden die een string als input kan gebruiken. Tough job dan maak ik liever een compiler die gewoon weet, dit is een integer en die roept die methode aan.
Dus makkelijker te implementeren wil ik het absoluut niet noemen.
(Verder ben ik trouwens een 'tegenstander' van php voor alles behalve sommige web applicaties en vind ik persoonlijk dat ze ook voor webapps terein verliezen aan bijvoorbeeld .Net, een nette taal als C# kunnen gebruiken in websites is toch veel netter dan php nu is imho.
Ook Java doet aan impliciete casting, dus zelf als de taal niet loose-typed was, is het apart.Patriot schreef op maandag 25 augustus 2008 @ 13:23:
(..)
Het is zeker een gevolg van. Als de taal niet loose-typed was, dan hadden we deze discussie niet.
Bij java geldt dat als 1 van de operatoren een double is, de ander wordt gecast naar een double. Hetzelfde geldt voor floats en ints.
Over het algemeen geldt dus dat types worden geconverteerd naar een groter type 'widening primitive conversion'.
En is dat niet het meest logische, vind ik.
1
2
3
4
| byte a = 127; short b = 255; System.out.println(a == b); |
Waarom doet PHP dit dan wel met een int vs. string?
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
NB: dit geld alleen voor primitives, niet voor Objecten. Die moeten dan maar de methode 'equals' implementeren.Jaap-Jan schreef op maandag 25 augustus 2008 @ 15:29:
[...]
Ook Java doet aan impliciete casting, dus zelf als de taal niet loose-typed was, is het apart.
Bij java geldt dat als 1 van de operatoren een double is, de ander wordt gecast naar een double. Hetzelfde geldt voor floats en ints.
Over het algemeen geldt dus dat types worden geconverteerd naar een groter type 'widening primitive conversion'.
Assumptions are the mother of all fuck ups | iRacing Profiel
Omdat ooit zo die beslissing is genomen om het zo te doen. Ja, dat is misschien fout geweest, om daar nou over te blijven miepen is kleinzerig. Al deze punten al te vaak langs gekomen, en steeds is het toch weer hetzelfde gemauw. Je kunt ook gewoon een keertje onder ogen zien dat PHP nu juist op een bepaalde manier tot stand is gekomen, en dat men gewoon langzaamaan probeert het geheel te verbeteren zonder backward compatibility te breken. Uiteindelijk blijft het hele open source verhaal natuurlijk toch deels politiek bedrijven, daar ontkom je niet aan.Jaap-Jan schreef op maandag 25 augustus 2008 @ 15:29:
[...]
Waarom doet PHP dit dan wel met een int vs. string?
Feit blijft dat je best leuke en stabiele applicaties met PHP kan bouwen, een slechte programmeur kan ook een ASP.NET/C# project prima verneuken hoor, dat zie ik op mijn werk maar al te vaak, als ik naar de iets oudere projecten kijk die we nog moeten onderhouden.
[ Voor 9% gewijzigd door Grijze Vos op 25-08-2008 21:10 ]
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Verwijderd
Boeiend wat het allemaal achter de schermen doet, als het eindresultaat maar goed is, dat is hetgeen uiteindelijk telt.
'0' == 0 is prima. Het punt was nou juist 'aap' == 0g4wx3 schreef op maandag 25 augustus 2008 @ 23:27:over php, als je het niet aanstaat dat '0' == 0, gebruik dan ===
Ja, dat argument hoor je wel vaker. Ik vind 't kul. Gebruik dan een strong typed taalMaar verschillende types zou je niet met elkaar moeten vergelijk
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Dat zou gebeuren als je de statement andersom zou schrijven; 'blaat' == 0 geeft false, 0 == 'blaat geeft 'true. Als ik mij niet vergis wordt de tweede parameter 'gejuggled' naar het type van de eerste parameter.Zoijar schreef op maandag 25 augustus 2008 @ 10:00:
Vaag. Je zou dan toch denken dat de impliciete cast de enige geldige conversie gebruikt, namelijk de integer 0 casten naar de string "0".
Ik ben eigenlijk wel benieuwd naar welke talen de voorkeuren uitgaan van de mensen die het blijkbaar niet zo met PHP ophebben. Zijn dat ook opensource talen ontwikkeld door een community, of talen van commercieële bedrijven met een vast team?
Er zitten nou eenmaal oneffenheden in PHP omdat het ontwikkelteam varieert, kijk alleen al naar benamingen van build-in functies en het gebruik van de underscore.
[ Voor 22% gewijzigd door frickY op 26-08-2008 08:10 ]
Is al eerder langsgekomen, en dat is niet het geval.frickY schreef op dinsdag 26 augustus 2008 @ 08:09:
[...]
Dat zou gebeuren als je de statement andersom zou schrijven; 'blaat' == 0 geeft false, 0 == 'blaat geeft 'true. Als ik mij niet vergis wordt de tweede parameter 'gejuggled' naar het type van de eerste parameter.
Daar sluit ik me bij aan, maar wil er nog even aan toevoegen dat ook mensen die best als ervaren omschreven worden vreemde constructies kunnen bouwen als in een vroeg stadium een denkfout gemaakt word.-NMe- schreef op dinsdag 26 augustus 2008 @ 04:38:
Ik heb weinig toe te voegen aan wat er hier allemaal al gezegd is, maar ik wil wel even kwijt dat elke tekortkoming in PHP in principe geen ramp is voor een ervaren ontwikkelaar. Als je de eigenaardigheden van een taal kent kun je ze in je voordeel gebruiken of in elk geval zo te werk gaan dat je er niet mee te maken krijgt. Het probleem zit hem dus niet in ervaren programmeurs die met PHP werken, maar juist in zolderkamerprogrammeurtjes die dénken te kunnen programmeren en daardoor fout na fout begaan.
[ Voor 51% gewijzigd door Patriot op 26-08-2008 08:50 ]
nope : Creepy in "PHP als loose typed taal"frickY schreef op dinsdag 26 augustus 2008 @ 08:09:
[...]
Dat zou gebeuren als je de statement andersom zou schrijven; 'blaat' == 0 geeft false, 0 == 'blaat geeft 'true. Als ik mij niet vergis wordt de tweede parameter 'gejuggled' naar het type van de eerste parameter.
Dat het team varieert is absoluut geen goedprater voor het gebrek aan consistente naamgeving. Daarvoor worden in de meeste projecten een code guide en een styleguide gebruikt. Dat ze het bij php niet eens konden worden over C-style underscores of camelcase is tot daar aan toe, maar dat beide varianten in de taal terecht gekomen zijn is wel heel amateuristisch. Hetzelfde geld voor de inconsistente volgorde in parameters en de manier waarop ze om namespaces heen gewerkt hebben.Ik ben eigenlijk wel benieuwd naar welke talen de voorkeuren uitgaan van de mensen die het blijkbaar niet zo met PHP ophebben. Zijn dat ook opensource talen ontwikkeld door een community, of talen van commercieële bedrijven met een vast team?
Er zitten nou eenmaal oneffenheden in PHP omdat het ontwikkelteam varieert, kijk alleen al naar benamingen van build-in functies en het gebruik van de underscore.
Hoe kom je er trouwens bij dat php een door de community ontwikkelde taal is? Er zit gewoon een bedrijf/organisatie achter genaamd Zend.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Verwijderd
Vanuit het oogpunt van de klant/eindgebruiker misschien, maar als developer/programmeur wil ik code zien die goed (te) onderhouden is en waarbij er geen rare/vieze constructies nodig zijn om iets toe te voegen op een later tijdstip.Verwijderd schreef op maandag 25 augustus 2008 @ 21:45:
[...]
Boeiend wat het allemaal achter de schermen doet, als het eindresultaat maar goed is, dat is hetgeen uiteindelijk telt.
Niets is zo vervelender dan een bestaande code-base uit moeten breiden of er iets in moeten fixen en de code is een zooitje. Nu geldt dit niet enkel voor PHP, maar voor alle talen imo, echter is het in PHP niet erg moeilijk om er snel een zooitje van maken.
En zoals -NMe- al aanhaalde, het zijn de zolderkamerhobbyisten die er nog wel 's een zooitje van maken, an sich niet erg, zolang het maar op die zolderkamer blijft
Lijkt me dat dat niet enkel voor PHP geldt?Patriot schreef op dinsdag 26 augustus 2008 @ 08:49:
[...]
Daar sluit ik me bij aan, maar wil er nog even aan toevoegen dat ook mensen die best als ervaren omschreven worden vreemde constructies kunnen bouwen als in een vroeg stadium een denkfout gemaakt word.
QTF. Het is tevens een van mijn grootste persoonlijke ergernissen aan PHP.Janoz schreef op dinsdag 26 augustus 2008 @ 08:52:
[...]
Dat ze het bij php niet eens konden worden over C-style underscores of camelcase is tot daar aan toe, maar dat beide varianten in de taal terecht gekomen zijn is wel heel amateuristisch. Hetzelfde geld voor de inconsistente volgorde in parameters en de manier waarop ze om namespaces heen gewerkt hebben.
De eerste twee versies zijn door Rasmus Lerdorf ontwikkeld, vanaf versie drie kwamen Andi Gutmans en Zeev Suraski er bij. Zij hebben ook Zend opgericht en zijn verdergegaan met de ontwikkeling van PHP. De meeste functies zijn in versie 3 toegevoegd en/of aangepast; waarschijnlijk zijn hier de eerste problemen onstaan met niet-consistente naamgeving.Janoz schreef op dinsdag 26 augustus 2008 @ 08:52:
Hoe kom je er trouwens bij dat php een door de community ontwikkelde taal is? Er zit gewoon een bedrijf/organisatie achter genaamd Zend.
Developer Accused Of Unreadable Code Refuses To Comment
Maar de documentatie voor de == operator zegt wat anders voor int en string vergelijkingen:http://nl2.php.net/manual/en/language.types.string.php
Converting to string
A value can be converted to a string using the (string) cast or the strval() function. String conversion is automatically done in the scope of an expression where a string is needed. This happens when using the echo() or print() functions, or when a variable is compared to a string. The sections on Types and Type Juggling will make the following clearer. See also the settype() function.
Dit laatste is dan ook precies wat er gebeurd. PHP mag dan een loose typed taal zijn, er wordt niet altijd even goed gedocumenteerd wat nu waarom gebeurd met de verschillende types en dat verklaart ook waarom er door verschillende mensen anders over wordt gedacht.....http://nl2.php.net/manual....operators.comparison.php
If you compare an integer with a string, the string is converted to a number. If you compare two numerical strings, they are compared as integers
[ Voor 3% gewijzigd door Creepy op 26-08-2008 11:32 ]
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Dan moet je wel een beetje oppassen wélke eigenaardigheden je gebruikt; een beetje programmeur voelt dat wel op z'n klompen aan, maar je wil niet dat net die ene eigenaardigheid die je -tig keer gebruikt in je PHP projectje in de eerstvolgende minor release wordt 'gefixed'-NMe- schreef op dinsdag 26 augustus 2008 @ 04:38:
Als je de eigenaardigheden van een taal kent kun je ze in je voordeel gebruiken of in elk geval zo te werk gaan dat je er niet mee te maken krijgt.
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Als je weet waar een variabele voor staat, hoef je nooit appels met peren te vergelijken. Wáárom is het nou geen wtf van de programmeur om een var waarvan de waarde een dierennaam is met een getal te vergelijken..oisyn schreef op dinsdag 26 augustus 2008 @ 00:38:
Ja, dat argument hoor je wel vaker. Ik vind 't kul. Gebruik dan een strong typed taal.
Die eigenaardigheden worden dan ook niet agressief opgeruimd. En dan nog zegt Nme 'of in elk geval zo te werk gaan dat je er niet mee te maken krijgt', want je kan problemen ook opzoeken natuurlijk.RobIII schreef op dinsdag 26 augustus 2008 @ 11:34:
[...]
Dan moet je wel een beetje oppassen wélke eigenaardigheden je gebruikt; een beetje programmeur voelt dat wel op z'n klompen aan, maar je wil niet dat net die ene eigenaardigheid die je -tig keer gebruikt in je PHP projectje in de eerstvolgende minor release wordt 'gefixed'
Maar goed, we're running in circles. Het is wel gedefinieerd gedrag, en iig ik kan het altijd in de manual vinden, of gewoon vermijden. En dat zonder te willen zeggen dat de docs perfect zijn, of PHP perfect is, of alles beslissingen in het verleden perfect waren.
[ Voor 12% gewijzigd door Voutloos op 26-08-2008 11:53 ]
{signature}
Ik moet toegeven dat ik me de laatste jaren niet met web-development heb bezig gehouden (daarvoor een jaar of 3 professioneel met PHP), maar ik zie tegenwoordig weinig rede om geen C++ te gebruiken. Ik heb weinig overtuigende argumenten gehoord tegen het gebruik van C++ voor web-development. Uiteraard heb je dan wat libraries nodig, net als je die met PHP gebruikt. Compilen versus scripten lijkt me ook geen enkel punt; je typed een keer make in en het draait. Bovendien zou C++ theoretisch gewoon sneller moeten zijn omdat het niet geparsed wordt. Het is ook volledig platform onafhankelijk. En anders desnoods C#. Ik snap niet waarom vandaag de dag mensen uberhaupt nog PHP gebruiken voor nieuwe projecten.frickY schreef op dinsdag 26 augustus 2008 @ 08:09:
Ik ben eigenlijk wel benieuwd naar welke talen de voorkeuren uitgaan van de mensen die het blijkbaar niet zo met PHP ophebben. Zijn dat ook opensource talen ontwikkeld door een community, of talen van commercieële bedrijven met een vast team?
Er zitten nou eenmaal oneffenheden in PHP omdat het ontwikkelteam varieert, kijk alleen al naar benamingen van build-in functies en het gebruik van de underscore.
Je zal er inderdaad sowieso spaarzaam mee moeten zijn en het goed moeten documenteren. En je zal de overweging moeten maken of de kans op een fix groot is; als het al een "bug" genoemd mag worden van het PHP team.RobIII schreef op dinsdag 26 augustus 2008 @ 11:34:
[...]
Dan moet je wel een beetje oppassen wélke eigenaardigheden je gebruikt; een beetje programmeur voelt dat wel op z'n klompen aan, maar je wil niet dat net die ene eigenaardigheid die je -tig keer gebruikt in je PHP projectje in de eerstvolgende minor release wordt 'gefixed'
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Dat is idd een WTF. Echter is input doorgaans gewoon een string. Bovendien zeg ik niet dat voor je redenatie best wat te zeggen is. Maar dan zou een string-int compare gewoon altijd false op moeten leveren. De discussie was de (imho) rare design-keuze in PHP. Dan moet je dat niet afdoen met "maakt geen zak uit, je moet toch geen verschillende types vergelijken". De issue was namelijk niet hoe je PHP gebruikt, maar hoe PHP ontworpen was.Voutloos schreef op dinsdag 26 augustus 2008 @ 11:50:
[...]
Als je weet waar een variabele voor staat, hoef je nooit appels met peren te vergelijken. Wáárom is het nou geen wtf van de programmeur om een var waarvan de waarde een dierennaam is met een getal te vergelijken.
Het is wellicht dat omdat ik geïnteresseerd ben in compilerbouw en taal-theorie dat de achterliggende redenatie van een keuze mij wat meer aangaat, terwijl anderen het gewoon nemen voor wat het is. Het scheelt ook dat ik er niet in hoef te werken. C++ kent ook wel zijn eigenaardigheden, en hoewel ik daar net zo goed op kan ranten moet ik ze in m'n dagelijkse werkzaamheden ook gewoon nemen voor wat ze zijn (en hopen dat C++0x snel wordt geadopteerd door de verschillende compilerbouwers
En dat je een tool op een goede manier moet gebruken staat natuurlijk sowieso buiten kijf.
Ik gok een lage leercurve, een uitgebreide set van libraries en een overvloed aan hosting-mogelijkheden.Zoijar schreef op dinsdag 26 augustus 2008 @ 11:54:
Ik snap niet waarom vandaag de dag mensen uberhaupt nog PHP gebruiken voor nieuwe projecten.
[ Voor 21% gewijzigd door .oisyn op 26-08-2008 12:08 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Mwja, dat zal het wel zijn... maar toch, eigenlijk allemaal niet echt goede argumenten om voor een taal te kiezen. Lage leercurve: huur gewoon iemand die het al kan (dat zal wel duurder zijn, dat is echt een probleem), en laag aan het begin voor PHP, totdat je echt iets ingewikkelds wilt doen en dan is het toch ineens best tricky. Libraries, tsja, die heeft elke taal. Hosting, elke host kan in principe C++ hosten, maar zal mischien duurder zijn. (ik vind PHP een beetje een hobby taaltje eigenlijk, en als je een echt groot project in PHP op wilt zetten ben je net zoveel tijd kwijt als in een andere taal, vaak zonder de algemene reusability).oisyn schreef op dinsdag 26 augustus 2008 @ 12:02:
Ik gok een lage leercurve, een uitgebreide set van libraries en een overvloed aan hosting-mogelijkheden.
[ Voor 12% gewijzigd door Zoijar op 26-08-2008 12:25 ]
Dat is niet voor iedereen, gedurende de gehele discussie duidelijk. Hoe PHP ontworpen was moge wel duidelijk zijn, getuige de originele betekenis van de afkorting..oisyn schreef op dinsdag 26 augustus 2008 @ 12:02:
De issue was namelijk niet hoe je PHP gebruikt, maar hoe PHP ontworpen was.
Ik heb zelf doorgaans ook de meer wetenschappelijke insteek, met het geïnteresseerd zijn in het hoe & waarom ipv het leren van trucjes om een doel te bereiken. Maar dan nog kan je aan de huidige situatie, met de toch wel aardige b/c policy (soms te aardigHet is wellicht dat omdat ik geïnteresseerd ben in compilerbouw en taal-theorie dat de achterliggende redenatie van een keuze mij wat meer aangaat, terwijl anderen het gewoon nemen voor wat het is.
Ik weet het wel zeker.Ik gok een lage leercurve, een uitgebreide set van libraries en een overvloed aan hosting-mogelijkheden.
{signature}
Zeker. Hoewel ik er niet van overtuigd ben dat de mensen bij Zend het ermee eens zijn dat dit specifieke voorbeeld een foute keuze was, en dus weer exact dezelfde keuze maken bij een nieuwe PHP die b/c zal brekenVoutloos schreef op dinsdag 26 augustus 2008 @ 12:26:
Maar dan nog kan je aan de huidige situatie, met de toch wel aardige b/c policy (soms te aardig) er verder niets aan doen, behalve inderdaad constateren dat niet elke keuze ideaal was (of op de juiste basisn genomen is) en er hopelijk voor de toekomst van leren.
Dat zal voor het overgrote deel van de scripts idd wel de belangrijkste factor zijn. Maar het is natuurlijk ook wel inherent aan de taal dat het nooit de performance kan halen van menig statically typed taal. Maar daar is het dan ook weer helemaal niet voor bedoeld.Ik weet het wel zeker.En het performance argument vervalt bovendien ook voor een groot deel, als je maar een opcode cache (APC, eAccelerator etc) draait.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Wat mij betreft breken ze de backwards compatibility, zolang ze er maar voor zorgen dat je de verschillende PHP versies maar eenvoudig naast elkaar kan gebruiken... Want anders gaat het weer jaren duren voordat "alle" hosting partijen door hebben dat er een nieuwe versie is..oisyn schreef op dinsdag 26 augustus 2008 @ 12:41:
Zeker. Hoewel ik er niet van overtuigd ben dat de mensen bij Zend het ermee eens zijn dat dit specifieke voorbeeld een foute keuze was, en dus weer exact dezelfde keuze maken bij een nieuwe PHP die b/c zal breken
Overigens lijkt C++ mij niet echt geschikt als taal om te gebruiken voor een webapplicatie. Natuurlijk kan het, net zoals ik ook desktop applicaties in PHP kan maken...
[ Voor 12% gewijzigd door Erkens op 26-08-2008 12:53 ]
Kun je dat ook onderbouwen? Is het de turn-around time? Het gemis van een framework? Of gewoon omdat het momenteel nog vrij lastig is te gebruiken icm de gebruikelijke webservers? Of wellicht gewoon het feit dat het geen 'template parser' is (en dus een html document met C++ code erin, ipv C++ code dat html output)?Erkens schreef op dinsdag 26 augustus 2008 @ 12:44:
Overigens lijkt C++ mij niet echt geschikt als taal om te gebruiken voor een webapplicatie.
[ Voor 15% gewijzigd door .oisyn op 26-08-2008 13:08 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Er is ook niets tegen python, perl, ruby, C, pascal etc etc.Zoijar schreef op dinsdag 26 augustus 2008 @ 11:54:
[...]
Ik heb weinig overtuigende argumenten gehoord tegen het gebruik van C++ voor web-development. Uiteraard heb je dan wat libraries nodig, net als je die met PHP gebruikt. Compilen versus scripten lijkt me ook geen enkel punt; je typed een keer make in en het draait. Bovendien zou C++ theoretisch gewoon sneller moeten zijn omdat het niet geparsed wordt. Het is ook volledig platform onafhankelijk. En anders desnoods C#. Ik snap niet waarom vandaag de dag mensen uberhaupt nog PHP gebruiken voor nieuwe projecten.
PHP is ooit begonnen om inline in de HTML wat dynamische elementen toe te voegen. De grote meerwaarde van PHP versus een algemene taal is dan ook dat er een paar dingen standaard al geregeld zijn (het binnenhalen en parsen van query strings, POST variabelen, content type zetten en meer van dat moois) waardoor het eenvoudig is om zelf wat dynamische HTML paginaatjes te maken. In veel andere talen heb je daar al snel libraries voor nodig, bij PHP zit het in de executable ingebakken.
Vandaar is het (zoals zovele talen) doorontwikkeld. Iemand die ooit begonnen is met een eenvoudige HTML pagina met een "Het is nu het jaar <?= date("Y")?>" erin kan met PHP doorgroeien naar wat complexere zaken. Een OS zou ik er niet in schrijven maar voor waar het ooit bedoelt is voldoet het prima, mits je maar bewust bent van de quirks (zoals in elke taal)
Nou moetje niet gaan overdrijvenrutgerw schreef op dinsdag 26 augustus 2008 @ 13:01:
Er is ook niets tegen python, perl, ruby, C, pascal etc etc.
Dat is gedeeltelijk waar, maar er worden nu veel grote projecten in PHP geschreven die veel verder gaan dan waar het ooit voor bedoeld was. In reactie evolueert de taal ook verder, maar wordt altijd gehinderd door backward compatibility. Als je dan toch een nieuwe project begint, dan zie ik niet zo heel erg het nut van PHP in. Het is een soort C, maar dan hinderlijk loose-typed (imho), en het is een soort C++ maar dan met een hinderlijk object model. Perl vind ik overigens ook verschrikkelijk. (Ik moet ineens denken aan een 3D engine schrijven in turtleEen OS zou ik er niet in schrijven maar voor waar het ooit bedoeld is voldoet het prima, mits je maar bewust bent van de quirks (zoals in elke taal)
Anyway, PHP heeft wel z'n nut blijkbaar, omdat veel mensen het gebruiken... maar mijn ding is het nog steeds niet, terwijl ik er toch zeker 3 jaar mee gewerkt heb. De enige associatie die ik meteen heb als ik PHP hoor is "rommelig".
[ Voor 11% gewijzigd door Zoijar op 26-08-2008 16:32 ]
Niet? Het is nou eenmaal makkelijk om goedkoop personeel te vinden omdat het zo'n gigantische userbase heeft een erg lage gemiddelde leeftijd. Daarbij draait praktisch iedere webhoster het al vanaf 5 euro in de maand en is de community simpelweg van een enorme omvang. Dat het technische aspect van de taal rommelig in elkaar steekt is daardoor irrelevant omdat je php-studentje van € 15 per uur een heel stuk goedkoper is als een willekeurig andere professional.Zoijar schreef op dinsdag 26 augustus 2008 @ 16:28:
Als je dan toch een nieuwe project begint, dan zie ik niet zo heel erg het nut van PHP in.
Verwijderd
Er zijn genoeg voorbeelden van zeer grote en goede sites die werken met PHP.
Voordeel is vooral dat je altijd goedkoop je site kunt laten bijwerken en zelf wat aanprutsen is ook geen probleem, rommel is het toch wel.
Ik had hem gezien maar was er van overtuigd dat dat wél zo was. Eigenwijs even getest, maar Creepy, en jij, hebben inderdaad gelijk

Uit verontwaardiging de manual maar ingedoken, en zo te zien is de manier waarop de string naar een integer wordt gecast volstrekt normaal, en ook gebruik in Unix en C++.
Het staat alleen niet vermeld waarom een string altijd naar een float/int wordt gecast, en waarom middels bovenstaande methode.[url="[url=http://nl.php.net/manual/en/language.types.string.php#language.types.string.conversion]"]String conversion to numbers[/url]
When a string is evaluated in a numeric context, the resulting value and type are determined as follows.
The string will be evaluated as a float if it contains any of the characters '.', 'e', or 'E'. Otherwise, it will be evaluated as an integer.
The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.
For more information on this conversion, see the Unix manual page for strtod(3).
CamelCased functies komen in php voor zover ik weet niet voor. Ik doelde op het underscore gebruik bij bijvoorbeeld str_replace en strpos.Janoz schreef op dinsdag 26 augustus 2008 @ 08:52:
Dat ze het bij php niet eens konden worden over C-style underscores of camelcase is tot daar aan toe, maar dat beide varianten in de taal terecht gekomen zijn is wel heel amateuristisch. Hetzelfde geld voor de inconsistente volgorde in parameters en de manier waarop ze om namespaces heen gewerkt hebben.
Ik meen dat het enkele jaren terug mogelijk was je aan te melden om mee te developen, en jeje eigen functies kon submittenHoe kom je er trouwens bij dat php een door de community ontwikkelde taal is? Er zit gewoon een bedrijf/organisatie achter genaamd Zend.
Ik werk een ruime 7 jaar professioneel met oa. PHP en moet die associatie helaas met je delen. Probleem van PHP is dat het zo verschrikkelijk laagdrempelig is. Iedereen met een internetverbinding en Google kan in een dag eenvoudige dynamische pagina's maken met PHP.Zoijar schreef op dinsdag 26 augustus 2008 @ 16:28:
De enige associatie die ik meteen heb als ik PHP hoor is "rommelig".
Het bedrijfsleven haalt die mensen vervolgens binnen waar ze zichzelf proberen te ontplooien met slechte voorbeelden van hun voorgaande generatie en ze leren de syntax uit hun hoofd, maar echt programmeren leren ze noiot. Door dat soort mensen heeft PHP zo een slechte reputatie, en is veel PHP code ronduit slecht. Het instapniveau is gewoon te laag
Dat zegt echters niets over PHP zelf, welke wat mij betreft ook uitermate geschikt is voor de grotere webprojecten, mits er maar door goede programmeurs aan gewerkt wordt. Dat in oudere versies hulpmiddelen als register_globals en magiq_quotes standaard aanstonden heeft hier ook niet aan bijgedragen maar hier is met PHP5 gelukkig verandering in gekomen, en het ziet er uit dat er met PHP6 nog meer verbetering komt.
[ Voor 6% gewijzigd door frickY op 26-08-2008 23:07 ]
Verwijderd
Kijk bijvoorbeeld naar de naamgeving en dan specifiek het gebruik van underscores in de functienamen. Daar zit gewoon compleet geen logica in wat zeer frustrerend is, zelfs mensen met redelijk wat ervaring moeten regelmatig nog in de manual opzoeken of er nu wel of geen underscore in een bepaalde functie zat. (Of er gewoon achterkomen als de errors je om de oren vliegen).
Helemaal vervelend is het als je regelmatig in andere talen programmeert waarin dezelfde functienamen gebruikt worden (zoals C) maar met net een andere spelling, afkorting, underscores etc.
Het is ook PHP zelf die rommelig is. (Zoals ook al genoemd door menig persoon hier)
Wat betreft slechte syntax ed komt natuurlijk ook voor een groot deel dat de voorbeelden in de manual zelf ook zo zijn. Iedereen moet het uiteindelijk uit de manual leren en dan pik je vanzelf dingen op ook al heb je ervaring met andere talen.
Voor zo ver ik weet is PHP altijd al driven by Zend, hoewel het open source is is de invloed van de community minimaal (ook wegens het lagere niveau) en zijn er voor zo ver ik weet geen forks ofzo. Dat maakt PHP eigenlijk net closed source, plus dat ik mij heb laten vertellen dat ook de code van PHP zelf niet super netjes en begrijpbaar is.
[ Voor 17% gewijzigd door Verwijderd op 27-08-2008 00:26 ]
Maar wat is de kwaliteit van dit alles? Was het goed genoeg toen het werkte of is het ook echt getest? Hoeveel moeite kost het om een half jaar later nieuwe functionaliteit aan deze code toe te voegen?PrisonerOfPain schreef op dinsdag 26 augustus 2008 @ 17:33:
[...]
Niet? Het is nou eenmaal makkelijk om goedkoop personeel te vinden omdat het zo'n gigantische userbase heeft een erg lage gemiddelde leeftijd. Daarbij draait praktisch iedere webhoster het al vanaf 5 euro in de maand en is de community simpelweg van een enorme omvang.
Het output op dit moment het gewenste resultaat, maar je moet niet verder vragen...
Waarom zijn die tranen er? Ik krijg ze vaak genoeg van het lachen om sommige constructies ( niets mis mee zolang het werkt en duidelijk en goed gedocumenteerd is ) maar vaak genoeg ook vanwege gigantische securityfouten die erin zitten.Verwijderd schreef op dinsdag 26 augustus 2008 @ 22:27:
Daarnaast zijn er prima eindresultaten te behalen ook al is het achter de schermen soms genoeg voor tranen in de ogen van een programmeur.
De output is maar een onderdeel van het eindresultaat, vaak genoeg komen er naderhand nog aanpassingen op, heel weinig mensen zitten te wachten op een gehackte website.
Ik denk dat er opzich weinig mensen zijn die zullen zeggen dat je met PHP helemaal geen fatsoenlijke code kan maken. Alleen zit er over het algemeen een prijs / kwaliteits verschil tussen een php-progger van tweakers.net en een zolderprogrammeur.Er zijn genoeg voorbeelden van zeer grote en goede sites die werken met PHP.
Goedendag zolderprogrammeur, als ik een php-site voor jou maak dan vind ik het wel erg als jij zelf wat gaat aanprutsen in mijn code ( as in : je garantie/support kan je vergeten ).Voordeel is vooral dat je altijd goedkoop je site kunt laten bijwerken en zelf wat aanprutsen is ook geen probleem, rommel is het toch wel.
Leuk om eventjes iedere PHP-progger gelijkgesteld te zien aan elke zolderprogrammeur...
Goedendag lichtgewicht (om maar even neerbuigend te zijn). Jouw code? Als de klant ervoor heeft betaald ben ik toch eerder geneigd om te zeggen dat het de code van de klant isGomez12 schreef op woensdag 27 augustus 2008 @ 00:35:
Goedendag zolderprogrammeur, als ik een php-site voor jou maak dan vind ik het wel erg als jij zelf wat gaat aanprutsen in mijn code ( as in : je garantie/support kan je vergeten ).
Leuk om eventjes iedere PHP-progger gelijkgesteld te zien aan elke zolderprogrammeur...
Ontopic wat betreft PHP zelf, 'k heb er nog altijd moeite mee om PHP te zien als een echte taal. De naam alleen al duidt erop dat het een preprocessor is en zo zie ik het ook. Als je in de source duikt wordt dit alleen maar meer evident: er wordt niet eens een abstract syntax tree gebouwd tijdens het parsen, wat het niet eenvoudig maakt om traditionele optimizers op de AST los te laten of een mooie (byte)code generator met visitor pattern te implementeren, simpelweg omdat er gewoon geen AST is. Het zal dan ook als geen verassing aankomen dat er geen optimalisaties uitgevoerd worden in de Zend VM. In plaats daarvan is het gewoon echt een simpel syntax directed translation die plaatsvindt van PHP naar 'bytecode' die de Zend VM interpreteert. Een interessante talk die hier dieper op in gaat is die van een van de mensen die op een LLVM bijeenkomst JIT compilatie toe wilde voegen aan PHP met als resultaat dat het langzamer werd
De reden waarom je hier nooit hinder van hebt is omdat PHP heel lomp uitgedrukt gewoon je script inleest, uitvoert en daarna alle data die het in de tussentijd heeft vergaard gewoon weg gooit. Dit blijkt in de praktijk best okay te werken, maar probeer eens voor de lol maar een application server te maken met PHP die ongeveer als Rails werkt. Naar mijn voorspelling zal het geheugen lekken als de mallemoeren omdat het niet voor dit soort doeleinden was bestemd.
Verwijderd
Schijnbaar zou dit zelfs de standaard worden voor PHP vanaf versie 6 zodat men niet meer afhankelijk is van 3rd party optimalisatie technieken.
De directe translatie is ook te zien in de tools die er bestaan om beschermde code van Zend bijvoorbeeld terug om te zetten naar PHP. Hoewel je het commentaar en opmaak verliest krijg je de volledige broncode terug tot op variabel, functie en classnaam toe. Opmaak is eenvoudig te herstellen en met genoeg werk het commentaar waar nodig ook wel.
Natuurlijk hebben we ook de laatste jaren een enorme groei qua hardware meegemaakt, de servers van nu zijn onvoorstelbaar snel vergeleken met een aantal jaar terug. Ook ontwerp je een PHP applicatie vaak zo dat de load op de database server terecht komt en niet zozeer op de PHP server. Die twee zijn eenvoudig van elkaar te scheiden dus de performance is relatief simpel goed te houden.
Het hoeft gewoon niet efficient te zijn, de hardware en database servers maken dit ruim goed. (Veel PHP applicaties zijn dan ook data driven, met goede reden).
Dat scheelt je hooguit de lex en parse tijd m.u.v. de initiele performance penalty en alhoewel 't een beetje helpt denk ik niet dat niet zozeer de bottleneck is in de meeste gevallenVerwijderd schreef op woensdag 27 augustus 2008 @ 02:13:
Daarom zie je dat veel optimalisatie technieken voor PHP gebruik maken van een cache waarbij het resultaat of een tussenresultaat wordt opgeslagen en gebruikt wordt ipv het originele bronbestand.
Ik neem aan dat je hier doelt op Zend Encoder? Heb me er niet in verdiept, maar het lijkt me heel erg onwaarschijnlijk dat de commentaar mee geobfusceerd wordt daar het gewoon geen toegevoegde waarde heeft voor het eindresultaat. Het beoogde eindresultaat is immers om een geobfusceerde doch uitvoerbare versie te hebben van het script. Identifiers worden hier dan enkel gebruikt ter referentie van geheugenaddressen en comments worden gewoon niet meegenomen omdat ze parse overhead zijn. Het is immers de bedoeling ook dat de geobfusceerde versie niet meer terug te vertalen is naar het origineel lijkt meDe directe translatie is ook te zien in de tools die er bestaan om beschermde code van Zend bijvoorbeeld terug om te zetten naar PHP. Hoewel je het commentaar en opmaak verliest krijg je de volledige broncode terug tot op variabel, functie en classnaam toe. Opmaak is eenvoudig te herstellen en met genoeg werk het commentaar waar nodig ook wel.
Ben het niet helemaal eens met het performance verhaal. Wel ben ik van mening dat PHP vast geschikt is om view werk gedaan te krijgen op een cost-effective manier. Facebook is hier een goed voorbeeld van. De backend is Django + Erlang l33tness, de frontend lekker PHP omdat het zo makkelijk en goedkoop is om aan dat soort developers te komen. Een leuke bijkomstigheid is dat PHP met z'n setup/teardown aard gewoon ideaal is voor dit soort werk en het daarmee in zekere zin eigenlijk ook cost-effective schaalt: gewoon naar hartelust frontend webservers kan neerzetten om enigzins evenredig dat soort requests af te laten handelen door PHP.Natuurlijk hebben we ook de laatste jaren een enorme groei qua hardware meegemaakt, de servers van nu zijn onvoorstelbaar snel vergeleken met een aantal jaar terug. Ook ontwerp je een PHP applicatie vaak zo dat de load op de database server terecht komt en niet zozeer op de PHP server. Die twee zijn eenvoudig van elkaar te scheiden dus de performance is relatief simpel goed te houden.
Het hoeft gewoon niet efficient te zijn, de hardware en database servers maken dit ruim goed. (Veel PHP applicaties zijn dan ook data driven, met goede reden).
[edit]
P.S. Net als velen hier heb ik ook wel het e.e.a. op te merken over PHP, terwijl het zo'n 7 jaar geleden mijn favoriete taal was (heck, 'k heb zelfs meegecontribute aan o.a. de documentatie van PHP). Maar ja, net als vele PHP enthousastelingen was ik nog jong en zonder CS opleiding. Het valt me echter ook soms op dat mensen hier PHP verdedigen met hun leven. Aan hun wil ik eigenlijk vragen of ze ook wel eens andere talen hebben geprobeerd, zoals --oh, I dunno-- Ruby
Anyways, onder het mom van "beter er iets aan doen dan er over te zeuren", loop ik nu al een tijdje met het idee om een dialect te bedenken op PHP en daar ook een VM implementatie op te maken. Ik denk dat de meeste mensen wel een alternatief zouden willen gebruiken als de leercurve voor ze niet (te) hoog ligt. Erik Meijer (functional programming god @ microsoft research) heeft er wel eens over geschreven dat ook al onderkennen programmeurs het probleem met een taal, dat men het toch blijft gebruiken als het leren van een ander taal teveel werk is. Het is om deze reden dat het me geen gek idee lijkt om qua syntax niet teveel af te wijken van PHP in zo'n geval, maar wel met fatsoenlijke constructies voor bijvoorbeeld closures.
Helaas zit ik nogal zwaar verlegen met de tijd ivm werk en studie, maar misschien dat er mensen hier zijn die zich tot hetzelfde geroepen voelen. Als ik hier nog over een jaar mee rondloop met ditzelfde idee zal ik het eens voorleggen aan een van m'n docenten om hier een master research project van te maken (voor de duidelijkheid, ik ben iig niet van plan om met zoiets saais af te studeren
P.P.S. Als je PHP echt zat bent en je een sprong in het diepe wil wagen, overweeg ook eens Ruby + Rails.
[ Voor 32% gewijzigd door prototype op 27-08-2008 03:24 ]
Verwijderd
Tjah, die dingen zijn razend populair en ik weet ook uit eigen ervaring dat het echt een flink performance verschil geeft. Zeker bij veel requests.prototype schreef op woensdag 27 augustus 2008 @ 02:56:
[...]
Dat scheelt je hooguit de lex en parse tijd m.u.v. de initiele performance penalty en alhoewel 't een beetje helpt denk ik niet dat niet zozeer de bottleneck is in de meeste gevallen.
Lekker nutteloos dat je server bij honderden requests per sec ook honderden keren exact dezelfde handeling uitvoert. De winst kan dus wel groot zijn.
Er zijn nog een paar anderen, maar Zend Encoder is er een van.[...]
Ik neem aan dat je hier doelt op Zend Encoder? Heb me er niet in verdiept, maar het lijkt me heel erg onwaarschijnlijk dat de commentaar mee geobfusceerd wordt daar het gewoon geen toegevoegde waarde heeft voor het eindresultaat. Het beoogde eindresultaat is immers om een geobfusceerde doch uitvoerbare versie te hebben van het script. Identifiers worden hier dan enkel gebruikt ter referentie van geheugenaddressen en comments worden gewoon niet meegenomen omdat ze parse overhead zijn. Het is immers de bedoeling ook dat de geobfusceerde versie niet meer terug te vertalen is naar het origineel lijkt me
Commentaar zit natuurlijk niet erin, maar je kunt het wel terugkrijgen op een andere manier, namelijk door de hele handel naar India te sturen en daar een groepje programmeurs de code te laten lezen en verklaren wat het doet. Daarom zeg ik ook daar waar nodig, vaak is veel van de code doodsimpel en zijn er maar een paar zaken ingewikkeld.
De code bestuderen moet je toch, dat is volgens mij de enige nuttige reden om de source code te willen krijgen (vaak met het doel wijzigingen aan te brengen).
Obfusceren kan niet bij PHP daar je kunt verwijzen naar de naam van eigenlijk alles via een variabele, ik kan dus bijvoorbeeld in de POST de naam van de class meegeven en dan kan het script daar verder mee werken. (Kan zo geen nuttig voorbeeld noemen maar het kan).
Het gaat dus niet om geheugenwaardes en dat soort zaken, maar de volledige namen van alles staat er gewoon in. Je zit hiermee dus heel dicht bij het origineel, zoals ik zei: Je verliest alleen opmaak en commentaar.
Opmaak haal je door een willekeurige editor heen en commentaar is in te vullen door de code te lezen en begrijpen.
PHP zelf is inefficient gemaakt, en dan hebben we het echt over extreem inefficient. Dat heeft dus absoluut niets te maken met OOP oid, hoewel menig PHP script zelf ook niet bijster efficient gemaakt is inderdaad. Zelfs al maak je super efficiente PHP code dan blijft het nog altijd PHP en dus maakt het niet optimaal gebruik van de hardware.[...]
Ben het niet helemaal eens met het performance verhaal. Wel ben ik van mening dat PHP vast geschikt is om view werk gedaan te krijgen op een cost-effective manier. Facebook is hier een goed voorbeeld van. De backend is Django + Erlang l33tness, de frontend lekker PHP omdat het zo makkelijk en goedkoop is om aan dat soort developers te komen. Een leuke bijkomstigheid is dat PHP met z'n setup/teardown aard gewoon ideaal is voor dit soort werk en het daarmee in zekere zin eigenlijk ook cost-effective schaalt: gewoon naar hartelust frontend webservers kan neerzetten om enigzins evenredig dat soort requests af te laten handelen door PHP.
Dat PHP bagger is qua performance weet iedereen, maar zoals gezegd heft de snelle hardware van tegenwoordig dat volledig op waardoor het gewoon lekker snel is.
(Offtopic, maar van PHP afstappen en dan RoR promoten is echt een rare stap in mijn ogen. Ruby is een mooie taal (oud ook), maar RoR is me toch een bak ellende. Veel mensen raken ingepakt door de mooie syntax van Ruby, maar er zijn veel betere frameworks dan Rails en in de praktijk zitten er zoveel haken en ogen aan dat het eigenlijk niet echt bruikbaar is in veel situaties. Als je het over bagger performance hebt, dan heb je het over RoR).
[ Voor 5% gewijzigd door Verwijderd op 27-08-2008 03:25 ]
Oh ongetwijfeld, maar 'k doelde meer op 't feit dat de bottleneck van dergelijke apps naar alle waarschijnlijkheid meer bij I/O handelingen zitten. Vergeleken daarmee is de winst die je haalt uit bytecode cachen denk ik niet zo bijzonder groot. Denk aan zware of inefficiente database queries. Dat soort dingen optimaliseren zal eerder merkbaar zijn me dunktVerwijderd schreef op woensdag 27 augustus 2008 @ 03:23:
[...]
Tjah, die dingen zijn razend populair en ik weet ook uit eigen ervaring dat het echt een flink performance verschil geeft. Zeker bij veel requests.
Lekker nutteloos dat je server bij honderden requests per sec ook honderden keren exact dezelfde handeling uitvoert. De winst kan dus wel groot zijn.
Er zijn nog een paar anderen, maar Zend Encoder is er een van.
As in most PHP applications raw execution speed isn't the limiting
factor but system calls and database callls are...
Ik vind 'm creatief gevonden[...]
Commentaar zit natuurlijk niet erin, maar je kunt het wel terugkrijgen op een andere manier, namelijk door de hele handel naar India te sturen en daar een groepje programmeurs de code te laten lezen en verklaren wat het doet. Daarom zeg ik ook daar waar nodig, vaak is veel van de code doodsimpel en zijn er maar een paar zaken ingewikkeld.
Hmmm, da's waar ook, PHP ondersteund geen open classes etc itt Ruby b.v.De code bestuderen moet je toch, dat is volgens mij de enige nuttige reden om de source code te willen krijgen (vaak met het doel wijzigingen aan te brengen).
Ah ja, je hebt gelijk met het feit dat in zo'n geval niet alles geobfusceerd kan worden: ik bedenk me net dat alles wat waarneembaar is (b.v. identifiers in de global scope) niet 'verwaarloosd' kan worden. Echter hetgeen wat niet waarneembaar zou zijn na een include b.v. (zoals de lokale variabelen in een class) prima 'verwaarloosd' kunnen worden tbv de parsetijd verminderen (om maar iets te noemen).Obfusceren kan niet bij PHP daar je kunt verwijzen naar de naam van eigenlijk alles via een variabele, ik kan dus bijvoorbeeld in de POST de naam van de class meegeven en dan kan het script daar verder mee werken. (Kan zo geen nuttig voorbeeld noemen maar het kan).
Het gaat dus niet om geheugenwaardes en dat soort zaken, maar de volledige namen van alles staat er gewoon in. Je zit hiermee dus heel dicht bij het origineel, zoals ik zei: Je verliest alleen opmaak en commentaar.
Wow, strong claims. Nu heb je m'n aandacht(Offtopic, maar van PHP afstappen en dan RoR promoten is echt een rare stap in mijn ogen. Ruby is een mooie taal (oud ook), maar RoR is me toch een bak ellende. Veel mensen raken ingepakt door de mooie syntax van Ruby, maar er zijn veel betere frameworks dan Rails en in de praktijk zitten er zoveel haken en ogen aan dat het eigenlijk niet echt bruikbaar is in veel situaties. Als je het over bagger performance hebt, dan heb je het over RoR).
In het bijzonder ben ik eigenlijk geinteresseerd in die bagger performance claims van je. Heb je cijfers om dat te backen? Ik heb genoeg counter examples van super huge enterprisey sites die powered zijn door RoR
Zeg dan gelijk dat je me niet gelooftfrickY schreef op dinsdag 26 augustus 2008 @ 23:01:
[...]
Ik had hem gezien maar was er van overtuigd dat dat wél zo was. Eigenwijs even getest, maar Creepy, en jij, hebben inderdaad gelijk![]()
Uit verontwaardiging de manual maar ingedoken, en zo te zien is de manier waarop de string naar een integer wordt gecast volstrekt normaal, en ook gebruik in Unix en C++.
Creepy in "PHP als loose typed taal"Het staat alleen niet vermeld waarom een string altijd naar een float/int wordt gecast, en waarom middels bovenstaande methode.

Oftewel: dit staat uitgelegd bij de documentatie over comparision operators
Edit: blegh, het waarom inderdaad staat er niet bij. Ook wel mooi, waarom dit soort beslissingen zijn genomen is eigenlijk niet te achterhalen.
Mooi voorbeeld dit. Alweer iemand met ruime PHP ervaring die een aantal eigenaardigheden van de taal niet weet/kent of zich er niet van bewust is. Ok, de betere (PHP) ontwikkelaars voorkomen dat ze een string met een int gaan vergelijken maar dat blijkbaar een hoop mensen met ruime PHP ervaring niet goed weten hoe dat nu echt in z'n werk gaat wil ik toch afschuiven op de documentatie van PHP waar dat gewoon niet duidelijk in staat. Combineer dat met de mogelijkheid om aan de "officiele" documentatie commentaar toe te staan van alles en iedereen en dan moet ik toch zeggen dat PHP(of Zend..) zichzelf toch niet zo heel serieus neemt....Ik werk een ruime 7 jaar professioneel met oa. PHP en moet die associatie helaas met je delen. Probleem van PHP is dat het zo verschrikkelijk laagdrempelig is. Iedereen met een internetverbinding en Google kan in een dag eenvoudige dynamische pagina's maken met PHP.
Het bedrijfsleven haalt die mensen vervolgens binnen waar ze zichzelf proberen te ontplooien met slechte voorbeelden van hun voorgaande generatie en ze leren de syntax uit hun hoofd, maar echt programmeren leren ze noiot. Door dat soort mensen heeft PHP zo een slechte reputatie, en is veel PHP code ronduit slecht. Het instapniveau is gewoon te laag
Dat zegt echters niets over PHP zelf, welke wat mij betreft ook uitermate geschikt is voor de grotere webprojecten, mits er maar door goede programmeurs aan gewerkt wordt. Dat in oudere versies hulpmiddelen als register_globals en magiq_quotes standaard aanstonden heeft hier ook niet aan bijgedragen maar hier is met PHP5 gelukkig verandering in gekomen, en het ziet er uit dat er met PHP6 nog meer verbetering komt.
[ Voor 3% gewijzigd door Creepy op 27-08-2008 09:03 ]
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Open classes zijn namelijk zo'n lekker goed idee, dat zorgt in Rails ook helemaal niet voor problemen.prototype schreef op woensdag 27 augustus 2008 @ 03:56:
Hmmm, da's waar ook, PHP ondersteund geen open classes etc itt Ruby b.v.Daar zou je dit probleem dan ook gewoon niet hebben...
Rustacean
Ja, PHP lijkt vrij ad-hoc geimplementeerd en er is gebrek aan logische naamgeving of volgorde van argumenten. Dat gezever over type jugling vind ik minder interessant, dat lijkt me meer iets voor de programmeur om op te letten. Van iedere taal moet je zulke dingen weten, je kan jezelf in C op tienduizend meer manieren in je voet schieten, dus dat vind ik weinig overtuigend. Bovendien verbetert de taal.
Ik ben zelf een groot voorstander van PHP. En wel om alle punten die .oisyn eerder noemde.
* PHP is snel genoeg. Ja leuk dat je met FastCGI en geoptimaliseerde C++ code snellere code kan maken. Dat boeit echter helemaal niet als je vervolgens naar een DB server of andere backend server gaat om gegevens op te halen. In mijn ervaring zijn PHP (mod_php) + Opcode cache (APC ofzo) zeker vergelijkbaar.oisyn schreef op dinsdag 26 augustus 2008 @ 12:59:
Kun je dat ook onderbouwen? Is het de turn-around time? Het gemis van een framework? Of gewoon omdat het momenteel nog vrij lastig is te gebruiken icm de gebruikelijke webservers? Of wellicht gewoon het feit dat het geen 'template parser' is (en dus een html document met C++ code erin, ipv C++ code dat html output)?
* PHP is veel productiever dan C++ (als het tenminste gaat om de frontend). Ik moet toegeven nooit met C# te hebben gewerkt. Ik heb ooit een blog in C++ gemaakt, nou wat een rampenplan zeg. In PHP zou ik dat 3x zo snel doen.
* Het gemis van frameworks voor C++ blijf ik ook onbegrijpelijk vinden. Nouja, misschien niet geheel onbegrijpelijk als je ziet dat er zo'n makkelijke taal is als PHP
Zoijar schreef op dinsdag 26 augustus 2008 @ 11:54:
Ik moet toegeven dat ik me de laatste jaren niet met web-development heb bezig gehouden (daarvoor een jaar of 3 professioneel met PHP), maar ik zie tegenwoordig weinig rede om geen C++ te gebruiken.
Met het verschil dat je de libraries bij PHP er standaard bij krijgt en iedereen ze kent. Jouw C++ oplossing is weer compleet anders dan de C++ oplossing van je buurman. Zie voorgaande argumenten om PHP te gebruiken. PHP is gewoon een prima template taal. C++ is daar niet direct geschikt voor.Ik heb weinig overtuigende argumenten gehoord tegen het gebruik van C++ voor web-development. Uiteraard heb je dan wat libraries nodig, net als je die met PHP gebruikt.
Maakt mij ook niet zoveel uit, zowel voor als nadelen tijdens ontwikkelen.Compilen versus scripten lijkt me ook geen enkel punt; je typed een keer make in en het draait.
Snelheid scheelt niet significant. PHP draait ook overal.Bovendien zou C++ theoretisch gewoon sneller moeten zijn omdat het niet geparsed wordt. Het is ook volledig platform onafhankelijk. En anders desnoods C#.
Ik snap niet dat er nog mensen zijn die C++ gebruiken voor de frontend. Gebruik het gewoon in de backend, waar het thuishoort.Ik snap niet waarom vandaag de dag mensen uberhaupt nog PHP gebruiken voor nieuwe projecten.
Jij wel ja. Hoeveel ervaring heb je met C++? Ik denk te weinig. Het blijft natuurlijk wel dat ervaring bij C++ belangrijker is dan bij PHP. Dwz, php kennis is sneller gesatureerd.T.T. schreef op vrijdag 05 september 2008 @ 18:07:
* PHP is veel productiever dan C++ (als het tenminste gaat om de frontend). Ik moet toegeven nooit met C# te hebben gewerkt. Ik heb ooit een blog in C++ gemaakt, nou wat een rampenplan zeg. In PHP zou ik dat 3x zo snel doen.
Er zijn zat frameworks voor C++. Ze zijn alleen niet onderdeel van de taal, omdat C++ ruim inzetbaar is, itt PHP dat voornamelijk voor 1 doel ontworpen is. Dat maakt PHP uiteraard geschikter om een webapp mee te maken. En minder geschikt om een game mee te maken. Maar ik geloof dat geschiktheid niet ter discussie stond hier in deze draad* Het gemis van frameworks voor C++ blijf ik ook onbegrijpelijk vinden. Nouja, misschien niet geheel onbegrijpelijk als je ziet dat er zo'n makkelijke taal is als PHP
[ Voor 10% gewijzigd door .oisyn op 05-09-2008 18:14 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik geef gelijk toe dat ik te weinig ervaring met C++ heb. Ik doelde echter op het argument dat jij ook geeft: PHP is makkelijker.oisyn schreef op vrijdag 05 september 2008 @ 18:13:
Jij wel ja. Hoeveel ervaring heb je met C++? Ik denk te weinig. Het blijft natuurlijk wel dat ervaring bij C++ belangrijker is dan bij PHP. Dwz, php kennis is sneller gesatureerd.
Dat is precies mijn punt. PHP is gespecialiseerd (voor 1 doel ontworpen) : frontend. C++ is een prima taal voor de backend, of waar je low-level code moet produceren. Natuurlijk kun je met C++ alles doen wat je met PHP ook kan. Het gaat er alleen om wat makkelijker is. Productiviteit voor frontend is gewoon veel hoger in PHP dan in C++. Maakt niet uit hoeveel ervaring je hebt in C++. En voor dat ene doel is PHP een prima taal (die allicht verbetert kan worden). Het is echter veel geschikter voor deze taak dan C++, zelfs met alle onvolkomenheden van PHP.Er zijn zat frameworks voor C++. Ze zijn alleen niet onderdeel van de taal, omdat C++ ruim inzetbaar is, itt PHP dat voornamelijk voor 1 doel ontworpen is.
[ Voor 8% gewijzigd door T.T. op 05-09-2008 18:20 ]
Je vergeet "te leren". Ik vind C++ niet moeilijker dan PHP. Sterker nog, ik vind PHP moeilijker omdat het op sommige punten onintuitief en clumsy is. Maar een doorgewinterde PHP'er kent die eigenaardigheden dan weer uit z'n hoofd.T.T. schreef op vrijdag 05 september 2008 @ 18:17:
[...]
Ik geef gelijk toe dat ik te weinig ervaring met C++ heb. Ik doelde echter op het argument dat jij ook geeft: PHP is makkelijker
En ik zeg dus dat dat onzin is, wat Zoijar ook al aangaf. Als we even aannemen dat je dezelfde API kunt gebruiken in C++ als in PHP heeft een doorgewinterde C++'er heeft met een frontend in C++ niet meer tijd nodig dan een doorgewinterde PHP'er. Het punt is alleen dat een doorgewinterde C++'er meer investering nodig heeft om dat punt te bereiken dan een doorgewinterde PHP'er.Productiviteit voor frontend is gewoon veel hoger in PHP dan in C++. Maakt niet uit hoeveel ervaring je hebt in C++.
Maar wat mensne al dan niet moeilijk vinden of waar ze productiever in zijn stond, zoals ik al zei, helemaal niet ter discussie in deze draad.
Het punt is dat je probeert PHP te verdedigen op argumenten die helemaal niet gegeven zijn
[ Voor 8% gewijzigd door .oisyn op 05-09-2008 18:25 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
En ik zeg dat dat onzin is.oisyn schreef op vrijdag 05 september 2008 @ 18:24:En ik zeg dus dat dat onzin is, wat Zoijar ook al aangaf. Als we even aannemen dat je dezelfde API kunt gebruiken in C++ als in PHP heeft een doorgewinterde C++'er heeft met een frontend in C++ niet meer tijd nodig dan een doorgewinterde PHP'er. Het punt is alleen dat een doorgewinterde C++'er meer investering nodig heeft om dat punt te bereiken dan een doorgewinterde PHP'er.
Tsja, wat precies het centrale thema in dit topic is, was vanaf het begin al niet duidelijk. Het begint met jouw opmerking dat PHP slecht isMaar wat mensne al dan niet moeilijk vinden of waar ze productiever in zijn stond, zoals ik al zei, helemaal niet ter discussie in deze draad.
Daar sluit ik me (nogmaals) bij aan.Dat PHP the right tool for the right job is wil nog niet zeggen dat het niet z'n tekortkomingen heeft.
Ja, dat krijg je met afgesplitste topics.T.T. schreef op vrijdag 05 september 2008 @ 18:32:
Tsja, wat precies het centrale thema in dit topic is, was vanaf het begin al niet duidelijk. Het begint met jouw opmerking dat PHP slecht is
Ik brand de taal PHP af, waar ik alle recht toe heb en zelfs de argumenten om dat de staven. Ik brand niet het doel van de taal af. Je schijnt de twee maar moeilijk uit elkaar te kunnen houden, maar het verschil is er toch echtHet blijkt echter dat het toch goed genoeg is. Je kunt daarom PHP niet afbranden op wat de onvolkomenheden.
Je zei eerder:
Denk je niet dat met een vergelijkbare maar beter ontworpen taal die al die genoemde punten in zich heeft je blijer zou zijn dan met PHP? Ik bedoel, het is niet inherent aan die punten dat PHP, zoals hier gesteld, "kut" isIk ben zelf een groot voorstander van PHP. En wel om alle punten die .oisyn eerder noemde.
[ Voor 20% gewijzigd door .oisyn op 05-09-2008 18:42 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik begrijp wat je bedoelt, maar de vraag is of het praktisch is om het verschil te maken. Ik ben het grotendeels met je eens qua argumenten dat PHP niet zo goed in elkaar is gezet..oisyn schreef op vrijdag 05 september 2008 @ 18:39:
Ik brand de taal PHP af, waar ik alle recht toe heb en zelfs de argumenten om dat de staven. Ik brand niet het doel van de taal af. Je schijnt de twee maar moeilijk uit elkaar te kunnen houden, maar het verschil is er toch echt
Haha per definitie is dat natuurlijk waar.Denk je niet dat met een vergelijkbare maar beter ontworpen taal die al die genoemde punten in zich heeft je blijer zou zijn dan met PHP? Ik bedoel, het is niet inherent aan die punten dat PHP, zoals hier gesteld, "kut" is
Wellicht is ons enige verschil dat jij zowel de taal als het gebruikk van PHP verwerpt (als ik het goed begrijp) omdat het onvolkomenheden heeft. Terwijl ik PHP gebruik omdat het nog steeds beter is dan de alternatieven (en dan met name CGI's in C++ yuk). Anderen zouden uit jouw argumentatie immers kunnen opmaken dat ze geen PHP moeten gebruiken, dat wil ik even rechtzetten (met de voetnoot dat er 'wat' rare dingen in de taal zitten)
[ Voor 9% gewijzigd door T.T. op 05-09-2008 18:56 ]
Een voorbeeld van wat voor krachtige dingen je met C++ zou kunnen doen, als je bijvoorbeeld een library gebruikt (hier Witty, niet dat dat het beste is ofzo, maar als indicatie dat je wel degelijk goed websites kan bouwen in C++)T.T. schreef op vrijdag 05 september 2008 @ 18:52:
(en dan met name CGI's in C++ yuk).
(hier bv http://www.webtoolkit.eu/wt#/examples/treelist )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
| /* * Copyright (C) 2006 Wim Dumon, Koen Deforche * * See the LICENSE file for terms of use. */ #include <Wt/WApplication> #include <Wt/WBreak> #include <Wt/WContainerWidget> #include <Wt/WLineEdit> #include <Wt/WPushButton> #include <Wt/WText> using namespace Wt; /* * A simple hello world application class which demonstrates how to react * to events, read input, and give feed-back. */ class HelloApplication : public WApplication { public: HelloApplication(const WEnvironment& env); private: WLineEdit *nameEdit_; WText *greeting_; void greet(); }; /* * The env argument contains information about the new session, and * the initial request. It must be passed to the WApplication * constructor so it is typically also an argument for your custom * application constructor. */ HelloApplication::HelloApplication(const WEnvironment& env) : WApplication(env) { setTitle("Hello world"); // application title root()->addWidget(new WText("Your name, please ? ")); // show some text nameEdit_ = new WLineEdit(root()); // allow text input nameEdit_->setFocus(); // give focus WPushButton *b = new WPushButton("Greet me.", root()); // create a button b->setMargin(5, WWidget::Left); // add 5 pixels margin root()->addWidget(new WBreak()); // insert a line break greeting_ = new WText(root()); // empty text /* * Connect signals with slots */ b->clicked.connect(SLOT(this, HelloApplication::greet)); nameEdit_->enterPressed.connect(SLOT(this, HelloApplication::greet)); } void HelloApplication::greet() { /* * Update the text, using text input into the nameEdit_ field. */ greeting_->setText("Hello there, " + nameEdit_->text()); } WApplication *createApplication(const WEnvironment& env) { /* * You could read information from the environment to decide whether * the user has permission to start a new application */ return new HelloApplication(env); } int main(int argc, char **argv) { /* * Your main method may set up some shared resources, but should then * start the server application (FastCGI or httpd) that starts listening * for requests, and handles all of the application life cycles. * * The last argument to WRun specifies the function that will instantiate * new application objects. That function is executed when a new user surfs * to the Wt application, and after the library has negotiated browser * support. The function should return a newly instantiated application * object. */ return WRun(argc, argv, &createApplication); } |
Misschien lijkt het omslachtig, maar vergeet niet dat je nu gewoon een volledige GUI kan programmeren; bijna alsof je gewoon aan Qt bezig bent. Verder heb je een hele veelzijdige standaard taal die compiled, en vrijwel elke denkbare library kan gebruiken.
Vergeet ook niet de extra mogelijkheden van een andere taal dan php.Zoijar schreef op zaterdag 06 september 2008 @ 11:08:
[...]
Een voorbeeld van wat voor krachtige dingen je met C++ zou kunnen doen, als je bijvoorbeeld een library gebruikt
[..]
Misschien lijkt het omslachtig, maar vergeet niet dat je nu gewoon een volledige GUI kan programmeren; bijna alsof je gewoon aan Qt bezig bent. Verder heb je een hele veelzijdige standaard taal die compiled, en vrijwel elke denkbare library kan gebruiken.
Jij wilt straks een volledige WYSIWYG-editor hebben in windows, je kan dezelfde librarys gebruiken als voor je website.
Als je een goede MVC scheiding hebt dan zijn je librarys in C++ bijna overal voor te gebruiken, php heeft een veel beperkter hergebruik...
Eh, is_int? Of mis ik je punt?ACM schreef op zaterdag 06 september 2008 @ 10:26:Overigens is .oisyn in de eerdere discussie nog een punt vergeten bij zijn 0 == 'blaat' bij php hetze
Want dit is toch wel een belangrijke reden waarom deze keuze raar is:
PHP:
1 2 3 4 5 $a = 'blaat'; $b = 0; if($a == $b){echo 'a == b';} // true if($a){ echo 'a == true';} // true if($b){ echo 'b == true';} // false
Het ergste hierbij is niet eens dat $a naar true evalueert in het tweede statement, maar dat je van $b eigenlijk niet zo eenvoudig kan controleren of het een integer is waarbij 0 ook een geldige waarde is. Kwa aangeboden mogelijkheden komt is_numeric in de buurt, maar een float is geen integer. En domweg casten naar int en kijken of er een integer is, is ook raar want een string is geen int.
Gelukkig is dit met name relevant bij het controleren van user-input en dat doe je doorgaans maar een maal in je script-executie, waardoor je er een regexp of iets in die geest op los kan laten, zonder dat het te duur wordt.
EDIT: Bedoel je misschien dat dit moeilijk te controleren is als $b een integer als string bevat? Dus $b = "3" bijvoorbeeld? Dan kun je namelijk ook kijken of er alleen numeriek karakters in staan, met ctype_digit. Als die true teruggeeft is het een integer, en kun je veilig naar dat type casten.
[ Voor 12% gewijzigd door Patriot op 06-09-2008 14:47 ]
{signature}
Aha, en daar loopt de discussie dus mank, want ik verwerp het gebruik van PHP helemaal nietT.T. schreef op vrijdag 05 september 2008 @ 18:52:
Wellicht is ons enige verschil dat jij zowel de taal als het gebruikk van PHP verwerpt (als ik het goed begrijp) omdat het onvolkomenheden heeft.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Volgens mij is een groot probleem met php'ers dat als ze horen dat de taal php niet deugt (in sommige opzichten) ze denken dat php als geheel aangevallen wordt. Dat is helemaal niet de discussie, en ik onderstreep daarom het volgende (niet écht want dan lijkt het een link....): PHP is een taal. PHP is een framework. Dat zijn twee verschillende dingen, die in de meeste talen goed gescheiden zijn, ook in de hoofden van de gebruikers ervan. Bij PHP blijkt dat lastig te zijn. Bij Java, C#, C++, Perl, enzovoorts heeft niemand er moeite mee.
Laat ik daarom voor iedere PHP'er de discussievraag iets anders formuleren:
Wat zou dan de reactie zijn?Hoi, ik ben drm, ik programmeer ongeveer 8 jaar met PHP, maar ik heb iets vreemds ontdekt.
Waarom hebben ze PHP niet zodanig ontworpen dat als ik 0 met "piet" vergelijk dat er "false" uitkomt? Voorbeeldcode: (ik roep deze pagina aan met "index.php?whatever=piet")
PHP:
1 2 3 4 5 <?php if ( $_GET['whatever'] == 0 ) { // ik kom hier terecht } ?>
Dit vind ik vreemd gedrag, want dat ken ik uit geen enkele andere taal, want ik vind PHP best wel lijken op C, Java en Perl en in geen van de drie genoemde talen werkt dit zo. Vinden jullie dit ook vreemd?
Oh ja, PHP rocks!
Voor de volledigheid: ik doe echt al 8 jaar php, en heb aardig wat quirks ontdekt in PHP, genoeg getuigen hier, denk ik zo
[ Voor 5% gewijzigd door drm op 06-09-2008 20:52 ]
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Als antwoord op de gestelde vraag in je "anders geformuleerde discussievraag": Ja, dat is inderdaad vreemd.drm schreef op zaterdag 06 september 2008 @ 20:50:
In reactie op de PHP discussie:
Volgens mij is een groot probleem met php'ers dat als ze horen dat de taal php niet deugt (in sommige opzichten) ze denken dat php als geheel aangevallen wordt. Dat is helemaal niet de discussie, en ik onderstreep daarom het volgende (niet écht want dan lijkt het een link....): PHP is een taal. PHP is een framework. Dat zijn twee verschillende dingen, die in de meeste talen goed gescheiden zijn, ook in de hoofden van de gebruikers ervan. Bij PHP blijkt dat lastig te zijn. Bij Java, C#, C++, Perl, enzovoorts heeft niemand er moeite mee.
Laat ik daarom voor iedere PHP'er de discussievraag iets anders formuleren:
[...]
Wat zou dan de reactie zijn?
edit:
Voor de volledigheid: ik doe echt al 8 jaar php, en heb aardig wat quirks ontdekt in PHP, genoeg getuigen hier, denk ik zo
Maar dat is volgens mij helemaal het punt ter discussie niet meer? Jij zégt wel dat PHP als geheel niet aangevallen wordt, maar zo komt dat gewoon niet over. Mensen spreken hun ongeloof uit over het gebruiken van PHP t.o.v. het gebruiken van C++. In mijn ogen impliceer je dan dat het slecht is om PHP te gebruiken.
Even afgezien van prototype's poisyn spinoff, is dat een beetje de samenvatting van de discussie. Volgens mij wordt PHP (als overkoepelend geheel) helemaal niet aangevallen, volgens mij wordt het wel heel erg verdedigd, maar vooral met de verkeerde argumenten.
Ik heb er ook een goede reden voor om dit te zeggen. Ik denk namelijk dat de kwaliteit van elk product bepaald wordt door de kritische noot van de gebruiker. Ook van PHP. Als je niet kritisch kan zijn op dat wat je gebruikt, kun je nooit bijdragen aan een verbetering in kwaliteit ervan. En ik heb er persoonlijk (omdat het nou eenmaal 50% van mijn CV uitmaakt) en zakelijk (omdat ik er dagelijks mee werk) baat bij dat PHP wel van verbetert.
Om dit even te koppelen aan prototype's verhaal: Ik denk dat een nieuwe taal helemaal niet helpt. Ik denk dat het veel interessanter is om de beslissers binnen Zend en de PHP dev community te overtuigen van het feit dat dat soort bugs (want het is unexpected behaviour, dat is volgens mij best wel een aardige omschrijving van een bug) eruit moeten.
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Dan zal het liggen aan de manier waarop het op mij overkomt. Ik heb het gevoel dat wanneer de taal PHP aangevallen wordt, je uiteindelijk ook de mensen die het gebruiken veroordeelt omdat ze een in jouw ogen "brakke" taal gebruiken.drm schreef op zaterdag 06 september 2008 @ 21:20:
Ik zie dat Zoijar aanraadt om toch ook eens C++ te overwegen als taal om websites in te bouwen. Ik zie .oisyn terechte kritiek leveren op de taal php. En ik zie een aantal mensen roepen dat het onterecht is dat php aangevallen wordt, want A) het is een groot succes en B) het is logisch want de taal is weaktyped en het staat trouwens ook in de documentatie.
Even afgezien van prototype's poisyn spinoff, is dat een beetje de samenvatting van de discussie. Volgens mij wordt PHP (als overkoepelend geheel) helemaal niet aangevallen, volgens mij wordt het wel heel erg verdedigd, maar vooral met de verkeerde argumenten.
Ik heb er ook een goede reden voor om dit te zeggen. Ik denk namelijk dat de kwaliteit van elk product bepaald wordt door de kritische noot van de gebruiker. Ook van PHP. Als je niet kritisch kan zijn op dat wat je gebruikt, kun je nooit bijdragen aan een verbetering in kwaliteit ervan. En ik heb er persoonlijk (omdat het nou eenmaal 50% van mijn CV uitmaakt) en zakelijk (omdat ik er dagelijks mee werk) baat bij dat PHP wel van verbetert.
Om dit even te koppelen aan prototype's verhaal: Ik denk dat een nieuwe taal helemaal niet helpt. Ik denk dat het veel interessanter is om de beslissers binnen Zend en de PHP dev community te overtuigen van het feit dat dat soort bugs (want het is unexpected behaviour, dat is volgens mij best wel een aardige omschrijving van een bug) eruit moeten.
Dat is misschien niet hoe die mensen dat bedoelen, maar zo komt het wel op mij over.
En dat hij dat niet kan bepalen is denk ik het gevolg van een brak ontwerp. Het hele idee van een closure zou JUIST nu moeten zijn dat hij eerst de symbol table zou raad moeten plegen om te concluderen dat hij zou moeten kunnen binden met de variabele uit de bovenliggende scope. Wat je nu doet met die 'use' keyword is in feite wat je doet in C/C++ met de extern keyword. Je doet nu linkerwerk... En om eerlijk te zijn denk ik dat het weer gedaan is omdat het makkelijker is.PrisonerOfPain schreef op zaterdag 06 september 2008 @ 22:54:
[...]
Het probleem is een beetje dat PHP in dit geval niet zelf kan bepalen of het een variabele is uit de bovenliggende scope, of dat 't een nieuw gedeclareerde variabele moet zijn.
Dat is geen probleem. Hetzelfde gaat op in javascript, maar daar werkt het ook. Je zou gewoon kunnen definieren dat alle variabelen waarnaar gerefereerd wordt in de closure en zichtbaar waren op de plek van de definitie van de closure geïmporteerd worden in de scope van de closure.PrisonerOfPain schreef op zaterdag 06 september 2008 @ 22:54:
[...]
Het probleem is een beetje dat PHP in dit geval niet zelf kan bepalen of het een variabele is uit de bovenliggende scope, of dat 't een nieuw gedeclareerde variabele moet zijn.
Wat PHP wel mist is een mogelijkheid om expliciet nieuwe variabelen te declareren. Dat was voorheen ook niet nodig, omdat variabelen in functies automatisch alleen binnen de functie leven, tenzij je ze als 'global' hebt gemarkeerd. Maar ze hebben al een 'var' keyword, die kunnen ze dan ook hergebruiken in closures om expliciet variabelen te declareren.
[ Voor 23% gewijzigd door .oisyn op 06-09-2008 23:12 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Dat is kletspraat (nofi). PHP is in de laatste 10 jaar meer geëvolueerd dan welke taal dan ook, dus zeggen dat php niet beinvloedbaar zou zijn is per definitie al niet waar omdat er toch iets of iemand is geweest die die veranderingen heeft bewerkstelligd. Dat het veel gebruikt wordt kan dus zeker niet de reden zijn dat het niet te veranderen is (het werd 5 jaar geleden ook veel gebruikt).prototype:
Je zult hier een hele lastige aan hebben. PHP wordt onderhand zoveel gebruikt dat het niet eenvoudig is om evolutie in de taal te bewerkstelligen zoals RayNbow al heeft aangekaart.
Dat is ook veel leuker dan websites bouwen in PHP, maar desondanks is PHP toch voor heel veel mensen de dagelijkse praktijk. En die dagelijkse praktijk verandert volgens mij niet met een nieuw taaltje (met een suffe naamAfgezien daarvan wil ik nogmaals onderstrepen dat werken aan de VM mij veel meer interesseert, (.....)
Maar waarom zou je niet zeggen dat PHP brak is? Het zegt toch niks over jouw keuze of jouw situatie om PHP toch te gebruiken? Ik vind PHP ook brak, ik verdien er wel mijn boterham mee. Wil ik dan ineens websites in C++ gaan bouwen? Nee, want het gaat in PHP prima. Maar dat neemt niet weg dat ik erg kritisch ben op PHP. Geldt voor MySQL overigens net zo goed.Patriot:
Dan zal het liggen aan de manier waarop het op mij overkomt. Ik heb het gevoel dat wanneer de taal PHP aangevallen wordt, je uiteindelijk ook de mensen die het gebruiken veroordeelt omdat ze een in jouw ogen "brakke" taal gebruiken.
Toughen upDat is misschien niet hoe die mensen dat bedoelen, maar zo komt het wel op mij over.
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Ik doe maar een wilde gok hoor, maar is dat niet omdat je je enigszins (al dan niet bewust) aangevallen voelt omdat mensen "jouw" taal afkraken? Want er staat toch echt nergens in de draad dat het gebruik van PHP afgeraden wordt. Kun je een specifieke passage tonen waarbij jij dat gevoel krijgt?Patriot schreef op zaterdag 06 september 2008 @ 21:49:
Dat is misschien niet hoe die mensen dat bedoelen, maar zo komt het wel op mij over.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
En daarmee zit je er dus naast. Zoals door diverse mensen al gezegd is er niemand hier die dat zegt of bedoelt. Dat jij het wel zo opvat ligt aan jou, niet aan de mensen die kritiek uiten op PHP. Ik vind het persoonlijk ook bevreemdend dat mensen kritiek op een programmeertaal persoonlijk opvatten, we hebben het hier toch niet over een religie?Patriot schreef op zaterdag 06 september 2008 @ 21:08:
Maar dat is volgens mij helemaal het punt ter discussie niet meer? Jij zégt wel dat PHP als geheel niet aangevallen wordt, maar zo komt dat gewoon niet over. Mensen spreken hun ongeloof uit over het gebruiken van PHP t.o.v. het gebruiken van C++. In mijn ogen impliceer je dan dat het slecht is om PHP te gebruiken.
Ik heb (kort) naar Ruby (on Rails) gekeken. Ik heb niet het idee dat Ruby een stuk beter is dan PHP, zeker niet na al de horror-stories rondom architecturen gebaseerd op Ruby (twitter bijvoorbeeld). Neemt niet weg dat mijn PHP wel door RoR best-practises beinvloed is. Programming by Convention bijvoorbeeld.prototype schreef op vrijdag 05 september 2008 @ 23:08:
Mag ik vragen welke alternatieven je hebt gebruikt? Een taal als ruby of python vind ik namelijk nog steeds shitloads beter in elkaar steken dan PHP. Niet alleen van een technisch implementatie standpunt (zoals ik die al hier heb genoemd in dit topic) maar ook vanuit een design standpunt (zoals we hier ook al hebben aangekaart).
Python vind ik ook interessant, helaas nog niet genoeg aandacht aan kunnen besteden. Dat ga ik in de toekomst echter zeker wel doen.
Ik moet wellicht ook vertellen dat binnen het bedrijf waar ik werk, het niet zo eenvoudig is om andere talen dan C/Java/C++/PHP te gebruiken. Na een lange veldslag hebben we eindelijk Erlang erdoor gekregen, omdat het een stuk beter is dan C++ (voor het specifieke doel waar wij het voor gebruiken). Alleen het argument dat Python beter in elkaar steekt als taal, gaat mijn bazen niet overtuigen.
Een applicatie als Twitter is ook zwaar IO bound he... geen enkele webframework zal je daarvoor behoeden als je je database niet goed geschaald hebt aangezien daar het grotendeel plaatsvindt van een request (en 9 van de 10 requests zijn restful controller API requests). Bovendien, zoiets dat zwaar van message passing, distribution en fault tolerance afhankelijk is, is Erlang geschikter voor. Dat was niet echt rocket science om dat te achterhalen he aangezien dat ook z'n oorsprong voor dit soort doelen vindt binnen de telecommunicatie. Het resultaat is dat de backend vervangen is grotendeels door ejabber (erlang powered), waar de frontend nog gewoon mooi via Rails werkt. De database hebben ze ook flink getunedT.T. schreef op zondag 07 september 2008 @ 04:51:
[...]
[small]Ik heb (kort) naar Ruby (on Rails) gekeken. Ik heb niet het idee dat Ruby een stuk beter is dan PHP, zeker niet na al de horror-stories rondom architecturen gebaseerd op Ruby (twitter bijvoorbeeld). Neemt niet weg dat mijn PHP wel door RoR best-practises beinvloed is. Programming by Convention bijvoorbeeld.
Je moet erlang dan ook niet voor alles gebruiken. Again, voor concurrent distributed problemen oplossen is het awesome, maar probeer eens reguliere expressies toe te passen in Erlang mbv de bestaande libs. a) performed super slecht omdat hij niet compiled naar een NFA, b) is bijna onleesbaar. Zoek voor de lol maar eens naar Tim Bray's (van sun microsystems) wide finder project over beautiful code. De kunst, zoals ze bij twitter ook achter zijn gekomen, is de balans zien te vinden van right tool for the right job gebruiken. Python zou je perfect met erlang kunnen gebruiken middels ports als je het aan een frontend zou willen koppelen middels django b.v. Again, right tool for the right job. PHP is enkel onder economische omstandigheden nog de right tool for the job imho, aangezien het zo widespread in use en verkrijgbaarheid is. Alhoewel, dat is misschien iets te kort door de bocht. Door het 'share nothing' principe van PHP, krijg je eigenlijk hetzelfde idee als in Erlang m.b.t. deze policy. Daardoor zou het mogelijk eenvoudiger kunnen schalen dan gebruik van meerdere applicationservers.Ik moet wellicht ook vertellen dat binnen het bedrijf waar ik werk, het niet zo eenvoudig is om andere talen dan C/Java/C++/PHP te gebruiken. Na een lange veldslag hebben we eindelijk Erlang erdoor gekregen, omdat het een stuk beter is dan C++ (voor het specifieke doel waar wij het voor gebruiken). Alleen het argument dat Python beter in elkaar steekt als taal, gaat mijn bazen niet overtuigen.
[ Voor 7% gewijzigd door prototype op 07-09-2008 13:29 ]
Mocht ik nog posts gemist hebben of een post teveel hebben verplaatst DM me dan even. De posts waarin flink aan beide discussie werd bijgedragen hielpen niet echt
[ Voor 15% gewijzigd door Creepy op 07-09-2008 17:48 ]
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Het lijkt me dat === minder overhead zou moeten hebben dan ==, omdat bij de === direct gekeken kan worden of er naar hetzelfde object wordt verwezen. Bij == krijg je een soort equals idee, en worden er naar alle waarschijnlijkheid meer operaties uitgevoerd. 'k zal 't anders zo wel even testen.Victor schreef op zondag 07 september 2008 @ 19:45:
De === operator is al meerdere malen naar voren gekomen als "oplossing" voor de comparison problemen die kunnen optreden in PHP. Ik vroeg me af of het gebruik van de === operator nog performance overhead heeft boven de == operator. Iemand die hier meer over weet?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
{signature}
Met ^, de keuze tussen == of === zou afhankelijk moeten zijn van je logica (wil je gewoon twee variabelen vergelijken of wil je ook checken op type), niet van performance.Voutloos schreef op maandag 08 september 2008 @ 08:07:
Tenzij het in een loopje staat met extreem veel iteraties, is een dergelijke vraag zonde van je tijd, want micro optimalisatie. En als je een gruwelijk loopje begint, loont het ook wel de moeite om je datastructuur en data types voor dat punt al op orde te hebben.
Ik heb verder weinig toe te voegen op dit topic, met uitzondering van dat een groot deel van de problemen met PHP meer liggen in de standaard library (mbt veel functies die hetzelfde doen, niet-consistente naamgeving / functionaliteit, etc), en minder in de taal zelf. Dat "piet" == 0 is wel met de taal zelf, maar als je piet al met 0 vergelijkt, zit er volgens mij een fout in je denkproces - de enige strings die je, mijns insziens, met een nummer mogelijk zou kunnen vergelijken is user-input (formulieren of get parameters), en daar zou je sowieso al handmatig op type moeten controleren voordat je er ook maar iets mee doet.
Een kleine opmerking: user input is bij PHP (webbased) altijd van het type string (of array met strings)YopY schreef op maandag 08 september 2008 @ 21:26:
Dat "piet" == 0 is wel met de taal zelf, maar als je piet al met 0 vergelijkt, zit er volgens mij een fout in je denkproces - de enige strings die je, mijns insziens, met een nummer mogelijk zou kunnen vergelijken is user-input (formulieren of get parameters), en daar zou je sowieso al handmatig op type moeten controleren voordat je er ook maar iets mee doet.

Dat is toch ook zijn punt? Op het moment dat je een string met een integer gaat veregelijken doe je iets fout, je had voor die tijd die string al moeten casten (of bwvs een waarschuwing geven als hij niet gecast kan worden).Erkens schreef op maandag 08 september 2008 @ 22:20:
[...]
Een kleine opmerking: user input is bij PHP (webbased) altijd van het type string (of array met strings)Je zal het dus altijd moeten casten naar een ander type als je dat nodig. En eventueel kan je controleren of de string ook een getal kan vormen (is_number oid).
Ja, en ik bevestig dat toch?Patriot schreef op maandag 08 september 2008 @ 22:32:
[...]
Dat is toch ook zijn punt? Op het moment dat je een string met een integer gaat veregelijken doe je iets fout, je had voor die tijd die string al moeten casten (of bwvs een waarschuwing geven als hij niet gecast kan worden).