在php中,是否可以在运行时将函数分配给类变量?

在php中,是否可以在运行时将函数分配给类变量?,php,function-pointers,Php,Function Pointers,是否可以在运行时将要执行的函数分配给类变量?一种类似C的“函数指针” 类似这样的情况:(这不起作用,因为sum超出了A的范围,但这就是我的意思) [编辑] 我知道有“call_user_func”,但据我所知,它需要在作用域中使用函数或使用公共类方法,使用: 它可以在任何范围内工作。你只需要用英语来称呼它。我还修复了您示例中的几个拼写错误 <?php class A { public $function_name; public function r

是否可以在运行时将要执行的函数分配给类变量?一种类似C的“函数指针”

类似这样的情况:(这不起作用,因为sum超出了A的范围,但这就是我的意思)

[编辑] 我知道有“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);
?>

如果使用PHP>5.3.0,则可以使用:

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

$a->function_name = $sum;

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

公共静态函数和($arg1,$arg2)
{
..
}
公共函数运行($arg1,$arg2)
{
$func=$this->function\u name;
$func($arg1,$arg2);使用伪类型的任何变体。
与或一起使用

本手册给出了上述各项的使用示例


如果你想在php 5.4中轻松使用$this关键字,还可以看看新的php 5.4方法。

Cool!但是我需要函数声明和类初始化在同一个范围内?@Zorb,你是什么意思,sum是类a的公共方法?你能编辑你的原始问题并把sum放在它应该超出你的范围的地方吗在这里误用
调用用户函数数组()
。如果您知道应该使用的参数,只需使用
调用用户函数()
,如果不知道,您应该执行
$args=func\u get\u args();调用用户函数数组($this->function\u name,$args);
而不是从已知参数创建数组。@rdlowrey当然,我不知道为什么它会首先出现在我的脑海中。只是想快速得到答案:P@Esailija我在想,如果类不能直接看到函数,我将它传递给类,该函数可以使用它吗?现在是清楚的,谢谢!可能是重复的
<?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);
?>
$sum = function($a, $b) {
    return $a+$b;
}

$a->function_name = $sum;
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
}