Classes kunnen we automatisch laden wanneer we deze voor de eerste maal aanroepen. Voor functies bestaat niet zo 'n mogelijkheid. Indien we dit zouden willen dan kunnen we in plaats van een functie een class schrijven en daarin de __invoke methode plaatsen. Deze methode wordt aangeroepen als we een class willen aanroepen als een methode. Dus als een functie.
Voorbeeld 1:
<?php
class function_verdubbel
{
public function __invoke($number)
{
return 2*$number;
}
}
$verdubbel = new function_verdubbel;
$aha = $verdubbel(123);
echo $aha;
?>
Voorbeeld 2
<?php
class function_trippel
{
private $_number;
public function __construct($number)
{
$this->_number = $number;
}
public function __invoke($number=NULL)
{
if( NULL === $number ) $number=$this->_number;
return 3*$number;
}
public function __tostring()
{
$out = $this->__invoke($this->_number);
return "$out";
}
}
$oho = new function_trippel(321);
echo $oho;
?>
Het is natuurlijk een kunstgreep. Het voordeel is dat je niet een include moet gebruiken maar een new. Als je functie(class) verplaatst wordt dan moet alleen je autoloader aangepast worden en verder geen enkel ander bestand waar je deze functie gebruikt.
Echt leuk zou zijn als PHP ook een autoloader voorziet voor functies. Iets voor 5.4/6.0?
Graag jullie gedachten.
Marc
1.557 views