匿名函数可以用作函数的回调,例如。 array_map
,其优势之一是使用use
来使用函数外部的变量。例如:
$var = 10;
$x = array_map(function($e) use ($var) { if($var > 5) return $e['prop']; }, $myArray);
在旧的PHP版本中,当回调必须是现有的函数和函数时,例如。 array_map
接收函数名作为回调参数?
$var = 10;
$x = array_map("myFunction", $myArray);
function myFunction($e) {
//how to get $var here?
}
请记住,除了使用global
变量之外,我正在寻找解决方案。感谢。
答案 0 :(得分:1)
可能是一种愚蠢的方式,但你可以使用带有静态变量的重载类(有点像全局......)。我只建议重载,因为它的工作方式类似于常规变量(如何分配)。
我确信使用PHP的人比我更长时间会有更好的主意。此外,我不确定“旧版本”是什么意思(多久以来“旧”),但重载量至少回到5.0 / 5.1。我认为关闭大约是5.3(根据这个答案Which version of php add anonymous functions)?这不是完全您已概述的方案,但是在不使用真实global
的情况下可以访问该值:
class Overlord
{
private static $properties;
public static $val;
public function __get($property)
{
return (isset(self::$properties[$property]))? self::$properties[$property]:false;
}
public function __set($property,$value)
{
self::$val = self::$properties[$property] = $value;
}
public function __isset($property)
{
return (isset(self::$properties[$property]));
}
}
function myFunction($e) {
return Overlord::$val." overloaded PLUS -->".$e;
}
// Create the mighty overloader class
$ov = new Overlord();
// Assign a variable
$ov->val = 21;
// Random well-thought-out array
$myArray = array("One",1,"Two",2);
// Run through the first variable
$x = array_map("myFunction", $myArray);
// Assign a second random variable
$ov->stuff = 11;
// Run through the array again with new variable
$y = array_map("myFunction", $myArray);
// Array one
print_r($x);
// Array two
print_r($y);
会给你类似的东西:
Array
(
[0] => 21 overloaded PLUS -->One
[1] => 21 overloaded PLUS -->1
[2] => 21 overloaded PLUS -->Two
[3] => 21 overloaded PLUS -->2
)
Array
(
[0] => 11 overloaded PLUS -->One
[1] => 11 overloaded PLUS -->1
[2] => 11 overloaded PLUS -->Two
[3] => 11 overloaded PLUS -->2
)