当我尝试这样做时:
function a()
{
function b() { }
}
a();
a();
我得到Cannot redeclare b...
当我试图这样做时:
function a()
{
if(!isset(b))
function b() { }
}
a();
a();
我得到unexpected ), expected ...
如何在a
返回时将该函数声明为本地函数并将其遗忘?我需要将函数传递给array_filter
。
答案 0 :(得分:8)
您可以在array_filter
来电中使用anonymous function。
答案 1 :(得分:6)
“本地功能”的概念也被称为“功能内部功能”或“nested function”...... 线索在这个页面anonymous function,由@ceejayoz和@Nexerus引用,但是,让我们解释一下!
通过例子解释:
b()
中的function a(){ function b() {} return b(); }
函数也是全局函数,因此声明与function a(){ return b(); } function b() {}
具有相同的效果。
要在()范围内声明类似“a b()的函数”,唯一的选择是不使用b()
而使用引用$b()
。语法类似于function a(){ $b = function() { }; return $b(); }
PS:在PHP中无法声明“静态引用”,匿名函数永远不会是 static 。
另见:
答案 2 :(得分:3)
您可以尝试PHP具有的create_function
函数。
http://php.net/create_function
$myfunc = create_function(..., ...);
array_filter(..., $myfunc(...));
unset($myfunc);
此方法不需要PHP 5.3 +
答案 3 :(得分:0)
您可以在PHP中定义本地函数,但只能声明一次。这可以通过定义和比较静态变量来实现。
检查以下示例:
<?php
function a()
{
static $init = true;
if ($init) {
function b() { }
$init = FALSE;
}
}
a();
a();
或者通过检查功能是否已存在:
<?php
function a()
{
if (!function_exists('b')) {
function b() { }
}
}
a();
a();