在旧的php中将变量绑定到函数's作用域


php bind variable to function's scope in older PHP

我想将变量绑定到函数的作用域,我可以在php中使用php 5.3之后的'use'关键字来做到这一点,但是我如何在版本<>之前test_use_keyword ();函数test_use_keyword () {测试= 2美元;res =美元到使用($test){返回$el * $test;},数组(3));print_r (res);}

可以使用全局变量,但应该尽可能避免使用全局变量。作为一个建议,在不知道你想用这个

解决什么的情况下
class Xy ( {
  private $test;
  public function __construct ($test) {
    $this->test = $test;
  }
  public function call ($el) {
    return $el * $this->test;
  }
}
print_r(array_map(array(new Xy(2), 'call'), array(3));

也可以使用旧的lambda

$test = 2;
$a = create_function ('$el', 'return $el * ' . $test . ';');
print_r (array_map($a, array(3)));

通常通过全局变量,说真的。虽然黑客可以用来模拟功能,如php中的部分函数。摘自文章:

function partial()
{
  if(!class_exists('partial'))
  {
    class partial{
        var $values = array();
        var $func;
        function partial($func, $args)
        {
            $this->values = $args;
            $this->func = $func;
        }
        function method()
        {
            $args = func_get_args();
            return call_user_func_array($this->func, array_merge($args, $this->values));
        }
    }
  }
  //assume $0 is funcname, $1-$x is partial values
  $args = func_get_args();   
  $func = $args[0];
  $p = new partial($func, array_slice($args,1));
  return array($p, 'method');
}

只有在那之后,你才能有这样的东西。

function multiply_by($base, $value) {
  return $base * $value;
}
// ...
$res = array_map(partial("multiply_by", $test), array(3));

不…值得……它。