note 105936 deleted from language.oop5.magic by cmb
| From: | cmb@php.net | Date: | Sun, 10 Nov 2019 12:37:26 +0000 |
| Subject: | note 105936 deleted from language.oop5.magic by cmb | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-212983@lists.php.net to get a copy of this message | ||
Note Submitter: hyponiq at gmail dot com
----
I think it's fair to note the undocumented fact that the __invoke magic method can take any
number of arguments (or none).
Example:
<?php
class InvokeNoParams {
    function __invoke()
    {
        print __METHOD__ . PHP_EOL;
        $i = 1;
        foreach (func_get_args() as $arg) {
            print "The value of \$param{$i} is: " .
$arg . PHP_EOL;
            ++$i;
        }
print PHP_EOL;
    }
}
Â
class InvokeSingleParam {
    function __invoke($param1)
    {
        print __METHOD__ . PHP_EOL;
        print "Value of \$param1 is: " . $param1 . PHP_EOL .
PHP_EOL;
    }
}
Â
class InvokeMultiParams {
    function __invoke($param1, $param2, $param3) {
        print __METHOD__ . PHP_EOL;
        print "Value of \$param1 is: " . $param1 . PHP_EOL;
        print "Value of \$param2 is: " . $param2 . PHP_EOL;
        print "Value of \$param3 is: " . $param3 . PHP_EOL .
PHP_EOL;
    }
}
Â
$no = new InvokeNoParams;
$single = new InvokeSingleParam;
$multi = new InvokeMultiParams;
Â
$no(1, 2, 3);
$single('one param');
$multi('param 1', 'param 2', 'param 3');
?>
This outputs:
InvokeNoParams::__invoke
The value of $param1 is: 1
The value of $param2 is: 2
The value of $param3 is: 3
InvokeSingleParam::__invoke
Value of $param1 is: one param
InvokeMultiParams::__invoke
Value of $param1 is: param 1
Value of $param2 is: param 2
Value of $param3 is: param 3