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