我一直想知道是否可以在PHP中传递函数作为参数; 我想要一些像你在JS编程的东西:
object.exampleMethod(function(){
// some stuff to execute
});
Run Code Online (Sandbox Code Playgroud)
我想要的是在exampleMethod中的某个地方执行该功能.这可能在PHP?
zom*_*bat 137
如果您使用的是PHP 5.3.0或更高版本,则可能.
请参阅手册中的匿名函数.
在您的情况下,您将定义exampleMethod如下:
function exampleMethod($anonFunc) {
//execute anonymous function
$anonFunc();
}
Run Code Online (Sandbox Code Playgroud)
web*_*ave 47
只是要添加到其他人,您可以传递一个函数名称:
function someFunc($a)
{
echo $a;
}
function callFunc($name)
{
$name('funky!');
}
callFunc('someFunc');
Run Code Online (Sandbox Code Playgroud)
这将在PHP4中运行.
Sai*_*ght 13
只需像这样编码:
function example($anon) {
$anon();
}
example(function(){
// some codes here
});
Run Code Online (Sandbox Code Playgroud)
如果你能发明这样的东西(灵感来自Laravel Illuminate)会很棒:
Object::method("param_1", function($param){
$param->something();
});
Run Code Online (Sandbox Code Playgroud)
小智 6
PHP 版本 >= 5.3.0
function test($test_param, $my_function) {
return $my_function($test_param);
}
test("param", function($param) {
echo $param;
}); //will echo "param"
Run Code Online (Sandbox Code Playgroud)
$obj = new stdClass();
$obj->test = function ($test_param, $my_function) {
return $my_function($test_param);
};
$test = $obj->test;
$test("param", function($param) {
echo $param;
});
Run Code Online (Sandbox Code Playgroud)
class obj{
public function test($test_param, $my_function) {
return $my_function($test_param);
}
}
$obj = new obj();
$obj->test("param", function($param) {
echo $param;
});
Run Code Online (Sandbox Code Playgroud)
class obj {
public static function test($test_param, $my_function) {
return $my_function($test_param);
}
}
obj::test("param", function($param) {
echo $param;
});
Run Code Online (Sandbox Code Playgroud)
根据@ zombat的回答,最好首先验证匿名函数:
function exampleMethod($anonFunc) {
//execute anonymous function
if (is_callable($anonFunc)) {
$anonFunc();
}
}
Run Code Online (Sandbox Code Playgroud)
或者从PHP 5.4.0开始验证参数类型:
function exampleMethod(callable $anonFunc) {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88789 次 |
| 最近记录: |