Difference between revisions of "PHP/function variable"

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
< PHP
Jump to navigation Jump to search
 
(One intermediate revision by the same user not shown)
Line 23: Line 23:
 
The variable can be used to call the function in exactly the same way as if it had been assigned an anonymous function.
 
The variable can be used to call the function in exactly the same way as if it had been assigned an anonymous function.
 
===Anonymous Functions===
 
===Anonymous Functions===
 +
<small>''[https://www.php.net/manual/en/functions.anonymous.php official documentation]''</small>
 
<syntaxhighlight lang=php>
 
<syntaxhighlight lang=php>
 
$fEx3 = function() { echo "Anonymous function was called!\n"; };
 
$fEx3 = function() { echo "Anonymous function was called!\n"; };
Line 28: Line 29:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Unlike with predefined functions, however, the type for the variable is '''Callable''' rather than '''string'''.
 
Unlike with predefined functions, however, the type for the variable is '''Callable''' rather than '''string'''.
 +
===Functions as Function Parameters===
 +
If you declare a function parameter as '''Callable''', that parameter will still accept as '''string''' argument, and that argument will remain as a '''string''' (i.e. will not be converted to Callable).
 +
 +
The following code, run after the above examples, illustrates this:
 +
<syntaxhighlight lang=php>
 +
function TestFunc2(Callable $f) {
 +
    echo 'Calling the function: ';
 +
    $f();
 +
    echo 'Type for f: '.gettype($f)."\n";
 +
}
 +
TestFunc2($fEx3);
 +
TestFunc2($fEx2);
 +
</syntaxhighlight>
 +
Output:
 +
<blockquote><poem>
 +
Example1 was called!
 +
Test1 was called!
 +
Anonymous function was called!
 +
Calling the function: Anonymous function was called!
 +
Type for f: object
 +
Calling the function: Test1 was called!
 +
Type for f: string
 +
</poem></blockquote>
 
==Documentation==
 
==Documentation==
 
* [https://www.php.net/manual/en/langref.php Language Reference]:
 
* [https://www.php.net/manual/en/langref.php Language Reference]:

Latest revision as of 18:27, 10 April 2022

About

A variable can store a reference to a function, which can then be called from the variable.

Named Functions/Methods

The thing that isn't explained very well in the documentation is that if you want to assign a predefined function to a variable, you just use a string which is a callable/accessible form of the function.

function Example1() { echo "Example1 was called!\n"; }

#$fEx1 = Example1;  // does not work; sees "Example1" as a constant
$fEx1 = 'Example1';

$fEx1();  // prints "Example1 was called!"
class cExample2 {
    static public function Test1() { echo "Test1 was called!\n"; }
}

#$fEx2 = cExample2::Test1;  // does not work; sees "Test1" as a class constant
$fEx2 = 'cExample2::Test1';
$fEx2(); // prints "Test1 was called!"

The variable can be used to call the function in exactly the same way as if it had been assigned an anonymous function.

Anonymous Functions

official documentation

$fEx3 = function() { echo "Anonymous function was called!\n"; };
$fEx3();  // prints "Anonymous function was called!"

Unlike with predefined functions, however, the type for the variable is Callable rather than string.

Functions as Function Parameters

If you declare a function parameter as Callable, that parameter will still accept as string argument, and that argument will remain as a string (i.e. will not be converted to Callable).

The following code, run after the above examples, illustrates this:

function TestFunc2(Callable $f) {
    echo 'Calling the function: ';
    $f();
    echo 'Type for f: '.gettype($f)."\n";
}
TestFunc2($fEx3);
TestFunc2($fEx2);

Output:

Example1 was called!
Test1 was called!
Anonymous function was called!
Calling the function: Anonymous function was called!
Type for f: object
Calling the function: Test1 was called!
Type for f: string

Documentation