在php中,可以在运行时将函数赋值给类变量


it is possible to assign a function to a class variable at runtime in php?

是否可以在运行时为类变量分配要执行的函数?一种类似于C

的"函数指针"

像这样:(这将不起作用,因为sum超出了A的范围,但这是我指的模式)

 class A {
    public $function_name;
    public functon run($arg1,$arg2){
        $function_name($arg1,$arg2);
    }
}  
function sum($a,$b){
    echo $a+$b;
}
$a=new A();
$a->function_name='sum';
$a->run();     

[编辑]我知道有"call_user_func",但它需要,因为我理解有作用域内的函数或使用公共类方法

如果使用PHP>5.3.0:

$sum = function($a, $b) {
    return $a+$b;
}
$a->function_name = $sum;

Using call_user_func_array:

<?php
class A {
    public $function_name;
    public function run($arg1,$arg2){
        return call_user_func_array( $this->function_name, array($arg1, $arg2 ) );
    }
}  
function sum($a,$b){
    return $a+$b;
}
$a=new A();
$a->function_name= 'sum';
var_dump( $a->run(1,1) ); //2
?>

无论作用域如何,它都可以工作。只要用call_user_func就行了。我还在你的例子中修复了几个打字错误。

<?php
    class A {
        public $function_name;
        public function run($arg1, $arg2) {
        call_user_func($this->function_name, $arg1, $arg2);
        }
    }  
    function sum($a, $b){
        echo $a + $b;
    }
    $a = new A();
    $a->function_name = 'sum';
    $a->run(2, 3);
?>
<<p> 生活例子/strong>

另一种方法是使用变量变量(适用于对象方法)

public static function sum($arg1, $arg2)
{
  ..
}
public function run($arg1, $arg2)
{
  $func = $this->function_name;
  $func( $arg1, $arg2);         <-- procedural call
  self::$func($arg1, $arg2);    <-- static method call
}

使用Callback伪类型的任意变体。与call_user_func或call_user_func_array一起使用

手册中给出了上述用法的大量示例。

如果您希望能够轻松地在其中使用$this关键字,请参阅新的php 5.4 Closure::bindTO方法。