声明$$ [对象名称]时会发生什么?

时间:2010-10-23 07:04:03

标签: php variable-variables

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

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

什么是$$cart

2 个答案:

答案 0 :(得分:1)

声明$$cart时PHP的作用是尝试获取$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

答案 1 :(得分:0)

double $用于变量变量。

基本上这就是第二个$以及单词是一个变量,其值用于第一个$的名称

即.-

$first  = "second";

$second = 'Goodbye';

echo $$first; // Goodbye