Ola mensen,
Stel we hebben deze class:
<?php
class Foo {
private $data = array();
public function getData {
return $this->data;
}
public function has($key) {
return array_key_exists($key, $this->data);
}
}
?>
Nu gaat het om de functie has();
In het bovenstaande voorbeeld spreekt deze functie rechtstreeks de private property $data aan.
Nu weet ik dat sommigen (waaronder Wouter) het zo op zouden lossen:
<?php
class Foo {
private $data;
public function getData {
return $this->data;
}
public function has($key) {
return array_key_exists($key, $this->getData());
}
}
?>
Wouter werkt met een heel strict "GET" beleid zoals hij zelf zegt. Alleen de "get()" methods mogen private properties aanspreken. Nu vraag ik me af of daar een reden voor is?
En hoe doen de anderen, buiten Wouter, dit? Gebruiken jullie ook overal een "get()" functie voor, of mag iedere method in een class de private properties aanspreken?
Wat zijn voordelen, wat zijn nadelen?
Wat ik zelf kan bedenken:
- alles via een get() method
voordeel: je weet zeker dat alleen de get() method de private property kan uitlezen
nadelen: 1) je roept telkens onnodig een extra method aan 2) meerdere functies worden afhankelijk van de get() method. Als de get() method wordt gewijzigd (bijv. qua naam) dan werken de method die van de get() method afhankelijk zijn niet meer. Ik zou denken dat daardoor je systeem "kwetsbaarder" wordt.
- rechtstreeks een private property aanspreken
nadeel: ook niet-get() methods kunnen private properties aanspreken (maar is dat erg?)
voordelen: er hoeven geen extra get() methods te worden aangeroepen (beter voor performance) en iedere functie die een private property moet uitlezen werkt op zichzelf en is dus niet afhankelijk van een get() method.
Ik ben benieuwd naar hoe jullie het doen en naar jullie argumenten.
1.736 views