相关疑难解决方法(0)

PHP:call_user_func_array:通过引用问题传递

当函数包含引用的参数时,以下函数会生成错误,例如:

function test(&$arg, &$arg2)
{
  // some code
}
Run Code Online (Sandbox Code Playgroud)

现在我不能call_user_func_array用于上面的功能,它会产生错误.

如何解决这个问题呢?

我确实需要使用call_user_func_array.

还假设我事先不知道它们是通过引用传递还是通过值传递.

谢谢

php function-calls

6
推荐指数
2
解决办法
8052
查看次数

使用类属性作为函数名称调用变量函数

下面的代码使用存储在属性$ prop中的字符串"rand"来调用rand()作为变量函数,使用$ function作为临时局部变量.

class C
{
    private $prop = "rand";

    public function execute()
    {
        $function = $this->prop;
        echo $function();
    }
}

$c = new C();
$c->execute();
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我需要使用一个语句并避免使用临时变量来调用存储在$ this-> prop中的变量函数.

我没有运气

echo $this->prop();
Run Code Online (Sandbox Code Playgroud)

因为它实际上调用了不存在的方法prop(),并且在任何情况下它都不是我想要做的.

由于$ this-> prop实际上是一个字符串,我尝试了以下内容,但它产生了语法错误:

echo ($this->prop)();
Run Code Online (Sandbox Code Playgroud)

我也试过了

echo call_user_func($this->prop);
Run Code Online (Sandbox Code Playgroud)

虽然它可以完成工作,但它不是我的选择,因为它不是一个可变函数.

看起来变量函数只能使用局部变量作为函数名.

有没有人知道使用类属性作为函数名直接调用变量函数的方法,避免使用本地临时变量和call_user_func()的用法?

编辑: 我理解你的困惑,因此我将解释使用call_user_func时出了什么问题.

我只是在探索变量函数提供的机会,这似乎比变量变量提供的机会少.

让我们尝试使用变量变量将其最简单的形式.

假设我们有一个函数f(),它返回字符串"something"

function f() {
  return "something";
}
Run Code Online (Sandbox Code Playgroud)

然后是包含字符串"something"的类属性

$this->prop = "something";
Run Code Online (Sandbox Code Playgroud)

$ something是一个局部变量

$something = "I am a local variable";
Run Code Online (Sandbox Code Playgroud)

然后以下所有语句都将起作用:

$r = ${"something"};
$r = ${$this->prop};
$r = ${f()};
Run Code Online (Sandbox Code Playgroud)

我的个人结论:无论字符串"东西"如何获得; 用大括号{}围绕它,并在前面添加美元符号$,将其视为变量.相当flessibe. …

php

6
推荐指数
1
解决办法
2051
查看次数

标签 统计

php ×2

function-calls ×1