[PHP] Welke versie PHP beginnen?

Pagina: 1
Acties:
  • 265 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • -TheNose-
  • Registratie: Februari 2002
  • Laatst online: 18-09 10:24
Misschien een rare vraag, maar ik wil PHP gaan leren. Nu heb ik hier een boek liggen: PHP Bible revised and updated, coverage of PHP 4.2.
Nu weet ik dat PHP 5 uit is...kan ik gewoon dit boek gebruiken? Of is PHP 5 weer zo anders dat ik me straks weer allemaal dingen moet gaan afleren? :P

Acties:
  • 0 Henk 'm!

Verwijderd

4 is 4 en 5 is 5 ;)

Als je een boek hebt liggen van 4.2 dan kan je aan een 4 versie werken. PHP5 is meer OO, en werkt net weer iets anders, dus ik denk niet dat het gaat werken.
Ik kan eigenlijk alleen maar PHP4, 5 moet ik nog aan beginnen, dus weet de exacte feiten niet. Maar volgends mij heb je er niets aan
Zie -MNe- ;)

[ Voor 6% gewijzigd door Verwijderd op 19-08-2005 22:47 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als je een boek over PHP4 leest, sla dan het stukje over references en classes over. Verder is er voor zover mij bekend is niets fundamenteels veranderd in PHP5.

[ Voor 9% gewijzigd door NMe op 19-08-2005 22:44 ]

'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.


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Het staat hier redelijk compleet geloof ik. http://www.zend.com/php5/andi-book-excerpt.php

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • -TheNose-
  • Registratie: Februari 2002
  • Laatst online: 18-09 10:24
-NMe- schreef op vrijdag 19 augustus 2005 @ 22:43:
Als je een boek over PHP4 leest, sla dan het stukje over references en classes over. Verder is er voor zover mij bekend is niets fundamenteels veranderd in PHP5.
Ik heb hier ook een php ebook liggen php 5 unleashed, maar een gewoon boek leest/leert gewoon lekkerder vind ik... (en boek was best duur en ben een jaar geleden maar tot de helft gekomen :( )
Dus ik kan dat boek wel gewoon gebruiken en dan references en classes overslaan?

Ik hoor ook dat php 5 nog maar heel weinig gebruikt wordt, heeft dat een speciale reden?

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
je kunt niet echt vlekkeloos over van php4 naar php5.
Je moet je codes allemaal doortesten omdat er varanderingen zijn gemaakt in onder andere afhandeling van classes.
Voor PHP5 is Zend1 compalibility soms ook nog wel gewenst (en mogelijk).

[ Voor 5% gewijzigd door SWINX op 19-08-2005 22:59 . Reden: typo ]

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

-CKY2K- schreef op vrijdag 19 augustus 2005 @ 22:55:
Ik heb hier ook een php ebook liggen php 5 unleashed, maar een gewoon boek leest/leert gewoon lekkerder vind ik... (en boek was best duur en ben een jaar geleden maar tot de helft gekomen :( )
Dus ik kan dat boek wel gewoon gebruiken en dan references en classes overslaan?
Als je PHP5 wil leren dan kun je inderdaad gewoon dat boek over PHP4 doorlezen, en dan het stuk over references en classes overslaan. Dan moet je dat onderdeel wel in dat PHP5 boek lezen, anders mis je een stuk basiskennis. ;)
Ik hoor ook dat php 5 nog maar heel weinig gebruikt wordt, heeft dat een speciale reden?
Omdat veel hosts nog niet overgestapt zijn, aangezien niet gegarandeerd wordt dat PHP5 100% backwards compatible is. Zelf gebruik ik ook nog PHP4, omdat ik er daarbij zeker van kan zijn dat het overal werkt. (Of in elk geval zekerder dan ik zou zijn al ik PHP5 zou gebruiken. :P)

'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.


Acties:
  • 0 Henk 'm!

  • -TheNose-
  • Registratie: Februari 2002
  • Laatst online: 18-09 10:24
-NMe- schreef op vrijdag 19 augustus 2005 @ 23:05:
[...]

Als je PHP5 wil leren dan kun je inderdaad gewoon dat boek over PHP4 doorlezen, en dan het stuk over references en classes overslaan. Dan moet je dat onderdeel wel in dat PHP5 boek lezen, anders mis je een stuk basiskennis. ;)


[...]

Omdat veel hosts nog niet overgestapt zijn, aangezien niet gegarandeerd wordt dat PHP5 100% backwards compatible is. Zelf gebruik ik ook nog PHP4, omdat ik er daarbij zeker van kan zijn dat het overal werkt. (Of in elk geval zekerder dan ik zou zijn al ik PHP5 zou gebruiken. :P)
Maar als heel veel mensen nog niet overgestapt zijn op PHP 5 is het dan als newbe wel beter om dat te leren dan? Of beter gewoon bij 4 blijven 8)7

Acties:
  • 0 Henk 'm!

  • Luxx
  • Registratie: Februari 2001
  • Laatst online: 20-05 12:47

Luxx

Hijs nu het zeil gezwind...

Voor kleine scripts, die je sowieso niet zo snel met OO maakt, merk je eigenlijk nauwelijks een verschil, dus ik zou gewoon voor PHP5, met het PHP4 boek gaan. Kijk als je een keer een vreemd resultaat krijgt een keer op www.php.net daar staat soms wel wat verschillen, maar fundamenteel is er weinig anders.

HYEHEHEHEEHHEEHee, hier had iets zinnigs kunnen staan, maar dat is niet.


Acties:
  • 0 Henk 'm!

Verwijderd

In PHP kan OOP beter en je kunt constructors en deconstructors (functies) gebruiken...

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
ook in PHP4 kan je constructor (genoemd naar je classname) en destructor (register_shutdown_function) gebruiken.

In PHP5 willen ze hier echter __construct, __destruct, __wakup en __sleep voor gaan gebruiken enzo

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

php5 natuurlijk, snap niet dat mensen nog steeds aan php4 willen denken.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • -TheNose-
  • Registratie: Februari 2002
  • Laatst online: 18-09 10:24
Wat ik dus even snel gelezen heb is dat PHP 5 anders met classes omgaat...ik ga wel gewoon lekker met mijn php 4.2 boek aan de gang en het stuk over classes en references lees ik wel in php 5 dan moet het goedkomen! :P

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

aex351 schreef op vrijdag 19 augustus 2005 @ 23:47:
php5 natuurlijk, snap niet dat mensen nog steeds aan php4 willen denken.
Heel leuk dat je dat onderbouwt. ;)

Feit is dat de meeste hosters nog steeds achterblijven in PHP4, en je dus wel in PHP5 kan gaan programmeren, maar als je dan in aanraking komt met zo'n host, dan ben je wel mooi het haasje. Dan kun je al je code weer gaan aanpassen. Ik adviseer mensen die zelf niet hosten altijd om ofwel een host te zoeken die modern genoeg is om PHP5 te ondersteunen, ofwel om gewoon bij PHP4 te blijven. En zeg nou zelf, zoveel van die nieuwe features van PHP5 zijn nou ook weer niet essentiëel. Het enige dat werkelijk handig kan zijn in elke webapplicatie is het bestaan van exceptions, maar de rest mis ik echt niet. Voor de gemiddelde kleine webapp is OOP in PHP ook overdreven IMO. Vooral omdat de implementatie van OOP ook in PHP5 nog steeds niet helemaal perfect is, al is het een hele verbetering tegenover die van PHP4.

'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.


Acties:
  • 0 Henk 'm!

Verwijderd

aex351 schreef op vrijdag 19 augustus 2005 @ 23:47:
php5 natuurlijk, snap niet dat mensen nog steeds aan php4 willen denken.
Er is markt voor beide.

Als jij de opdracht krijgt een website/applicatie te bouwen welke elders gehost zal gaan worden, is PHP4 een verstandige keuze, daar nog veel hosters php4 draaien.

Daarnaast, zoals al veel aangegeven, zo groot is het verschil nu ook weer niet. De basis van het PHP programmeren is prima te leren met PHP4.

Als je een goed PHP4 boek hebt liggen (en dat heb je, zo te horen) en wilt beginnen met de taal, zie ik geen enkele redenen waarom je persé 5 moet gebruiken.

Of je pakt wel PHP5, maar gaat met het PHP4 boek aan de slag. Je komt de verschillen dan vanzelf tegen (of niet, in welk geval ze ook niet belangrijk waren). Vergeet ook www.php.net niet.

[ Voor 13% gewijzigd door Verwijderd op 19-08-2005 23:59 ]


Acties:
  • 0 Henk 'm!

  • -TheNose-
  • Registratie: Februari 2002
  • Laatst online: 18-09 10:24
Verwijderd schreef op vrijdag 19 augustus 2005 @ 23:57:
[...]


Er is markt voor beide.

Als jij de opdracht krijgt een website/applicatie te bouwen welke elders gehost zal gaan worden, is PHP4 een verstandige keuze, daar nog veel hosters php4 draaien.

Daarnaast, zoals al veel aangegeven, zo groot is het verschil nu ook weer niet. De basis van het PHP programmeren is prima te leren met PHP4.

Als je een goed PHP4 boek hebt liggen (en dat heb je, zo te horen) en wilt beginnen met de taal, zie ik geen enkele redenen waarom je persé 5 moet gebruiken.
Ik ben overtuigd! Ik ga lekker met mijn boek aan de gang, ook op php.net staat dat de verschillen niet zo heel groot zijn en dat daardoor migratie van 4 --> 5 vaak ook best simpel is...met name het object model is op de schop gegaan, maar goed het verschil is niet schokkend en ik ben maar newbe dus grote applicaties zal ik niet zo snel gaan schrijven :P

Bedankt voor de tips mensen! Ik ga mijn boek en bed in duiken... :P

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

-NMe- schreef op vrijdag 19 augustus 2005 @ 23:54:
[...]

Heel leuk dat je dat onderbouwt. ;)

Feit is dat de meeste hosters nog steeds achterblijven in PHP4, en je dus wel in PHP5 kan gaan programmeren, maar als je dan in aanraking komt met zo'n host, dan ben je wel mooi het haasje. Dan kun je al je code weer gaan aanpassen. Ik adviseer mensen die zelf niet hosten altijd om ofwel een host te zoeken die modern genoeg is om PHP5 te ondersteunen, ofwel om gewoon bij PHP4 te blijven. En zeg nou zelf, zoveel van die nieuwe features van PHP5 zijn nou ook weer niet essentiëel. Het enige dat werkelijk handig kan zijn in elke webapplicatie is het bestaan van exceptions, maar de rest mis ik echt niet. Voor de gemiddelde kleine webapp is OOP in PHP ook overdreven IMO. Vooral omdat de implementatie van OOP ook in PHP5 nog steeds niet helemaal perfect is, al is het een hele verbetering tegenover die van PHP4.
Het is gewoon vervelend dat je niet op een makkelijke manier php4 en php5 kan draaien onder apache.

Als .php gewoon door php4 gedaan werd en .php5 door php5, dan zouden er geen problemen op aarde meer zijn :+

Nu is het zo'n gedoe, want als hoster kan je ook niet zo even al je klanten op php5 overgooien, dan gaat er een hoop sneuvelen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

eamelink schreef op zaterdag 20 augustus 2005 @ 00:04:
Het is gewoon vervelend dat je niet op een makkelijke manier php4 en php5 kan draaien onder apache.

Als .php gewoon door php4 gedaan werd en .php5 door php5, dan zouden er geen problemen op aarde meer zijn :+

Nu is het zo'n gedoe, want als hoster kan je ook niet zo even al je klanten op php5 overgooien, dan gaat er een hoop sneuvelen.
Eh, dat is gewoon mogelijk hoor. Moet je gewoon zowel PHP4 als PHP5 installeren, en vervolgens naast de vermelding dat .php door PHP4 geopend moet worden, een vermelding opnemen voor .php5 dat door PHP5 geparsed moet worden. Ik heb het zelf nooit gedaan, maar het schijnt nog geen 5 minuten werk te zijn. ;)

'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.


Acties:
  • 0 Henk 'm!

Verwijderd

Gewoon zorgen dat je niet gebruik maakt van PHP4 ondersteunde bugs zoals $this proberen toe te wijzen (hierdoor werken een aantal bekende PHP-projecten niet in PHP 5). Verder is het volgens mij allemaal backwards-compatible.

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Ik zou gewoon php5 leren omdat het nieuwer is. php4 is verleden tijd, alhoewel sommige hosters nog onder een steen leven en denken dat php5 evil is php4 blijven gebruiken.

Zelf heb ik de problemen per toeval vandaag ook ondervonden dat mijn php5 applicatie naar php4 geconverteerd moest worden. ( PHP 5 -> 4 Probleem (mysql) )

Je kan daarbij wel problemen ondervinden, maar die zijn klein. In mijn geval mysql admin opgestart, use old passwords aangevinkt. En dan even me wachtwoord opnieuw intikken en klaar is kees :) . Plus nog wat Public / private / protected functies in Classes massaal (zoek + vervang) strippen en weghalen ;)

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je kan wel een sneer tikken naar de hosters, maar denk je hun situatie eens in. Mocht een klant slechte software hebben, dan krijgt de hoster het op zijn bord als die software na een upgrade niet meer werkt. Dat risico zou ik ook niet willen lopen zonder uitgebreide tests. Sowieso is PHP4 nog steeds supported en komen er nog steeds nieuwe 4.x versies uit, en zolang dat voortduurt, zie ik het gros van de hosters nog niet overstappen.

'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.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

-NMe- schreef op zaterdag 20 augustus 2005 @ 00:33:
Je kan wel een sneer tikken naar de hosters, maar denk je hun situatie eens in. Mocht een klant slechte software hebben, dan krijgt de hoster het op zijn bord als die software na een upgrade niet meer werkt. Dat risico zou ik ook niet willen lopen zonder uitgebreide tests. Sowieso is PHP4 nog steeds supported en komen er nog steeds nieuwe 4.x versies uit, en zolang dat voortduurt, zie ik het gros van de hosters nog niet overstappen.
Ach je kan makkelijk 2 php versies naast elkaar draaien. PHP5.1 staat al voor de deur. Ik denk persoonlijk dat die webhoster veelal in hun eigen wereldje leven of er gewoon geen zin in hebben om moeite te doen voor een upgrade.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
-NMe- schreef op zaterdag 20 augustus 2005 @ 00:09:
[...]

Eh, dat is gewoon mogelijk hoor. Moet je gewoon zowel PHP4 als PHP5 installeren, en vervolgens naast de vermelding dat .php door PHP4 geopend moet worden, een vermelding opnemen voor .php5 dat door PHP5 geparsed moet worden. Ik heb het zelf nooit gedaan, maar het schijnt nog geen 5 minuten werk te zijn. ;)
Echt? Ik hoor anders. Bij mijn weten moet een van beide dan onder CGI draaien in plaats van als Apache module en dat heeft toch wat gevolgen - diverse software gebruikt nl. mogelijkheden specifiek voor het gebruik als module.

Hosters zijn misschien wat lui op dit vlak, maar de PHP community ook. Waarom is er geen duidelijke tutorial over hoe dit naast elkaar draaien aan te pakken? Van 3 -> 4 was die er wel, maar van 4 -> 5 lijkt het niet officieel ondersteunt te worden, terwijl het voor een vloeiende overstap toch wel heel belangrijk is.

Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
aex351, de hosters kunnen wel zin hebben in upgraden, maar als hun klanten geen zin hebben om hun scripts "te upgraden" dan hebben ze weinig keus, nietwaar? Ik denk niet dat die hosters in hun eigen wereld leven, maar de klant. Uiteindelijk heeft het allemaal met geld (en tijd) te maken. Vooral het testen (en eventueel debuggen) kan een kostbare zaak worden.

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Birdie schreef op zaterdag 20 augustus 2005 @ 00:56:
Echt? Ik hoor anders. Bij mijn weten moet een van beide dan onder CGI draaien in plaats van als Apache module en dat heeft toch wat gevolgen - diverse software gebruikt nl. mogelijkheden specifiek voor het gebruik als module.
Daar heb je gelijk in, maar minder optimale support voor PHP5 (omdat het onder CGI draait) lijkt me nog altijd beter dan géén support voor PHP5.
Hosters zijn misschien wat lui op dit vlak, maar de PHP community ook. Waarom is er geen duidelijke tutorial over hoe dit naast elkaar draaien aan te pakken? Van 3 -> 4 was die er wel, maar van 4 -> 5 lijkt het niet officieel ondersteunt te worden, terwijl het voor een vloeiende overstap toch wel heel belangrijk is.
Waarom zou de manier om PHP4 en PHP5 naast elkaar te draaien anders zijn dan de manier waarop men vroeger PHP3 en PHP4 naast elkaar draaide? Dat verhaal is bij mijn weten niet veranderd, je hebt dezelfde regeltjes nodig in httpd.conf.

'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.


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

@TS: het lijkt mij, vooral met oog op de toekomst ook, dat je je verdiept in PHP5. Nu is de taal op veel puntjes misschien niet perfect c.q. streng/conform genoeg -dat de taal volgens mij ook zo toegankelijk maakt en populair- het zorgt er wel voor dat de taak gedaan wordt. Goed programmeren, ach, de functionaliteit die een taal biedt helpt tot op zekere hoogte; de persoon die de code levert heeft er meer over te zeggen ;)
Wat betreft je aankoop van een PHP4 boek, PHP5 verschilt hem het meest in classen en accesibility modifiers (waar in PHP4 altijd public uitgegaan wordt). Voor de rest is gewoon dezelfde taal ;)
Dit gedeelte kun je dan ook beter niet lezen zoals al eerder is gezegd, om het fout leren te voorkomen :)

Acties:
  • 0 Henk 'm!

  • -TheNose-
  • Registratie: Februari 2002
  • Laatst online: 18-09 10:24
prototype schreef op zaterdag 20 augustus 2005 @ 04:52:
@TS: het lijkt mij, vooral met oog op de toekomst ook, dat je je verdiept in PHP5. Nu is de taal op veel puntjes misschien niet perfect c.q. streng/conform genoeg -dat de taal volgens mij ook zo toegankelijk maakt en populair- het zorgt er wel voor dat de taak gedaan wordt. Goed programmeren, ach, de functionaliteit die een taal biedt helpt tot op zekere hoogte; de persoon die de code levert heeft er meer over te zeggen ;)
Wat betreft je aankoop van een PHP4 boek, PHP5 verschilt hem het meest in classen en accesibility modifiers (waar in PHP4 altijd public uitgegaan wordt). Voor de rest is gewoon dezelfde taal ;)
Dit gedeelte kun je dan ook beter niet lezen zoals al eerder is gezegd, om het fout leren te voorkomen :)
Thx, ga ik doen! :)

Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
-NMe- schreef op zaterdag 20 augustus 2005 @ 01:46:
Daar heb je gelijk in, maar minder optimale support voor PHP5 (omdat het onder CGI draait) lijkt me nog altijd beter dan géén support voor PHP5.
Hmm.. ja, waarschijnlijk wel ja. Ik moet zeggen dat ik van die verschillen te weinig af weet om te kunnen oordelen of het a) echt een praktische beperking is of wel mee valt en b) erg veel impact heeft op de server (d.w.z. is CGI veel langzamer of niet?)
-NMe- schreef op zaterdag 20 augustus 2005 @ 01:46:
Waarom zou de manier om PHP4 en PHP5 naast elkaar te draaien anders zijn dan de manier waarop men vroeger PHP3 en PHP4 naast elkaar draaide? Dat verhaal is bij mijn weten niet veranderd, je hebt dezelfde regeltjes nodig in httpd.conf.
Goed mogelijk dat deze wijze toen ook al werkte, maar dat is niet de manier die PHP.net in zijn manual aangeeft:
Running PHP 3 and PHP 4 concurrently
Recent operating systems provide the ability to perform versioning and scoping. This features make it possible to let PHP 3 and PHP 4 run as concurrent modules in one Apache server.
Dat is bij 4 -> 5 kennelijk niet mogelijk. Dus zou het zéér wenselijk zijn voor de PHP-crew te documenteren hoe het toch (min of meer) kan en bijvoorbeeld wat mensen van CPanel daarin te begeleiden..

Zoals hierboven al gezegd: op een productieserver is de knop ineens omgooien simpelweg geen optie. Gevolg: er gebeurt nu maar helemaal niets, helaas :( Conclusie: dat zou van "PHP zijde" zo langzamerhand eens vlotgetrokken moeten worden. :)

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Bij mijn hosting provider draaien PHP4 en PHP5 simultaan onder FastCGI. De bestandsextensie is voor beiden gewoon .php. Rewrite mappings zorgen vervolgens door welke script-engine het behandeld wordt. De globale mapping kun je gewoon via je accountbeheer instellen, en als je ze belt of mailt willen ze ook nog wel aparte mappings voor subdomeinen en/of mappen aanmaken...

Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij zitten jullie geheel de verkeerde boom op te blaffen :P..

We hebben het hier niet over een bedrijf die zich afvraagt welke versie van PHP te gebruiken voor een nieuw project. We hebben het hier over iemand die PHP wil leren, en toevallig al een goed PHP 4 boek heeft liggen.

Acties:
  • 0 Henk 'm!

  • yade
  • Registratie: Mei 2002
  • Laatst online: 16-07 13:47
Mijn ervaring is: de meeste code die je volgens PHP4 standaarden schrijft zal ook onder PHP5 werken.

Wil je gewoon een site bouwen, dan kan dat prima met PHP4 taalconstructies.

Wil je echter een (groot) framework opzetten, dan zou ik PHP5 overwegen.

Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Dat boek dat je al had liggen is een uistekend boek om PHP te leren. Zelf heb ik die met MySQL gelezen.

Ik raad je eigenlijk aan om beide te leren. Ha! Nu ben ik zeker lekker de eerste die dat zegt!

Waarom? Nou, je zult straks nog steeds veel te maken krijgen met PHP4 scripts, dan is het toch wel héél erg handig als je deze ook begrijpt. Laat staan om ze alleen al bijv. te poorten naar PHP5.
Verder is OO heel erg leuk, maar als je er nog nooit kaas van hebt gegeten zul je zeker niet meteen het voordeel er van inzien en juist gebruiken. De uitleg over OOP is namelijk vrij summier in zulk soort boeken.

Ik heb heel erg lang met PHP4 gewerkt en toen ik Java leerder bij mijn opleiding kon ik pas werkelijk OOP waarderen. Nu doe ik dan ook niets liever in PHP5. En PHP5 geen voordelen? Het is sowieso sneller door de Zend Engine 2, daarbij zijn de nieuwe OOP features zeker wel bruikbaar: werkelijke data hiding en geen lelijke underscore prefixes meer nodig. Abstracte klassen en interfaces zijn heel erg prettig. En als je even van de Reflection API hebt gesnoept dan ben je hier ook heel blij mee. Verder zijn Iterators ook een welkome nieuwe feature en natuurlijk ook excepties. Dan heb ik het nog niet gehad over webservices en XML + XSLT. Vergeet ik bijna nog de nieuwe MySQLi extensie!

Een webontwikkelaar die deze functies ook zinvol gebruikt kán niet meer zonder de Gam... euh, PHP5. :) Voor mensen die ze niet gebruiken, is PHP4 zeker nog wel voldoende.

Daarom zul je er zeker niet arm van worden als je PHP4 én PHP5 beheerst. Sterker nog, het zal je zelf enorm helpen en anders zou je PHP4 toch wel onder de knie krijgen (aldan niet met wat meer moeite) omdat er toch nog veel naar verwezen zal worden.

Hosting? Maak je daar maar niet druk over. Oké de el-cheapo webhoster zal niet snel PHP5 aanbieden maar degelijke hosters die het geld en de capaciteit hebben om een aparte PHP5 server te hosten, of slim genoeg zijn om PHP4 en PHP5 langs elkaar te draaien in CGI modus (hier komt nogal wat configureerwerk bij kijken i.v.m. file permissies) kun je zeker wel vinden. Met een simpele Google powered zoektocht kom je dan ook snel uit bij bijvoorbeeld webstekker.nl, helderhosting.nl of pcextreme.nl. Ik ben overigens een onafhankelijke webontwikkelaar dus zie dit a.u.b. niet als spam maar als indicatie dat er zeker wel hosting te vinden is. ;)

Veel leerplezier. ;)

Acties:
  • 0 Henk 'm!

  • Ricvdp
  • Registratie: Juni 2005
  • Laatst online: 19-09 17:21
-NMe- schreef op vrijdag 19 augustus 2005 @ 22:43:
Als je een boek over PHP4 leest, sla dan het stukje over references en classes over. Verder is er voor zover mij bekend is niets fundamenteels veranderd in PHP5.
Kun je dat even onderbouwen? Classes overslaan zou misschien kunnen (alleen omdat je method access moet instellen? Toch wel een beetje vaag om daarom over te slaan..). Maar references zijn hetzelfde in PHP5, behalve dat als je een class initialiseerd, de class by reference wordt aangemaakt. Oftewel, bij een class doe je in php4:
PHP:
1
2
3
4
<?php
$class = new Class(); //normaal
$class2 =& new Class(); // by reference
?>


In php5 doe je:
PHP:
1
2
3
<?php
$class = new Class(); // by reference
?>


Dus nogmaals, onderbouwing graag..

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Ricvdp schreef op zaterdag 20 augustus 2005 @ 22:37:
[...]

Kun je dat even onderbouwen? Classes overslaan zou misschien kunnen (alleen omdat je method access moet instellen? Toch wel een beetje vaag om daarom over te slaan..). Maar references zijn hetzelfde in PHP5, behalve dat als je een class initialiseerd, de class by reference wordt aangemaakt. Oftewel, bij een class doe je in php4:
PHP:
1
2
3
4
<?php
$class = new Class(); //normaal
$class2 =& new Class(); // by reference
?>


In php5 doe je:
PHP:
1
2
3
<?php
$class = new Class(); // by reference
?>


Dus nogmaals, onderbouwing graag..
Allereerst, accessibility mogelijkheden geven de programmeur de kans om principes als encapsulatie en code-by-contract beter in praktijk te brengen. Dit was door het ontbreken en impliciet uitgaan van public bij PHP4 iets waar ik me dermate aan stoorde. Nu is het mogelijk itt php4 een betere classen specificatie op te stellen en onderscheid te maken tussen genoemde en implementatie componenten; hello encapsulation / code by contract :)
Ik weet overigens niet of PHP4 ook interfaces ondersteunde, maar dit doet PHP5 in ieder geval wel, waarmee bepaalde designpatterns die op generalisatie gebaseerd zjn ook beter mogelijk zijn, zoals strategy pattern, observer pattern enz...
Tevens biedt PHP5 ondersteuning voor typehinting, dat icm met gebruik van inheretence / interfaces respectievelijk sub/supertypes erg wenselijk kan zijn.
Wat betreft references, daar heb ik me niet in verdiept en kan geen uitspraken doen over of er verschillen in zitten. Wel kan ik zeggen dat op object niveau met de komst van interfaces het referencen / typecasten uitgebreider is.
Bijvoorbeeld:


PHP:
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
interface Figure
{
  //..
}

class Rectangle implements Figure
{
   //..
}

class Circle implements Figure
{
    //...
}

class Test
{
    public function draw(Figure $f) // <- typehinting ;)
    {
        $obj = null;

        /**
        * woohoo, polymorphisme / dynamic binding ;)
        * Het kan zijn dat je f niet wil behandelen als zijnde supertype Figure, maar als een subtype Rectangle danwel Circle, afhankelijk van waar het object dat meegestuurd wordt naar referenced.
        * Dan zul je dynamisch moeten typechecken en -casten, naar waar het object f daadwerkelijk naar referenced.
        */
        if ($f instanceof Rectangle)
            $obj = (Rectangle) $f;
        else if($f instanceof Circle)
             etc...
    }
}

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:01
Eh ?
Da's lekkere polymorphisme, als je in die method iedere keer gaat kijken van welk type je object nu eigenlijk is ....

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ricvdp schreef op zaterdag 20 augustus 2005 @ 22:37:
Kun je dat even onderbouwen? Classes overslaan zou misschien kunnen (alleen omdat je method access moet instellen? Toch wel een beetje vaag om daarom over te slaan..). Maar references zijn hetzelfde in PHP5, behalve dat als je een class initialiseerd, de class by reference wordt aangemaakt. Oftewel, bij een class doe je in php4:
PHP:
1
//snip


In php5 doe je:
PHP:
1
//snip


Dus nogmaals, onderbouwing graag..
Zoals ik eerder in dit topic ook al zeg: sla het stuk over references en classes over in het PHP4 boek, en lees die onderdelen in een bron over PHP5. Wat valt er verder te onderbouwen? Als je PHP5 wil leren uit een PHP4-boek, dan kan dat prima, maar dan moet je wel het stukje over classes en references ergens anders leren.

'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.


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

whoami schreef op zaterdag 20 augustus 2005 @ 23:39:
Eh ?
Da's lekkere polymorphisme, als je in die method iedere keer gaat kijken van welk type je object nu eigenlijk is ....
Misschien moet je ook even de comment verder lezen ;)
* Het kan zijn dat je f niet wil behandelen als zijnde supertype Figure, maar als een subtype Rectangle danwel Circle, afhankelijk van waar het object dat meegestuurd wordt naar referenced.
* Dan zul je dynamisch moeten typechecken en -casten, naar waar het object f daadwerkelijk naar referenced.

[ Voor 37% gewijzigd door prototype op 20-08-2005 23:41 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:01
En dan blijf ik zeggen dat dat lekkere polymorphsme is....
Waarom zou je Draw geen interface method van Figure laten zijn, en dan de Draw method van Circle een cirkel laten tekenen, en de implementatie bij Rectangle een rectangle laten tekenen ?


(En in jouw geval kan je zowiezo f niet behandelen als een supertype Figure, want Figure is een interface.)

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

whoami schreef op zaterdag 20 augustus 2005 @ 23:46:
En dan blijf ik zeggen dat dat lekkere polymorphsme is....
Waarom zou je Draw geen interface method van Figure laten zijn, en dan de Draw method van Circle een cirkel laten tekenen, en de implementatie bij Rectangle een rectangle laten tekenen ?
Daar heb je een goed punt, maar het was even een snel voorbeeld; draw was in deze context misschien een ongelukkige naam voor de methode. Ik wilde meer typehinting even aan de orde brengen ;) Bovendeien is de methode die je suggereert nog mogelijk in dit simpel voorbeeldje, door draw methode aan de interface van figure toe te voegen en deze in de draw methode van Test te invoken op f.
(En in jouw geval kan je zowiezo f niet behandelen als een supertype Figure, want Figure is een interface.)
f kan in dit voorbeeld referencen naar een object die subtype is van Figure, maar wordt ongeacht dat behandeld als supertype Figure; de methoden die gespecificeerd staan in interface Figure zijn enkel toegankelijk voor de gebruiker op het object, ongeacht het feit dat het subtype waar het object naar referenced misschien over meer methoden beschikt.

edit:
Okay, scrap that, ik heb PHP iets teveel crediet gegeven op gebied van typecasten door ervanuit te gaan dat dit hetzelfde gaat als in java; niet dus na een zojuist uitgevoerde test, dit is namelijk nog steeds gelimiteerd tot de types die PHP als zijnde primitief beschouwd... vrij logisch opzich, maar ik was even vergeten dat PHP typejuggled en dus eigen gedefinieerde referentietypen (nog?) niet ondersteund. My bad :)

[ Voor 47% gewijzigd door prototype op 21-08-2005 01:00 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
prototype schreef op zaterdag 20 augustus 2005 @ 23:55:
[...]

Daar heb je een goed punt, maar het was even een snel voorbeeld; draw was in deze context misschien een ongelukkige naam voor de methode. Ik wilde meer typehinting even aan de orde brengen ;) Bovendeien is de methode die je suggereert nog mogelijk in dit simpel voorbeeldje, door draw methode aan de interface van figure toe te voegen en deze in de draw methode van Test te invoken op f.
Voor het voorbeeld zou ik het dan toch achterwege laten. Je moet zo proberen te designen dat casten weinig of niet hoeft. Hier had ik laatst ook een topic over geopend.
f kan in dit voorbeeld referencen naar een object die subtype is van Figure, maar wordt ongeacht dat behandeld als supertype Figure; de methoden die gespecificeerd staan in interface Figure zijn enkel toegankelijk voor de gebruiker op het object, ongeacht het feit dat het subtype waar het object naar referenced misschien over meer methoden beschikt.
Het is dan niet zo dat f ook werkelijk wordt behandelt als een Figure, je kunt f alleen gebruiken via de interface van Figure, of Figure nu ook werkelijk een pure interface is of een class.
Okay, scrap that, ik heb PHP iets teveel crediet gegeven op gebied van typecasten door ervanuit te gaan dat dit hetzelfde gaat als in java; niet dus na een zojuist uitgevoerde test, dit is namelijk nog steeds gelimiteerd tot de types die PHP als zijnde primitief beschouwd... vrij logisch opzich, maar ik was even vergeten dat PHP typejuggled en dus eigen gedefinieerde referentietypen (nog?) niet ondersteund. My bad :)
Je kunt wel typehinten, in dat geval moet je een object geven die de gegeven interface ondersteund. Casten naar een andere interface kan niet en is zelfs niet nodig, je kunt iedere method aanroepen die je wilt. Op zich niet echt netjes, maar het scheelt je in dit geval wel een cast.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Ricvdp
  • Registratie: Juni 2005
  • Laatst online: 19-09 17:21
Prototype: mooi voorbeeld, ik had inderdaad even niet aan polymorphism, en dat soort dingen gedacht.
Verder kun je in php niet casten, je zit nu een menging van PHP en Java/C# te schrijven.

-NMe-: Waarom je classes zou overslaan in php4 en in php5 zou doen besef ik. Maar aan references is bijna niks verandert tussen php4 en php5. Dus dat kun je in php4, of php5 leren, dat maakt niet uit.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ricvdp schreef op zondag 21 augustus 2005 @ 09:48:
-NMe-: Waarom je classes zou overslaan in php4 en in php5 zou doen besef ik. Maar aan references is bijna niks verandert tussen php4 en php5. Dus dat kun je in php4, of php5 leren, dat maakt niet uit.
Klopt, maar bedenk je dan wel heel goed dat een object variabel in php5 automatisch een reference is. En dat als je het object assigned aan een andere variabelen, dat je dan een kopie van de reference maakt en niet van het object zelf. Oftewel:
PHP:
1
2
3
4
5
6
// php 4:
$object = new Object();
$object2 =& $object;
// php 5:
$object = new Object();
$object2 = $object;

Dit is dus gelijk aan elkaar. Je hoeft bij objecten dus niet expliciet aan te geven dat je een referentie wilt en geen kopie.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ricvdp schreef op zondag 21 augustus 2005 @ 09:48:
-NMe-: Waarom je classes zou overslaan in php4 en in php5 zou doen besef ik. Maar aan references is bijna niks verandert tussen php4 en php5. Dus dat kun je in php4, of php5 leren, dat maakt niet uit.
Er zijn, zoals Michali hierboven al zegt, ook wat betreft references wat dingen veranderd. De werking is hetzelfde, maar sommige dingen die in PHP5 standaard references zijn of opleveren, waren/deden dat in PHP4 niet. Als je dus uit een PHP4-boek het stukje over references hebt doorgelezen terwijl je PHP5 wil leren, dan zit je uiteindelijk met halve waarheden en niet kloppende gedachtegangen in je hoofd, lijkt me onnodig. ;)

'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.


Acties:
  • 0 Henk 'm!

Verwijderd

Birdie schreef op zaterdag 20 augustus 2005 @ 00:56:
[...]

Echt? Ik hoor anders. Bij mijn weten moet een van beide dan onder CGI draaien in plaats van als Apache module en dat heeft toch wat gevolgen - diverse software gebruikt nl. mogelijkheden specifiek voor het gebruik als module.

Hosters zijn misschien wat lui op dit vlak, maar de PHP community ook. Waarom is er geen duidelijke tutorial over hoe dit naast elkaar draaien aan te pakken? Van 3 -> 4 was die er wel, maar van 4 -> 5 lijkt het niet officieel ondersteunt te worden, terwijl het voor een vloeiende overstap toch wel heel belangrijk is.
Afaik is het mogelijk om beiden static in apache te compilen na wat source aanpassingen in PHP5.

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Michali schreef op zondag 21 augustus 2005 @ 09:37:
[...]

Voor het voorbeeld zou ik het dan toch achterwege laten. Je moet zo proberen te designen dat casten weinig of niet hoeft. Hier had ik laatst ook een topic over geopend.
[/b]
Ik begin er aan te geloven dat ik nooit met het voorbeeld had moeten beginnen, aangezien het punt waar kritiek op is, juist net hetgene is waar het niet om ging ;) ; ik weet dondersgoed dat je moet oppassen met casten van referencetypen (is zelfs niet mogelijk in PHP) en dat je dit gematigd dient te doen, omdat het flexibiliteit aantast; je bent dan te specifiek en coupled classen en creeert daardoor (vaak onnodig) dependencies. Dit is bekende koek, maar dat was niet mijn doel met het voorbeeld. Ik zal dergelijke dingen in het vervolg er expliciet bij zetten. ;)
[...]

Het is dan niet zo dat f ook werkelijk wordt behandelt als een Figure, je kunt f alleen gebruiken via de interface van Figure, of Figure nu ook werkelijk een pure interface is of een class.
Heb ik dan anders beweerd? :) (Voor de duidelijkheid: f kan een subtype van Figure referencen, maar gebruik voor clients geschied via het interface van Figure; het object wordt dan dus door de client gebruikt als zijnde type Figure, aldus mijn javaboek ;) Helaas gaat dit niet op voor PHP, wat ik aanvankelijk wel dacht.).
[...]
Casten naar een andere interface kan niet
Eerder casten naar een andere referentietype (zij het sub of super) kan niet in PHP.
je kunt iedere method aanroepen die je wilt. Op zich niet echt netjes, maar het scheelt je in dit geval wel een cast.
Het is idd niet netjes, maar je kan met zekerheid iig zeggen dat de methoden die de interface specificeert terug moeten komen in het object die meegestuurd is via de typehint. Dat is nog altijd een verbetering tov geen uitspraak erover kunnen doen zoals in PHP4 (of het kan wel, maar dan heel omslachtig) ;)

[ Voor 4% gewijzigd door prototype op 21-08-2005 12:57 ]


Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Jongens toch, wat een raar geblaat over interfaces en type hinting allemaal!
PHP:
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
<?php
interface A
{
    public function func_a();
}
class B implements A
{
    public function func_a()
    {
        echo "B->func_a()\n";
    }   
    public function func_b()
    {
        echo "B->func_b()\n";   
    }
}
class C
{
    public static function call_b( A $a )
    {
        $a->func_a();
        $a->func_b();
    }
}
$b = new B();
C::call_b( $b );
?>

Resultaat:
code:
1
2
3
4
5
Content-type: text/html
X-Powered-By: PHP/5.0.3

B->func_a()
B->func_b()
Type hinting is niet meer dan een controle. Voordat de methode uitgevoerd wordt, controleert PHP of de opgegeven variabelen aan een bepaald object voldoen.
Zoals je in mijn voorbeeld ziet, kun je dan ook heel eenvoudig (zonder casten) een methode aanroepen die niet in A staat. Je kunt wel een cast toevoegen als extra controle, omdat mogelijkerwijs klasse D niet func_b() bevat... Maar door dus een object als type hint aan te geven wil niet zeggen dat je beperkt bent tot methoden van dat type.

Dit is bijvoorbeeld een van de OO gebreken van PHP5. Verder kunnen we het nog over het nut van interfaces en abstracte klassen hebben, omdat het niet meer afdwingt dan een functienaam en geordende parameters. Als je bij de parameters nl geen type hinting gebruikt kun je alsnog vanalles meegeven omdat PHP nu eenmaal loose typed is. Laten we het dan maar helemaal niet over return types hebben. ;)

Ik blijf er daarom bij dat het zeker wel zinvol is om óók het PHP4 gedeelte over OOP te lezen. Type hinting, échte static methoden en data hiding zullen de TS wel onbekend zijn. Toch is het handig om dit te begrijpen, want PHP is wat dat betreft een apart taaltje. OOP en references werken heel anders dan bij andere talen.
Waarom is het nog meer handig om óók PHP4 OOP te kennen? Ik denk dat de TS wel eens heel erg in verwarring kan komen met het definieren van constructors en velden. Dat gaat in elke versie anders, maar toch zie je nog veel ontwikkelaars het mixen!

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
prototype schreef op zondag 21 augustus 2005 @ 12:54:
Heb ik dan anders beweerd? :) (Voor de duidelijkheid: f kan een subtype van Figure referencen, maar gebruik voor clients geschied via het interface van Figure; het object wordt dan dus door de client gebruikt als zijnde type Figure, aldus mijn javaboek ;) Helaas gaat dit niet op voor PHP, wat ik aanvankelijk wel dacht.).
Dan begrijpen we elkaar ;) Je legde het ook meer uit in taal specifieke termen en ik probeerde het wat algemener te houden. Mischien dat ik het daarom ook verkeerd begreep.

[ Voor 14% gewijzigd door Michali op 21-08-2005 14:29 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

oikoyama schreef op zondag 21 augustus 2005 @ 13:15:
Jongens toch, wat een raar geblaat over interfaces en type hinting allemaal!
Als je onze gezamelijke replies nog eens leest zul je zien dat ze qua inhoud niet veel verschillen van de jouwe ;)
Voordat de methode uitgevoerd wordt, controleert PHP of de opgegeven variabelen aan een bepaald object voldoen.
Eh? Eerder bij methode aanroep wordt de meegegeven argument expressie ge-evalueerd op referentietype waarde zoals die gespecificeerd staat in de typehint.
Een soortgelijk typehinting mechanisme kan in PHP4 eigenlijk ook in werking worden gebracht, m.b.v. een assertion icm is_a(). Het jammere is dat de assertion bij failure niet een exceptie gooit zoals bij java, maar slechts een warning geeft en de methode vervolgens alsnog uitvoert. Opzich kan je daar wel genoegen mee nemen indien je code by contract hanteert en de typehint als preconditie aanvoert.

Voorbeeld:
PHP:
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
<?php

    error_reporting(E_ALL);

    class A
    {
    }

    class B
    {
    }

    class Foo
    {
    
        /**
         *...
         *@require $bla instanceof A
         *...
         */
        function bar( $bla )
        {
            assert(is_a($bla, "A"));
            print("Meegegeven argument is van type A");
        }
    
    }
    $a = new A();
    $b = new B();
    
    $f = new Foo();
    $f->bar($a);
    $f->bar($b); //Dit geeft een assertion warning icm error_reporting aan, maar voert bar verder nog wel (helaas) uit. De bewering dat de argument van type A is, klopt dan niet meer, maar ja, de preconditie is dan ook niet nagekomen.

?>


Een assert_options(ASSERT_BAIL, 1); zou overigens misschien niet misstaan; de uitvoering wordt bij failure van de assertion dan gestaakt, en illegale aanroepen zonder al teveel defensief programmeren tegengehouden.
Je kunt wel een cast toevoegen als extra controle, omdat mogelijkerwijs klasse D niet func_b() bevat...
Aanvankelijk dacht ik dat PHP net als java ook referentietypen kon casten (zie mijn 2e reply in dit topic), maar dit is gelimiteerd tot de typen die PHP als primitieven beschouwd. Wat je zegt is dus niet mogelijk, en dat is opzich achteraf gezien ook wel logisch aangezien PHP weaktyped is en geen notie heeft van referencetypes.
Ik blijf er daarom bij dat het zeker wel zinvol is om óók het PHP4 gedeelte over OOP te lezen. Type hinting, échte static methoden en data hiding zullen de TS wel onbekend zijn. Toch is het handig om dit te begrijpen, want PHP is wat dat betreft een apart taaltje. OOP en references werken heel anders dan bij andere talen.
Ik zie het nut niet in om een bepaalde taal eerst 'fout' te leren (respectievelijk de PHP4 way), om vervolgens te weten te komen dat het eigenlijk anders moet in PHP5. Wel zie ik het nut in om een totaal andere taal te leren om je meer bekend te laten raken met OO principes; een hogere programmeertaal als java/C#/etc.. biedt hierbij uitkomst, en PHP neigt hier ook steeds meer naartoe; support voor packages die binnenkort in PHP zitten vind ik wel fijn, maar ik zou het toffer vinden als ze eens wat doen aan method overloading. Wat ze nu als overloading beschouwen vind ik ronduit schandalig, ja, dat 'simuleren' heb ik het over ;)

[ Voor 18% gewijzigd door prototype op 21-08-2005 15:15 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Het is imo veel beter om een algemeen boek te lezen om beter bekend te raken met OO princiepes. Het gaat immers om de princiepes en niet om de taal. In de ene taal is het wat moeilijker om ze toe te passen dan de ander, maar het is vaak wel mogelijk. Een boek waar ik echt veel van geleerd heb is "Design Patterns Explained".

Maar we geraken een beetje erg offtopic zo, dus weer ontopic :P

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Michali schreef op zondag 21 augustus 2005 @ 15:50:
Het is imo veel beter om een algemeen boek te lezen om beter bekend te raken met OO princiepes. Het gaat immers om de princiepes en niet om de taal. In de ene taal is het wat moeilijker om ze toe te passen dan de ander, maar het is vaak wel mogelijk. Een boek waar ik echt veel van geleerd heb is "Design Patterns Explained".

Maar we geraken een beetje erg offtopic zo, dus weer ontopic :P
Hehe, dat zeg ik nou ook niet. De principes van OO staan natuurlijk los van een specifieke taal, maar veel talen bieden ondersteuning voor het in de praktijk brengen. OO is dan ook eerder een gereedschap, een manier van denken, maar niet een religie.
Wat ik meen te zeggen is, de principes van OO kun je welliswaar in feite ook doorvoeren in procedurele talen, maar dit gaat minder fijn dan bij een taal die een notie heeft van classen. De kennis echter en ervaring van hoe en wat is het echter wel waard. Een diversiteit van kennis over programmeertalen is dan imho ook gewenst, maakt je breder :)
PHP doet met versie 5 opzich een aardige poging tov versie 4, en het meeste kan er wel mee gedaan worden, alleen blijft er vaak toch een 'maar' bij mij bestaan die voortvloeit uit het feit dat je iets mist uit een andere (volwassenere) taal :) Er zijn genoeg voorbeelden al genoemd in dit topic die een 'fijne' OO implementatie in de weg staan, simpelweg omdat de taal niet een notie heeft van... maar goed, misschien dat > PHP5 wel beterschap zal bieden ;)
Overigens is een design pattern boek wel een interessante informatiebron, maar ik vraag me alleen af of het wel de ideale bron is om de principes van OO te leren.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Daarom had ik het ook over "Design Patterns Explained" en niet over "Design Patterns: Elements of Reusable Object-Oriented Software". De 2de is idd veel te academisch en te diep om OO uit te leren. De 1ste is daar echter wel perfect voor. Pas daarna heb je ook veel aan de 2de.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
prototype schreef op zondag 21 augustus 2005 @ 14:39:
Eh? Eerder bij methode aanroep wordt de meegegeven argument expressie ge-evalueerd op referentietype waarde zoals die gespecificeerd staat in de typehint.
Blijkbaar begrijp je mij dan verkeerd, maar dat is juist wat ik bedoel... Toch wil ik je nog even op het volgende wijzen:
PHP manual:
Assertions should not be used for normal runtime operations like input parameter checks. As a rule of thumb your code should always be able to work correctly if assertion checking is not activated.

Ik zie het nut niet in om een bepaalde taal eerst 'fout' te leren (respectievelijk de PHP4 way), om vervolgens te weten te komen dat het eigenlijk anders moet in PHP5.
Ik geef PHP4 leren ook niet als middel om PHP5 te leren. Ik zeg dat dit nog eens handig van te pas kan komen omdat je zo wellicht beter oude code van anderen kunt begrijpen. Als beginner ga je natuurlijk op zoek naar voorbeeldcode en als je dan plots PHP4 OO tegen komt, weet je dat tenminste ook te herkennen en te lezen. ;)

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

oikoyama schreef op zondag 21 augustus 2005 @ 19:53:
[...]

Blijkbaar begrijp je mij dan verkeerd, maar dat is juist wat ik bedoel... Toch wil ik je nog even op het volgende wijzen:

[...]
Daar ga ik ook niet van uit bij mijn voorbeeld :) Ik weet niet of je bekend bent met het code by contract principe, maar daarbij ken je specifiek verantwoordelijkheden toe aan respectievelijk client en server. Je stelt als het ware een contract op tussen client en server, waar een client zich aan zijn eind moet houden (preconditie) om ervoor te zorgen dat de server zich ook aan zijn eind van het contract houdt (postconditie).
In het voorbeeld dat ik heb gepost, heeft de server methode een preconditie waaraan voldaan moet worden door clienten die gebruik maken van die methode; indien een client niet voldoet aan de preconditie, hoeft de server methode niets te beloven (dus ook geen goede werking van de methode).
De assertion wordt gebruikt om de preconditie te testen, en nu is dat in dit geval een parameter, maar dat moet geen enkel probleem vormen als assertions uitstaan. De methode wordt dan alsnog uitgevoerd, zij het volgens de specificatie gezien foutief omdat er niet aan de preconditie voldaan is, maar dat is _precies_ waar het om gaat bij code by contract :) De client is in dit geval dan niet zijn eind van de deal nagekomen, en de server hoeft dat dan op zijn beurt ook niet te doen; het contract is zo te zeggen ontbonden.
Natuurlijk kon ik dit ook oplossen door defensief te gaan programmeren en in de methode de parameter types te controlleren met conditionele statements, maar dit zorgt dat de code toeneemt in omvang respectievelijk complexiteit en dat is niet wenselijk, zeker als je nagaat dat het niet eens de verantwoordelijkheid is van de server maar eigenlijk van de controller om goede input aan te leveren.

[ Voor 14% gewijzigd door prototype op 21-08-2005 20:49 ]


Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Dank voor de uitleg. In feite heb ik dit al altijd toegepast met phpDoc waarbij ik de pre en post condities in de @param en @return tags plaatste. Type hinting gebruik ik zelf ook alleen maar als handigheidje dat runtime kan aangeven of ik wel aan het "contract" voldoe. Nu weet ik voor dit alles weer een leuke benaming. :)

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

oikoyama schreef op maandag 22 augustus 2005 @ 14:10:
Dank voor de uitleg. In feite heb ik dit al altijd toegepast met phpDoc waarbij ik de pre en post condities in de @param en @return tags plaatste. Type hinting gebruik ik zelf ook alleen maar als handigheidje dat runtime kan aangeven of ik wel aan het "contract" voldoe. Nu weet ik voor dit alles weer een leuke benaming. :)
Erm, daar zijn die javadoc/phpdoc tags eigenlijk niet voor bedoeld; ze dienen respectievelijk een beschrijving te geven van de parameter en over de return waarde. Bovendien ga je ervan uit dat postcondities dan gebonden zijn aan returns (i.e. queries), en dat is _NIET_ het geval. Postcondities verzekeren de client dat wanneer er aan de preconditie is voldaan, de postconditie ook nagekomen wordt. Dit kan b.v. ook betrekking hebben op de staat van een object. Pre- en postcondities wordt uit conventie overwegingen vaak aangeduid met een customtag; @require en @ensure tags b.v. De 'taal' waarmee je de pre- en postcondities in formuleert is eigenlijk informeel, maar het is vuistregel dat je dit zo strak en contextvrij loos doet; liever niet in een beschrijving dus, maar in een pseudo expressie. Hierbij kun je voor statechanges evt old gebruiken om het object aan te duiden VOORDAT de methode is aangeroepen.
Vergeet overigens niet dat pre- en postcondities bij de specificatie horen, en dus ook alleen mogen 'refereren' naar members die deel uit maken van de specificatie.

Een voorbeeld:

PHP:
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
<?php
    class Counter
    {
        private $count; //invariant: count >= 0

        public function __construct()
        {
            $this->count = 0;
        }

        public function count()
        {
            return $this->count;
        }
        
        
        /**
         * @require this.count() >= 0
         * @ensure this.count() > 0 && this.count() > old.count()
         */
        public function increment()
        {
            $this->count++;
        }
        
        /**
         * @require this.count() > 0
         * @ensure this.count >= 0 && this.count() < old.count()
         */
        public function decrement()
        {
            $this->count--;
        }
    }
?>

[ Voor 9% gewijzigd door prototype op 22-08-2005 20:49 ]

Pagina: 1