gpt4 book ai didi

php - 将静态函数分配给PHP中的变量

转载 作者:可可西里 更新时间:2023-11-01 13:19:45 26 4
gpt4 key购买 nike

我想将一个静态函数分配给一个变量,以便我可以将它作为参数发送。例如:

class Foo{
private static function privateStaticFunction($arg1,$arg2){
//compute stuff on the args
}

public static function publicStaticFunction($foo,$bar){

//works
$var = function(){
//do stuff
};

//also works
$var = function($someArg,$someArg2){
//do stuff
};

//Fatal error: Undefined class constant 'privateStaticFunction'
$var = self::privateStaticMethod;

//same error
$var = Foo::privateStaticFunction;

//compiles, but errors when I try to run $var() somewhere else, as expected
//Fatal error: Call to private method Foo::privateStaticMethod() from context ''
$var = function(){
return Foo::privateStaticMethod();
};
}
}

我尝试了更多变体,但没有一个起作用。

我什至不希望这种功能性黑客能够与 PHP 一起工作,但是嘿,谁知道呢?

是否可以在 PHP 中执行此操作,或者我是否需要使用 eval 进行一些修改?

附注:##php 上的 LawnGnome 提到了一些关于可以使用 array('Foo','privateStaticMethod') 但我不明白他的意思,看他看起来很忙,我也没有再催促他。

最佳答案

您想使用 call_user_func带有数组参数。

$var = array('Foo','privateStaticMethod');
call_user_func($var);

请注意,该方法的“私有(private)”说明符将使其只能在 Foo 类中以这种方式调用。

call_user_func 需要一个 callable作为第一个参数。请注意,从 PHP 5.2.3 开始,您可以避免使用数组表示法。

Static class methods can also be passed without instantiating an object of that class by passing the class name instead of an object at index 0. As of PHP 5.2.3, it is also possible to pass 'ClassName::methodName'.

关于php - 将静态函数分配给PHP中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12594173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com