Tutorials >
PHP >
[OOP] Een begin maken met OOP
|
Gepost op: 28 mei 2009 - 13:29 |
|
|
|
PHP expert
|
Mijn complimenten voor deze tutorial, hier zullen veel leden iets aan hebben. Misschien een kleine bedenking (discussie is altijd mogelijk hierover) maar is het gebruik van __set en __get niet iets te vroeg? Je zou deze kunnen introduceren in een tutorial die spreekt over alle overloadmethodes. Een tweede kleine opmerking, waarom gebruik je return bij een setter? |
|
|
|
Gepost op: 28 mei 2009 - 16:35 |
|
|
|
Beheerder
|
Ziet er goed uit maar je kan beter een echo vermijden in een class. Beter kan je werken met return. |
|
|
|
Gepost op: 28 mei 2009 - 18:23 |
|
|
|
PHP expert
|
stijn1989 schreef: Mijn complimenten voor deze tutorial, hier zullen veel leden iets aan hebben. Bedankt! Ik vond dat er op Sima materiaal ontbrak die echt uitlegde wat OOP nou is en hoe je ermee begint in PHP, vandaar ook deze tutorial.
stijn1989 schreef: Misschien een kleine bedenking (discussie is altijd mogelijk hierover) maar is het gebruik van __set en __get niet iets te vroeg? Je zou deze kunnen introduceren in een tutorial die spreekt over alle overloadmethodes Omdat ik via toegangsbeheer al met setters en getters in aanraking kwam in deze tutorial, leek het me beter om ook __set en __get direct te bespreken. Vandaar
stijn1989 schreef: Een tweede kleine opmerking, waarom gebruik je return bij een setter? Ik heb mezelf aangeleerd bij void methodes return; te gebruiken. Er is niet echt een specifieke reden voor, het heeft verder geen nut. Ik vind het persoonlijk wel netjes.
marten schreef: Ziet er goed uit maar je kan beter een echo vermijden in een class. Beter kan je werken met return. Alhoewel het voorbeeld erg minimalistisch is, heb je gelijk en zal ik het zo aanpassen. Het is beter direct van het begin af aan het goed aan te leren.
Edit: Aangepast |
|
|
|
Gepost op: 31 mei 2009 - 16:27 |
|
|
|
PHP expert
|
Very nice |
|
|
|
Gepost op: 06 juni 2009 - 09:33 |
|
|
|
PHP expert
|
Moet bij het volgende code blok $sKleur niet $sValue zijn?
<?php
class Auto {
private $sKleur = "";
public function __set( $sAttribuut, $sValue ){
switch( $sAttribuut ){
case 'sKleur':
$aValideKleuren = array('groen', 'rood', 'blauw', 'paars', 'geel', 'wit', 'zwart');
if( !in_array( strtolower( $sKleur ), $aValideKleuren ) ){
die( "Kleur niet bekend: " . $sKleur );
}
$this->sKleur = $sKleur;
break;
default:
break;
}
return;
}
public function __get( $sAttribuut ){
if( isset( $this->$sAttribuut ) ){
return $this->$sAttribuut;
}
return false;
}
}
<?php class Auto { private $sKleur = ""; public function __set( $sAttribuut, $sValue ){ switch( $sAttribuut ){ case 'sKleur': $aValideKleuren = array('groen', 'rood', 'blauw', 'paars', 'geel', 'wit', 'zwart'); die( "Kleur niet bekend: " . $sKleur ); } $this->sKleur = $sKleur; break; default: break; } return; } public function __get( $sAttribuut ){ if( isset( $this->$sAttribuut ) ){ return $this->$sAttribuut; } return false; } }
|
|
|
|
Gepost op: 06 juni 2009 - 11:02 |
|
|
|
PHP expert
|
Quicky schreef: Moet bij het volgende code blok $sKleur niet $sValue zijn?
[..code..] Goed gezien, heb het aangepast |
|
|
|
Gepost op: 17 oktober 2009 - 13:23 |
|
|
|
PHP interesse
|
Goede tutorial (5/5!), zitten wel hier en daar typ/spelfoutjes in. Eentje dat ik me herinner is "verfen" --> "Verven". |
|
|
|
Gepost op: 26 december 2013 - 00:52 |
|
|
|
Moderator
|
Let op bij het gebruik van getters en setters.
empty() en isset() werken niet hetzelfde als wanneer de variabelen waar naar verwezen wordt (publieke) attributen zouden zijn.
Bijvoorbeeld:
<?php
class Test
{
protected $settings;
public function __construct() {
$this->settings = array();
}
public function __set($key, $value) {
$this->settings[$key] = $value;
}
public function __get($key) {
if (isset($this->settings[$key])) {
return $this->settings[$key];
} else {
return false;
}
}
}
$config = new Test();
$config->setting = true;
if (empty($config->setting)) {
echo 'empty fail<br />';
} else {
echo 'empty win<br />';
}
if (isset($config->setting)) {
echo 'isset win<br />';
} else {
echo 'isset fail<br />';
}
if ($config->setting) {
echo 'direct check win<br />';
} else {
echo 'direct check fail<br />';
}
?>
<?php class Test { protected $settings; public function __construct() { $this->settings = array(); } public function __set($key, $value) { $this->settings[$key] = $value; } public function __get($key) { if (isset($this->settings[$key])) { return $this->settings[$key]; } else { return false; } } } $config = new Test(); $config->setting = true; if (empty($config->setting)) { } else { } if (isset($config->setting)) { } else { } if ($config->setting) { echo 'direct check win<br />'; } else { echo 'direct check fail<br />'; } ?>
Levert:
empty fail <-- zou je wellicht niet verwachten
isset fail <-- zou je wellicht niet verwachten
direct check win
Nu is dit redelijk voor hand liggend, maar het kan "even" duren voordat je hier achter bent . |
|
|
Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties. |
|
|
|