在PHP 5.3之前关闭数组内的对象

Dom*_*que 4 php anonymous-function php-5.2

我知道可以使用PHP 5.3(匿名函数)执行以下操作,但在较旧的PHP版本(5.3之前版本)中是否有类似的替代方法?

  $exampleArray = array(  
    'func' => function() {  
      echo 'this is an example';  
      }
Run Code Online (Sandbox Code Playgroud)

是否可以使用__call或首先将该函数作为(对象)进行类型转换?此外,我尝试通过给它起一个名字来使函数匿名,但这似乎不起作用.

Rob*_*bik 9

如果要在PHP <5.3中创建匿名,可以使用 create_function函数.另外这里是关于回调有趣的信息(可能是有用的).

使用示例 create_function

# This (function in other variable is only for cleaner code)
$func = create_function('', "echo 'This is example from anoymus function';");

$exampleArray = array(
  'func' => $func
  );
Run Code Online (Sandbox Code Playgroud)

但你可以用另一种方式做同样的事情:上面的代码:

# Create some function
function func()
{
   # Do something
   echo 'This is example';
}
# Save function name
$func = 'func';
Run Code Online (Sandbox Code Playgroud)

上面的代码创建了做某事的函数,然后我们将函数名存储在变量中(可以作为参数传递等).

当我们只知道它的名字时调用函数:

第一种方式

$func();
Run Code Online (Sandbox Code Playgroud)

替代

call_user_func($func);
Run Code Online (Sandbox Code Playgroud)

以上连接上述所有内容的示例:

function primitiveArrayStep(&$array, $function)
{
    # For loop, foreach can also be used here
    for($i = 0; $i < count($array);$i++)
    {
         # Check if $function is callable             
          if( is_callable($function) )
          {
               # Call function
           $function(&$array[$i]);
          }
          else
          {
               # If not, do something here
          }

    }    
}
Run Code Online (Sandbox Code Playgroud)

并使用上述功能:

$array = array('a', 'b', 'c');

$myFunction = create_function('&$e', '$e = $e . " and i was here";');

primitiveArrayStep($array, $myFunction);

echo '<pre>';
var_dump($array);
Run Code Online (Sandbox Code Playgroud)

返回:

array(3) {
  [0]=>
  string(16) "a and i was here"
  [1]=>
  string(16) "b and i was here"
  [2]=>
  string(16) "c and i was here"
}
Run Code Online (Sandbox Code Playgroud)

链接:


meo*_*ouw 6

是的,可以使用create_function在PHP pre 5.3中创建lamda函数.虽然您的问题提到但实际上并未使用,但无法创建闭包.

甲闭合是具有访问(关闭以上)从它变量的封闭范围的λ函数:

$t = new Thingy;
$func = function( $y ) use( $t ) {
    //$t is available here when this function is called;
}
Run Code Online (Sandbox Code Playgroud)

甲LAMDA函数是用于在变量存储或传递作为参数等.可以使用匿名功能有用create_function()预5.3这样的:

$func = create_function( '$y', 'echo $y;' );

//similar to

$func = function( $y ){ echo $y };
Run Code Online (Sandbox Code Playgroud)