Hallo trouwe lezers.. Het leven is op ‘t moment te druk voor woorden, kom niet eens toe aan world of warcraft spelen. Duidelijk tijd tekort dus. Maar dan nu toch een artikel.
Vorige keer heb ik een artikel geschreven over Onzichtbare getters en setters, opzich een leuk concept, als je het van de andere kant bekijkt, zou je alleen altijd getters en setters moeten hebben voor het geval je valdatie toe wilt voegen. Natuurlijk kan je dat allemaal doen met een goede IDE. Aangezien ik op werk met vim zit te klooien, heb ik een leuk alternatief verzonnen.
/** Vergeet niet dat deze functie binnen een class thuishoort **/
public function __call($function, $args)
{
// Set method, match en sla de variable-naam op in $matches
if ( preg_match('/^set([A-Z])([0-9a-zA-Z]*)$/', $function, $matches) )
{
// Maak de eerste letter lowercase
$key = strtolower($matches[1]).$matches[2];
// Zet de variable
$this->$key = array_shift($args);
// Mijn gewoonte met void functies
return $this;
}
// Set method, match en sla de variable-naam op in $matches
if ( preg_match('/^get([A-Z])([0-9a-zA-Z]*)$/', $function, $matches) )
{
// Maak de eerste letter lowercase
$key = strtolower($matches[1]).$matches[2];
// Als de variable niet bestaat, return dan null
if ( !isset($this->$key) )
{
return null;
}
// Return de waarde
return $this->$key;
}
throw new Exception('Calling undefined function.');
}
Werkt prima zo, alle variablen die gewoon met een letter beginnen hebben op deze manier een setter en een getter (maak ze wel protected of private). Wil je echt dat een bepaalde variable niet aangesproken kan worden buiten de classe, laat hem dan met een underscore “_” beginnen.
En zoals altijd, comments zijn welkom, scheld me alsjeblieft uit dat ik niet actief op mijn blog ben geweest…
Cheers!
Voorbeeld
Ga er vanuit dat de classe B de bovenstaande functie bevat.
class A extends B
{
protected $var1;
protected $test;
protected $testVar2 = 'hallo';
}
$a = new A();
// Setters
$a->setVar1('test')
->setTest('Sup?');
// Getter
echo $a->getTestVar2();
// Nog een Setter
$a->setTestVar2('iets anders');
// Het resultaat
print_r($a);