1

当我遇到如下声明时,我正在尝试调试 PHP 脚本:

$cart = new form;
$$cart = $cart->function();

是什么 $$cart

4

2 回答 2

1

PHP 在声明时所做$$cart的是尝试获取$cart对象的字符串值,并将其用作该变量变量的名称。这意味着它必须调用__toString()其类的魔法方法。

如果类中没有__toString()方法,这将导致一个可捕获的致命错误:

可捕获的致命错误: MyClass 类的对象无法转换为字符串...

否则,$$cart变量变量的名称是该魔术方法返回的对象的字符串值。

实现了魔术方法的示例__toString()(不同的类/名称,但类似于您的示例调用代码):

class MyClass {
    public function __toString() {
        return 'foo';
    }
    public function some_method() {
        return 'bar';
    }
}

$obj = new MyClass();
$$obj = $obj->some_method();

echo (string) $obj, "\n"; // foo
echo $$obj; // bar
于 2010-10-23T07:12:33.480 回答
0

双 $ 用于变量变量。

本质上,这意味着第二个 $ 以及单词是一个变量,其值用于第一个 $ 的名称

IE-

$first  = "second";

$second = 'Goodbye';

echo $$first; // Goodbye
于 2010-11-13T04:07:38.183 回答