OOP Visibility
Beste phphelpers,
ik ben bezig met het leren van OOP, ik begin het al aardig te snappen alleen wat ik niet snap is de 'Visibility' oftewel: Private, Protected en Public.
Wanneer gebruik je Private of Protected?
ik ben bezig met het leren van OOP, ik begin het al aardig te snappen alleen wat ik niet snap is de 'Visibility' oftewel: Private, Protected en Public.
Wanneer gebruik je Private of Protected?
Gewijzigd op 01/03/2011 16:42:10 door Wesley PHP
Eigenlijk gebruik je altijd private of protected. Je wilt namelijk in de meeste gevallen niet dat iets van buitenaf je property kan aanpassen.
Private houd in dat niks van buitenaf je data kan aanpassen. Protected kan aangepast worden door een subklasse.
Let op, een object van dezelfde klasse kan de property aanpassen.
(De visibility voor methodes geldt hetzelfde.)
Private houd in dat niks van buitenaf je data kan aanpassen. Protected kan aangepast worden door een subklasse.
Let op, een object van dezelfde klasse kan de property aanpassen.
(De visibility voor methodes geldt hetzelfde.)
@Karl,
oke bedankt! Maar wanneer gebruik je dan Public, bij welk voorbeeld?
oke bedankt! Maar wanneer gebruik je dan Public, bij welk voorbeeld?
Voor methodes die je van buitenaf wilt gebruiken moet je de public visibility gebruiken, anders kan je die niet benaderen.
@Karl,
oké bedankt! Ik ga maar weer verder met leren.
oké bedankt! Ik ga maar weer verder met leren.
Gewijzigd op 01/03/2011 16:41:46 door Wesley PHP
Ga je de tutorial op PHPHulp plaatsen? Dan is het denk ik verstandig om hem eerst eens door te laten lezen.
@Tjvb,
ik ben bezig met het leren van OOP dmv. een tutorial, dus ik ben niet van plan om er een te maken.
EDIT: Ik heb mijn post even aangepast om verdere misverstanden te voorkomen
ik ben bezig met het leren van OOP dmv. een tutorial, dus ik ben niet van plan om er een te maken.
EDIT: Ik heb mijn post even aangepast om verdere misverstanden te voorkomen
Gewijzigd op 01/03/2011 16:43:20 door Wesley PHP
Laten we even dit OOP scriptje pakken:
Doordat we de var naam public hebben gemaakt hebben we de methods setName en getName niet meer nodig. Je kan dit namelijk zelf doen:
Door ->naam op te roepen roepen we de variabele aan. Als we nu naam private hebben gemaakt krijgen we een foutmelding op deze bovenstaande proceduele code. Een private var kan je namelijk alleen vanuit de class zelf aanroepen. Dus dan hebben we wel de moethods setName en getName nodig:
Als we nu de vars protected hebben gemaakt kun je ze ook nog vanuit een andere class (mits die overerft is) gebruiken. Ik weet niet of je zover al bent, denk het niet, maar dan kan de code bijv. zo worden:
Met deze proceduele code kan je dan de naam opvragen:
Als we de var naam private hebben krijg je bij deze code ook een foutmelding.
Code (php)
Doordat we de var naam public hebben gemaakt hebben we de methods setName en getName niet meer nodig. Je kan dit namelijk zelf doen:
Door ->naam op te roepen roepen we de variabele aan. Als we nu naam private hebben gemaakt krijgen we een foutmelding op deze bovenstaande proceduele code. Een private var kan je namelijk alleen vanuit de class zelf aanroepen. Dus dan hebben we wel de moethods setName en getName nodig:
Als we nu de vars protected hebben gemaakt kun je ze ook nog vanuit een andere class (mits die overerft is) gebruiken. Ik weet niet of je zover al bent, denk het niet, maar dan kan de code bijv. zo worden:
Code (php)
Met deze proceduele code kan je dan de naam opvragen:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$admin = new Admin;
$admin->setName('Wesley PHP');
$admin->getAdmin(); #returned Admin: Wesley PHP
?>
$admin = new Admin;
$admin->setName('Wesley PHP');
$admin->getAdmin(); #returned Admin: Wesley PHP
?>
Als we de var naam private hebben krijg je bij deze code ook een foutmelding.
@Wouter,
bedankt voor je 'tutorial' hij is erg duidelijk!
EDIT: Dus als je extends gebruikt kun je wel de class oproepen, maar alleen als hij protected heeft?
bedankt voor je 'tutorial' hij is erg duidelijk!
EDIT: Dus als je extends gebruikt kun je wel de class oproepen, maar alleen als hij protected heeft?
Gewijzigd op 01/03/2011 16:56:14 door Wesley PHP
Wesley PHP 01/03/2011 16:53:10:
EDIT: Dus als je extends gebruikt kun je wel de class oproepen, maar alleen als hij protected heeft?
Extends betekend overerving of te wel Admin is een child van User. Alle methods die in User (parent class) staan kun je dus ook gewoon oproepen via de child class. De child class stop daar alleen nog wat extra methods bij, in dit geval getAdmin. Als je var naam in de User class (parent class) moet of protected of public zijn om te kunnen bewerken door de child class. Als we in naam toch private willen hebben (zou niet weten waarom) zouden we via de admin class de User class moeten aanroepen:
Code (php)
Nu zal het wel werken omdat getName een method is van User en dus kan die wel bij de private var naam. Maar wat ik al zei, het is veel beter om dan de var protected te maken. Daar is protected namelijk voor gemaakt.
@Wouter,
aha bedankt ik snap er nu al veel meer van!
aha bedankt ik snap er nu al veel meer van!
Sowieso gebruik ik eigenlijk nooit private. Je weet nooit wanneer je een klasse nog eens uit wil breiden en anders moet je overal de scope aanpassen.
Pim - op 01/03/2011 17:34:41:
Sowieso gebruik ik eigenlijk nooit private. Je weet nooit wanneer je een klasse nog eens uit wil breiden en anders moet je overal de scope aanpassen.
Dat is niet waar. Je hebt niet altijd alle properties nodig in je subklasse, dus niet alles hoeft protected te worden (en al helemaal niet public)
Ik bedoel natuurlijk protected ipv private, niet public. Maar kan je me een voorbeeld geven van een situatie waar private beter is?
Als je classes maakt die anderen mogen gebruiken is het handiger om private ipv protected te gaan gebruiken, om zo te dwingen dat je gebruikers die en alleen die public interface gebruiken. Intern kan je dan van alles veranderen en fixen. Zolang je public interface maar gelijk blijft blijven hun scripts werken.




