OOP voor PHP 4 deel 1

Door Danny Roelofs, 20 jaar geleden, 5.278x bekeken

Object Oriented Programming voor PHP 4

Gesponsorde koppelingen

Inhoudsopgave

  1. Inleiding
  2. Wat is Classification
  3. Wat is een Instantiation
  4. Wat is Inheritance
  5. Wat is Parent
  6. Wat is $this
  7. Wat is Self
  8. Wat is een Constructor
  9. Wat is een Scope resolution operator

 

Er zijn 46 reacties op 'Overig'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Danny Roelofs
Danny Roelofs
20 jaar geleden
 
0 +1 -0 -1
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.
Jan geen
Jan geen
20 jaar geleden
 
0 +1 -0 -1
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.
Frank -
Frank -
20 jaar geleden
 
0 +1 -0 -1
@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.
Danny Roelofs
Danny Roelofs
20 jaar geleden
 
0 +1 -0 -1
@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.
Jan Koehoorn
Jan Koehoorn
20 jaar geleden
 
0 +1 -0 -1
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 ;-)

Quote:
Tevens heeft Parent ook nog een andere betekenis en dit als methode
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.


Je gebruikt vaak wilt in plaats van wil.

Wel leuk met kleurtjes gewerkt! Complimenten ;-)
Eris -
Eris -
20 jaar geleden
 
0 +1 -0 -1
Je hebt niet alle pagina's vol gemaakt zodat ze niet meer in de index komen ...

(En dat is ook erg onhandig)

Edit:
Ohh het valt nog mee alleen niet in de laatste tutorials
Robert Deiman
Robert Deiman
20 jaar geleden
 
0 +1 -0 -1
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.
Jelmer -
Jelmer -
20 jaar geleden
 
0 +1 -0 -1
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.
Robert Deiman
Robert Deiman
20 jaar geleden
 
0 +1 -0 -1
@Jelmer

Dank voor deze toelichting, daar kan ik wel wat mee :)

@Roelofs
Leuke tutorial, ik moet toch maar eens gaan zien of ik zelf wat meer OOP kan gaan programmeren in PHP. Meeste gaat bij mij wel via functies, maar oop vind ik nog net te ingewikkeld.
Mr D
Mr D
20 jaar geleden
 
0 +1 -0 -1
met de __autoload() functie hoef je zelf niks meer te includen. PHP doet dit dan automatisch voor je
Willem Jan Z
Willem Jan Z
20 jaar geleden
 
0 +1 -0 -1
@Mr_D: __autoload is vanaf PHP5 :) Tut gaat over PHP4, dus gaat niet werken he?
Mr D
Mr D
20 jaar geleden
 
0 +1 -0 -1
idd, maar als je sowiezo echt met OOP wil gaan werken moet je een host zoeken met PHP 5
Katjan
katjan
20 jaar geleden
 
0 +1 -0 -1
@mr D
klopt, oop in php4 is niet echt de moeite..
is hetzelfde als een speedboot kopen en dan moeten peddelen omdat de motor het niet doet;)
Jan Koehoorn
Jan Koehoorn
20 jaar geleden
 
0 +1 -0 -1
[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]
Pim Vernooij
Pim Vernooij
20 jaar geleden
 
0 +1 -0 -1
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.
Mr D
Mr D
20 jaar geleden
 
0 +1 -0 -1
voor het idee van OOP is PHP 4 prima geschikt. PHP 5 biedt alleen meer uitbreidingen en mogelijkheden als je een beetje doorhebt hoe je OOP gebruikt
Danny Roelofs
Danny Roelofs
20 jaar geleden
 
0 +1 -0 -1
Nou genoeg reacties al in iedergeval met commentaar waar ik wel mee
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.
K i p
K i p
20 jaar geleden
 
0 +1 -0 -1
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' :-)
Mr D
Mr D
20 jaar geleden
 
0 +1 -0 -1
als je echt met OOP gaat werken moet je trouwens geen echo's in je classes gebruiken. Voor de voorbeelden is het wel aardig maar wil je echt classes gaan hergebruiken moet je ze zo abstract mogelijk houden
Danny Roelofs
Danny Roelofs
20 jaar geleden
 
0 +1 -0 -1
@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.
Jan geen
Jan geen
20 jaar geleden
 
0 +1 -0 -1
iets over de naamgeving is misschien ook wel handig, de JAVA conventies vind ik zelf wel fijn. Klasse begint altijd met een hoofdletter, functies met een kleine. tweede woord in een naam weer met een hoofdletter enz

klasse KlasseNaam
var naam;
function functieNaam()
Danny Roelofs
Danny Roelofs
20 jaar geleden
 
0 +1 -0 -1
@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!
K i p
K i p
20 jaar geleden
 
0 +1 -0 -1
Over naamgeving van variabelen valt nog wel meer te zeggen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 );
?>
Pim Vernooij
Pim Vernooij
20 jaar geleden
 
0 +1 -0 -1
Een klant is nog steeds geen onderdeel van een winkelwagen. Extenden m?g, maar alleen als het om hetzelfde type object gaat. Je hebt bijvoorbeeld een klasse Dier. Een hond is ook een dier, dus zou de klasse Hond de klasse Dier kunnen extenden.
Jan geen
Jan geen
20 jaar geleden
 
0 +1 -0 -1
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...
Bo az
Bo az
20 jaar geleden
 
0 +1 -0 -1
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.
Pim Vernooij
Pim Vernooij
20 jaar geleden
 
0 +1 -0 -1
@Rik: interfaces in php4?
Jan geen
Jan geen
20 jaar geleden
 
0 +1 -0 -1
niet? ok dan heb ik niks gezegt.
Jan Koehoorn
Jan Koehoorn
20 jaar geleden
 
0 +1 -0 -1
Er is nog iets vreemds aan de hand: ik zie hem niet in de lijst met Laatste PHP tutorials?
Danny Roelofs
Danny Roelofs
20 jaar geleden
 
0 +1 -0 -1
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!.
Marvin S
Marvin S
20 jaar geleden
 
0 +1 -0 -1
Nice tutorial.. en inderdaad leuke opmaak met die kleurtjes, wist niet eens dat dat kon op phphulp haha
Manaus
Manaus
20 jaar geleden
 
0 +1 -0 -1
Zeer mooie tutorial, mijn complimenten, dit is een van de betere volgens mij!
Phpkunst t
Phpkunst t
20 jaar geleden
 
0 +1 -0 -1
Makkelijke tutorial, zeker door de goede bovenstaande uitleg en voorbeelden!
Zelfs ik begrijp het ;)
HaasOnline XX
HaasOnline XX
20 jaar geleden
 
0 +1 -0 -1
In de C++ omgeving kan je defineren dat een object of bestand al reeds bestaat met #DEFINE en #IFNDEF. Zit er ook zo`n functionaliteit in PHP?
Danny Roelofs
Danny Roelofs
20 jaar geleden
 
0 +1 -0 -1
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.. :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?
if(!defined("MYCLASS_PHP")) {
define("MYCLASS_PHP", null);

class MyClass
{
   /* class body */
}

}
// endif
?>
Jelmer -
Jelmer -
20 jaar geleden
 
0 +1 -0 -1
Daar hebben we toch include_once of require_once voor?
Pim Vernooij
Pim Vernooij
20 jaar geleden
 
0 +1 -0 -1
en om te checken of een class reeds bestaat hebben we toch ook class_exists?
Jan geen
Jan geen
20 jaar geleden
 
0 +1 -0 -1
volgens mij gebruik je zulk soort functies alleen bij slecht geprogrammeerde systemen... In ons eindproject (JAVA) mochten we ook geen instanceOf() gebruiken.
Pim Vernooij
Pim Vernooij
20 jaar geleden
 
0 +1 -0 -1
Ik doelde meer op de overbodigheid van een define om te definieren dat je klasse bestaat. Als je gewoon goede (bestands)naamconventies gebruikt, is een require_once( "class.MyClass.php" ); genoeg.
Daniel
daniel
20 jaar geleden
 
0 +1 -0 -1
Ik zou wel een tutorial (PHP5 willen) met een echt voorbeeld inplaats van dieren of auto's.
Wat accessmodifiers, methods, properties, abstracten, interfaces en nog meer zijn weet ik wel, maar hoe ik daarmee een nieuwssysteem zou moeten maken weet ik niet precies.
Jan geen
Jan geen
20 jaar geleden
 
0 +1 -0 -1
ja ik ben het met daniel eens, ik ben ook wel is benieuwd hoe nou een wat groter systeem te maken met verschillende klasses die samenwerken. Nieuwssysteem zou een mooi voorbeeld zijn, iemand?
Mr D
Mr D
20 jaar geleden
 
0 +1 -0 -1
ik heb geen nieuwssysteem gemaakt maar op zich moet het niet zo heel moeilijk zijn.

een paar classes die je kan gebruiken:
class User
class Moderator extends User
class Admin extends Moderator

class Article

maar de uitwerking zal wel iets lastiger zijn
HaasOnline XX
HaasOnline XX
20 jaar geleden
 
0 +1 -0 -1
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!
Cees St
Cees St
20 jaar geleden
 
0 +1 -0 -1
Heb ik het nu verkeerd, maar is het niet zo dat je $this niet kan gebruiken wanneer je scope resolution operators gebruikt? Omdat er feitelijk geen instantie is aangemaakt, maar slechts een soort functie call plaats vind.

Groet Cees
Danny Roelofs
Danny Roelofs
20 jaar geleden
 
0 +1 -0 -1
@Cees,

Ja althans als je een scope operator gebruikt buiten de class om ?en class functie aan te spreken zal je geen resultaat krijgen via een instantie maar dan werk je met bijvoorbeeld return $result.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Rudie dirkx
rudie dirkx
20 jaar geleden
 
0 +1 -0 -1
de members van een class heten niet attributes, maar members of properties.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Inleiding
  2. Wat is Classification
  3. Wat is een Instantiation
  4. Wat is Inheritance
  5. Wat is Parent
  6. Wat is $this
  7. Wat is Self
  8. Wat is een Constructor
  9. Wat is een Scope resolution operator

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.