OOP voor PHP 4 deel 1
Object Oriented Programming voor PHP 4
Gesponsorde koppelingen
Inhoudsopgave
- Inleiding
- Wat is Classification
- Wat is een Instantiation
- Wat is Inheritance
- Wat is Parent
- Wat is $this
- Wat is Self
- Wat is een Constructor
- Wat is een Scope resolution operator
46 reacties op 'OOP voor PHP 4 deel 1'
Gesponsorde koppelingen
Hoi Allen,
Nou dit is een begin van een meerdelige tutorial over OOP programmeren
voor Php4 en ik richt me eigenlijk op beginners. Zelf kan ik nog het een
en ander leren van gevorderden op dit gebied maar ik ben ook niet geheel
onkundig hiermee.
Maar het wil niet zeggen dat ik mijn gedachtengang correct verwoord of
wellicht dingen door elkaar haal.
Elk kritiek, suggestie, tip en aanwijzing mag worden geplaatst en ik zal daar
zeker rekening mee houden en hier en daar het nodige aanpassen.
Binnekort het volgende deel en waar dat overgaat dat is nog onbekend
maar we gaan in iedergeval onderwerpen uitgebreider behandelen.
Nou dit is een begin van een meerdelige tutorial over OOP programmeren
voor Php4 en ik richt me eigenlijk op beginners. Zelf kan ik nog het een
en ander leren van gevorderden op dit gebied maar ik ben ook niet geheel
onkundig hiermee.
Maar het wil niet zeggen dat ik mijn gedachtengang correct verwoord of
wellicht dingen door elkaar haal.
Elk kritiek, suggestie, tip en aanwijzing mag worden geplaatst en ik zal daar
zeker rekening mee houden en hier en daar het nodige aanpassen.
Binnekort het volgende deel en waar dat overgaat dat is nog onbekend
maar we gaan in iedergeval onderwerpen uitgebreider behandelen.
Ik vind het voorbeeld van een televisie en een afstandsbediening wat onhandig gekozen omdat een afstandsbediening geen televisie is. extenden is letterlijk uitbreidden. Denk dat het ook nog wel handig is om even duidelijk uit te leggen wat het verschil nou precies is tussen een klasse en een object... verder wel goeie tut. enkele voordelen:
als je met meerdere mensen samenwerkt hoef je niet te weten hoe de ander zijn klasse werkt.
als je je klasse goed documenteert en je maakt er phpdoc van, is dit veel duidelijker en veel makkelijker te begrijpen, ook na een jaar, aangezien dan alleen de functie namen van belang zijn en niet zozeer hoe je destijds iets geimplementeert hebt.
als je met meerdere mensen samenwerkt hoef je niet te weten hoe de ander zijn klasse werkt.
als je je klasse goed documenteert en je maakt er phpdoc van, is dit veel duidelijker en veel makkelijker te begrijpen, ook na een jaar, aangezien dan alleen de functie namen van belang zijn en niet zozeer hoe je destijds iets geimplementeert hebt.
@Rik: Ik vond het ook al een rare extend, maar dan met name omdat een afstandsbediening van alles kan doen: radio, lampen, auto, computer, etc. etc. Het is dus niet iets dat direct bij een TV hoort.
Al deze soorten afstandsbedieningen kunnen echter wel extenden op de basis 'afstandsbediening'. Vervolgens hebben ze hun eigen specifieke functies zoals 'open kofferbak' of 'open teletext'.
Verder wel een heldere uitleg.
Al deze soorten afstandsbedieningen kunnen echter wel extenden op de basis 'afstandsbediening'. Vervolgens hebben ze hun eigen specifieke functies zoals 'open kofferbak' of 'open teletext'.
Verder wel een heldere uitleg.
@Rik
Ja het gebeuren om phpdoc neem ik nog mee in een van de vervolg delen.
Maar je hebt eigenlijk wel gelijk met dat TV en Afstandsbediening gebeuren.
Ook al hebben ze wel met elkaar te maken maar ze zijn niet samen ?en
geheel maar functioneren alleen met elkaar.
Ik zal de tutorial nog wel even aanpassen ook al zal niemand het ontgaan
wat er wordt uitgelegd.
In iedergeval bedankt voor je reactie, morgen weer een nieuwe dag en dan
gaan we dat aanpassen gezien de volgende delen ook gebaseerd moeten zijn
over de zelfde classen.
Ja het gebeuren om phpdoc neem ik nog mee in een van de vervolg delen.
Maar je hebt eigenlijk wel gelijk met dat TV en Afstandsbediening gebeuren.
Ook al hebben ze wel met elkaar te maken maar ze zijn niet samen ?en
geheel maar functioneren alleen met elkaar.
Ik zal de tutorial nog wel even aanpassen ook al zal niemand het ontgaan
wat er wordt uitgelegd.
In iedergeval bedankt voor je reactie, morgen weer een nieuwe dag en dan
gaan we dat aanpassen gezien de volgende delen ook gebaseerd moeten zijn
over de zelfde classen.
Leuke tutorial!
Twee puntjes:
1) ik vind je voorbeeld van een tv en een ab nogal abstract. Daar kan een beginner niet meteen mee aan de slag. Als je bijvoorbeeld een parent zou hebben die de errorchecking doet en een child die simpele DB handelingen verricht (connecten, query uitvoeren), dan is dat denk ik veel uitnodigender voor een beginner.
2) Je taalgebruik is nogal wollig ;-)
Als je tevens gebruikt, is ook overbodig. (Tautologie)
Je gebruikt vaak wilt in plaats van wil.
Wel leuk met kleurtjes gewerkt! Complimenten ;-)
Twee puntjes:
1) ik vind je voorbeeld van een tv en een ab nogal abstract. Daar kan een beginner niet meteen mee aan de slag. Als je bijvoorbeeld een parent zou hebben die de errorchecking doet en een child die simpele DB handelingen verricht (connecten, query uitvoeren), dan is dat denk ik veel uitnodigender voor een beginner.
2) Je taalgebruik is nogal wollig ;-)
Quote:
Tevens heeft Parent ook nog een andere betekenis en dit als methode
in de class zelf en functioneert als een Scope resolution operator
in de class zelf en functioneert als een Scope resolution operator
Als je tevens gebruikt, is ook overbodig. (Tautologie)
Quote:
Ofwel je geeft aan dat er
?en Class is die een kind wil zijn van de vader en de eigenschappen van de
vader wilt gebruiken.
?en Class is die een kind wil zijn van de vader en de eigenschappen van de
vader wilt gebruiken.
Je gebruikt vaak wilt in plaats van wil.
Wel leuk met kleurtjes gewerkt! Complimenten ;-)
Ik heb nog wel even een vraag over de inleiding, wat is volgens jou een go maar misschjiede reden om voor elke class een nieuwe file aan te maken? Als je een logische volgorde aanhoud kan je toch net zo goed de boel in 1 file zetten? Anders moet je ook elke keer andere files includen, of een lijst met includes/ requires maken.
Misschien is het wel een goede reden hoor, maar misschien kan je dat nog een beetje toelichten.
Misschien is het wel een goede reden hoor, maar misschien kan je dat nog een beetje toelichten.
Het is over het algemeen een gebruik om 1 klasse of 1 groep klassen die samenwerken om 1 bepaald doel te bereiken (een package) bij elkaar te zetten. Dat zie je ook weer terug in talen als Java en C++. Daar wordt het zelfs afgedwongen.
Voordeel is dat, indien je goed redelijk zelfstandige klassen maakt, je je klassen of pakketten kan hergebruiken.
Ander voordeel is waneer er meerdere mensen aan de broncode werken. Zo hoeven ze niet allemaal in 1 bestand te werken, en kunnen ze dus tegelijkertijd werken.
Derde voordeel is dat je selectief kan includen. Je include bijvoorbeeld alleen klasse A waneer nodig. Als je alle klassen in 1 bestand hebt staan moet dat ene bestand altijd volledig geladen worden.
Voordeel is dat, indien je goed redelijk zelfstandige klassen maakt, je je klassen of pakketten kan hergebruiken.
Ander voordeel is waneer er meerdere mensen aan de broncode werken. Zo hoeven ze niet allemaal in 1 bestand te werken, en kunnen ze dus tegelijkertijd werken.
Derde voordeel is dat je selectief kan includen. Je include bijvoorbeeld alleen klasse A waneer nodig. Als je alle klassen in 1 bestand hebt staan moet dat ene bestand altijd volledig geladen worden.
[min of meer offtopic]
@ Iedereen: deze tutorial richt zich op beginners. Volgens mij is een van de grote drempels op het gebied van OOP de (schijnbare) ingewikkeldheid en de technobabble er omheen.
Ik wil de gevorderden daarom vragen: als je iets beweert (bijv: OOP in PHP4 is niet de moeite), probeer dan ook in beginnersterminologie uit te leggen, waarom je dat zegt.
Wie van de beginners zal bijvoorbeeld een zin begrijpen als: "In PHP4 kun je geen try en catch gebruiken en worden public, private, protected niet ondersteund. Bovendien kent PHP4 geen destructors."
Het tentoonspreiden van je eigen kennis is niet hetzelfde als anderen laten delen in je kennis ;-)
[/min of meer offtopic]
@ Iedereen: deze tutorial richt zich op beginners. Volgens mij is een van de grote drempels op het gebied van OOP de (schijnbare) ingewikkeldheid en de technobabble er omheen.
Ik wil de gevorderden daarom vragen: als je iets beweert (bijv: OOP in PHP4 is niet de moeite), probeer dan ook in beginnersterminologie uit te leggen, waarom je dat zegt.
Wie van de beginners zal bijvoorbeeld een zin begrijpen als: "In PHP4 kun je geen try en catch gebruiken en worden public, private, protected niet ondersteund. Bovendien kent PHP4 geen destructors."
Het tentoonspreiden van je eigen kennis is niet hetzelfde als anderen laten delen in je kennis ;-)
[/min of meer offtopic]
OO met php4 kan prima! Het biedt wat minder mogelijkheden, maar je kan er hetzelfde mee bereiken als met php5. Ik heb ongeveer 1,5 jaar met een OO framework in php4 gewerkt op m'n werk, en ben nooit tegen iets aangelopen dat niet lukte.
Nu ben ik sinds een maand of 8 over op php5, en blijf daar ook lekker. Om OO te leren is php4 denk ik nog b?ter dan php5; puur omdat het nog geen fancy shit erin heeft.
Nu ben ik sinds een maand of 8 over op php5, en blijf daar ook lekker. Om OO te leren is php4 denk ik nog b?ter dan php5; puur omdat het nog geen fancy shit erin heeft.
Nou genoeg reacties al in iedergeval met commentaar waar ik wel mee
uit de voeten kan, ga het zo allemaal aanpassen.
Ja mijn wollige taal gebruik, ik ken dat ongemak van me en ik had er al
wat foutjes uitgehaald maar zoals je al merkt ik ben geen fulltime ABN?r
en daar gaat het wel eens door mis met mijn taalgebruik. Dan ga ik de
woorden die ik als zodanig uitspreek ook wel eens zo opschrijven.
Maar ga dat zo verbeteren.
Ik moet nog even kijken hoe dat zit met wat jij bedoeld met die laatste
pagina en het niet vol maken en daardoor niet in de index komen. Iets
wat ik mogelijk niet weet? of ik moet nog even je informatie laten inwerken
voordat ik het begrijp.
Ja ik dat met die classes en hoe ze te gebruiken (in te laden) nog wel even
corrigeren. Ook al ben ik niet van mening dat je alle classes in ?en keer
moet inladen maar wel kan groeperen zoals @Jelmer aangeeft.
uit de voeten kan, ga het zo allemaal aanpassen.
Edit:
@Jan Koehoorn
Ja mijn wollige taal gebruik, ik ken dat ongemak van me en ik had er al
wat foutjes uitgehaald maar zoals je al merkt ik ben geen fulltime ABN?r
en daar gaat het wel eens door mis met mijn taalgebruik. Dan ga ik de
woorden die ik als zodanig uitspreek ook wel eens zo opschrijven.
Maar ga dat zo verbeteren.
Edit:
@Eris
Ik moet nog even kijken hoe dat zit met wat jij bedoeld met die laatste
pagina en het niet vol maken en daardoor niet in de index komen. Iets
wat ik mogelijk niet weet? of ik moet nog even je informatie laten inwerken
voordat ik het begrijp.
Edit:
@Robert Deiman
Ja ik dat met die classes en hoe ze te gebruiken (in te laden) nog wel even
corrigeren. Ook al ben ik niet van mening dat je alle classes in ?en keer
moet inladen maar wel kan groeperen zoals @Jelmer aangeeft.
Goeiemiddag Roelofs, hierbij mijn commentaar .
Leuke kleurtjes! :-)
Op de pagina Wat is Inheritance gebruik je het volgende in de functie Naam, in de klasse Klant: $this->klantnaam = $naam;. Misschien is het duidelijk als je ook nog even var $klantnaam; in de klasse zet. (Voor de volledigheid?) Hetzelfde geldt ook op Wat is Parent.
Op de pagina Wat is Self, verwacht ik uitleg over Self. Ik vind het niet duidelijk als je dan ??n keer op die pagina het woord self in een rare zin gebruikt. (Klinkt beetje lullig, maar het is opbouwend h? ;-) (A).)
Op dezelfde pagina zeg je dat je beter Klassenaam::functie ( $keuze ) kunt gebruiken, maar waarom gebruik je dan wel dit: parent::Schakelaar ( $signaal );
Op de pagina Wat is een Scope resolution operator gebruik je onder elkaar: echo $this->tekst_verlichting; en Televisie::stuur_infrarood_signaal ( $schakelaar );. Wat is nou beter / duidelijker?
Leuke tutorial 'verder' :-)
Leuke kleurtjes! :-)
Op de pagina Wat is Inheritance gebruik je het volgende in de functie Naam, in de klasse Klant: $this->klantnaam = $naam;. Misschien is het duidelijk als je ook nog even var $klantnaam; in de klasse zet. (Voor de volledigheid?) Hetzelfde geldt ook op Wat is Parent.
Op de pagina Wat is Self, verwacht ik uitleg over Self. Ik vind het niet duidelijk als je dan ??n keer op die pagina het woord self in een rare zin gebruikt. (Klinkt beetje lullig, maar het is opbouwend h? ;-) (A).)
Op dezelfde pagina zeg je dat je beter Klassenaam::functie ( $keuze ) kunt gebruiken, maar waarom gebruik je dan wel dit: parent::Schakelaar ( $signaal );
Op de pagina Wat is een Scope resolution operator gebruik je onder elkaar: echo $this->tekst_verlichting; en Televisie::stuur_infrarood_signaal ( $schakelaar );. Wat is nou beter / duidelijker?
Leuke tutorial 'verder' :-)
@Boris
Dank je voor de info! ga dat even mee nemen.
@Mr D
Heb je gelijk in, ik ga die Echo's ook weg halen al zullen ze de voorbeelden
dan niet meer als zodanig kunnen gebruiken (testen) waarbij er direct een
reactie is op het uitvoerende scherm.
Maar dat komt nog wel in de volgende delen van de tutorial, dit deel is toch
meer bedoeld voor de basis begrippen.
Dank je voor de info! ga dat even mee nemen.
@Mr D
Heb je gelijk in, ik ga die Echo's ook weg halen al zullen ze de voorbeelden
dan niet meer als zodanig kunnen gebruiken (testen) waarbij er direct een
reactie is op het uitvoerende scherm.
Maar dat komt nog wel in de volgende delen van de tutorial, dit deel is toch
meer bedoeld voor de basis begrippen.
@Rik
Klopt, Ja ik heb daar nu hopelijk een (beetje) aan voldaan.
Van alles aangepast....
Als het goed is heb ik nu geen last van een woord wat ik nog niet kende maar
wel wist wat je bedoelde @Jan Koehoorn met Tautologie. Dus hopelijk heb ik daar nu geen last meer van.
Ik heb tevens het onderwerp Televisie & Afstandsbediening maar wat concreter gemaakt door gebruik te maken van Winkelwagen en Klant al moet ik zeggen dat ik zelf wel een televisie heb gehad met een afstandsbediening die specifiek daar bij hoorde (zat namelijk er aan vast met 10 meter snoer) maar goed daar moeten we het maar niet over hebben ;^)
Inhoudelijk zijn de teksten in de tutorial wat ingekort en merendeels herschreven.
Dus als er weer opmerkingen hoor ik ze graag!
Klopt, Ja ik heb daar nu hopelijk een (beetje) aan voldaan.
Van alles aangepast....
Als het goed is heb ik nu geen last van een woord wat ik nog niet kende maar
wel wist wat je bedoelde @Jan Koehoorn met Tautologie. Dus hopelijk heb ik daar nu geen last meer van.
Ik heb tevens het onderwerp Televisie & Afstandsbediening maar wat concreter gemaakt door gebruik te maken van Winkelwagen en Klant al moet ik zeggen dat ik zelf wel een televisie heb gehad met een afstandsbediening die specifiek daar bij hoorde (zat namelijk er aan vast met 10 meter snoer) maar goed daar moeten we het maar niet over hebben ;^)
Inhoudelijk zijn de teksten in de tutorial wat ingekort en merendeels herschreven.
Dus als er weer opmerkingen hoor ik ze graag!
Over naamgeving van variabelen valt nog wel meer te zeggen:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$sBanaan = 'hoi';
$iAantalBananen = 9;
$aFruiten = array ( 'appel' , 'peer' );
$fStomGetal = 1 / 3;
$bWaarOfNiet = true;
$nNiks = null;
$oDB = new Database ( 'localhost' , 'user' , 'pass' , 'database' );
$rRes = mysql_query ( $sql );
?>
$sBanaan = 'hoi';
$iAantalBananen = 9;
$aFruiten = array ( 'appel' , 'peer' );
$fStomGetal = 1 / 3;
$bWaarOfNiet = true;
$nNiks = null;
$oDB = new Database ( 'localhost' , 'user' , 'pass' , 'database' );
$rRes = mysql_query ( $sql );
?>
idd, het voorbeeld is nog steeds niet echt goed. als je extend moet de klasse die extend van hetzelfde type zijn. Je gebruikt dit wanneer bepaalde functionaliteit telkens weer terugkomt. je wil dit niet steeds in elke klasse hebben. ik mis trouwens ook nog interfaces.
@boris: ik vind die naamgeving persoonlijk niet echt fijn, als je een goeie naam voor je variabelen bedenkt is het meestal wel duidelijk wat er precies in zit. aantalBananen zal vast geen string zijn, net als isWaar een boolean is. maarja dat is persoonlijk.
Wat ik zelf nog graag zou zien is hoe je nou een systeem met meerdere klassen maakt. Neem bijv. een CMS daar zit bijv. een klasse Artikel in. wat doet die klasse precies want ik kom zelf niet veel verder dan dat deze dezelfde variabelen heeft als die in de database staan... die je vervolgens vult vanuit een formulier en dan op slaat in de database...
@boris: ik vind die naamgeving persoonlijk niet echt fijn, als je een goeie naam voor je variabelen bedenkt is het meestal wel duidelijk wat er precies in zit. aantalBananen zal vast geen string zijn, net als isWaar een boolean is. maarja dat is persoonlijk.
Wat ik zelf nog graag zou zien is hoe je nou een systeem met meerdere klassen maakt. Neem bijv. een CMS daar zit bijv. een klasse Artikel in. wat doet die klasse precies want ik kom zelf niet veel verder dan dat deze dezelfde variabelen heeft als die in de database staan... die je vervolgens vult vanuit een formulier en dan op slaat in de database...
Over naamgeving is hier al een stuk te vinden. klik.
Edit:
@Roelofs, misschien is het goed om -ondanks het niet af te dwingen is in PHP 4- toch ook iets te vertellen over encapsulation.
Ik reageer even persoonlijk tot jullie berichten maar ik zal alles even doorlezen
want Deel 1 moet goed zijn en de basis vormen voor nog een aantal delen en
als ik hier al fout ga dan wordt de rest ook een rommeltje.
Maar ik ben van plan, nouja ik ga het ook doen om dus van alles aan te halen
wat maar mogelijk is dus er moet ook nog gesproken worden over polymorphism (als ik het zo goed schrijf) en patterns enz..
Dus we zijn er nog lange niet.
Maar we gaan wel weer aan de slag met de tutorial ;-)
Bedankt voor de info allemaal!.
want Deel 1 moet goed zijn en de basis vormen voor nog een aantal delen en
als ik hier al fout ga dan wordt de rest ook een rommeltje.
Maar ik ben van plan, nouja ik ga het ook doen om dus van alles aan te halen
wat maar mogelijk is dus er moet ook nog gesproken worden over polymorphism (als ik het zo goed schrijf) en patterns enz..
Dus we zijn er nog lange niet.
Maar we gaan wel weer aan de slag met de tutorial ;-)
Bedankt voor de info allemaal!.
Ik zie wel bepaalde onderwerpen die hier misschien over gaan, maar ik ben het ook nog zelf aan het doornemen op dit moment of ik hier wat mee kan:
link
Nouja, ik zag dit dan.. :
link
Nouja, ik zag dit dan.. :
Ik ben net bezig om statistieken via classes en geheel (of deels) in OO uit te werken. Als ik de boel goed draaiend krijg dan post ik hem wel hierzo. Maar natuurlijk bestaan er meerdere wegen die naar Rome leiden! :)
Edit:
Oke, ik heb nu een statistieken systeem uitgevoerd in OO. Het lijkt allemaal aardig te werken, maar ik post ze nog niet. Ik wil ze eerst verder testen en vanwege het lekkere weer en persoonlijke bezigheden heb ik er voorlopig even geen tijd voor. Maar....... i'll be back!
Oke, ik heb nu een statistieken systeem uitgevoerd in OO. Het lijkt allemaal aardig te werken, maar ik post ze nog niet. Ik wil ze eerst verder testen en vanwege het lekkere weer en persoonlijke bezigheden heb ik er voorlopig even geen tijd voor. Maar....... i'll be back!
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Danny Roelofs- 6 jaar geleden
- 1.469 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP tutorials opties
- Overig
- Nieuwste PHP tutorials
- PHP tutorial toevoegen


PHP hulp
0 seconden vanaf nu