为什么当将一个方法作为参数传递给另一个方法时,为什么我得到“函数名称必须是字符串”

复杂性

在下面的简单示例中,我只是将数组$ x的参数一个接一个地分配给方法Cmeth。崩溃的语句应该正在执行类似Aobject-> Cmeth(“ ABC”)的操作,但是某些地方已经执行了!

<?php

class A
{
    public function Cmeth($z)
    {
        // do something
    }
}

class B
{
    public function Dmeth(array $w, array $x)
    {
        foreach ($x as $y) {
            $w[0]->$w[1]($y); // crashes with "Function name must be a string"
        }
    }
}

$Bobj = new B;
$u = ["ABC", "DEF"];
$w = [new A, "Cmeth"];

$Bobj->Dmeth($w, $u);
缺口

您需要括$w[1]{}正确解析表达式:

$w[0]->{$w[1]}($y);

否则它将被解释为

($w[0]->$w)[1]($y)

这就是为什么它认为您的函数名称是数组而不是字符串的原因。

3v4l.org上的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么将静态对象作为参数传递给另一个类的构造函数时为null

当我将它作为参数传递给另一个方法时,我的字符串的内容丢失了吗?

将方法名称作为参数传递给另一个方法

为什么函数没有作为道具传递给另一个组件的 onClick

如何将以参数为参数的函数传递给函数名称为字符串的python中的另一个函数?

将一个方法作为参数传递给另一个方法

将变量作为参数传递给另一个函数后,能否以字符串形式访问变量的名称?

将字符串的ArrayList从一个活动传递到另一个活动时,为什么会出现空指针异常?

如何将参数传递给以字符串形式传递给另一个函数的函数?

如何将一个方法内部的字符串数组传递给另一个方法?

将给定的vararg参数传递给另一个函数的合适方法是什么?

将字符串从onLoadFinished方法传递给另一个活动

将加密的字符串作为一个jsp参数从一个jsp传递给另一个

Java8-为什么一个方法需要执行另一个方法作为其参数?

获取传递给另一个函数的函数向量的字符串名称

为什么父类方法在调用另一个父方法时不传递参数,而子类具有相同名称的方法?

PHP 将一个函数作为参数传递给另一个函数

将this指针传递给另一个函数的安全方法是什么?

将反射方法作为参数传递给另一个反射方法作为委托

为什么我必须在React中将一个函数传递给'useState'的setter函数?

为什么在smali代码的方法中传递了另一个参数

将xargs参数作为字符串传递给带有'>'的另一个命令?

asp.net将方法名称作为参数传递给另一个方法

为什么导入的函数“作为”另一个名称保留其原始名称______?

将一个方法作为参数传递给另一个方法,但带有参数

Delphi-将变量指针作为字符串传递给另一个函数

为什么有时将字符串写在一个方向上,有时又写在另一个方向上?

为什么从当前程序包将结构传递给具有文字struct参数的函数与从另一个程序包传递的函数不同?

如何将字符串变量从一个函数传递给另一个函数?