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

发布于 2024-09-28 20:39:29 字数 141 浏览 8 评论 0 原文

当我遇到这样的声明时,我正在尝试调试 PHP 脚本:

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

什么是 $$cart

I was trying to debug a PHP script when I came across a declaration like:

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

What is $$cart?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人间☆小暴躁 2024-10-05 20:39:30

double $ 用于可变变量。

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

$first  = "second";

$second = 'Goodbye';

echo $first; // Goodbye

the double $ is used for a variable variable.

essentially what this entails is the second $ along with the word is a variable the value of which is used for the name of the first $

i.e.-

$first  = "second";

$second = 'Goodbye';

echo $first; // Goodbye
娇纵 2024-10-05 20:39:29

当您声明 $$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

What PHP does when you declare $$cart, is try to get the string value of the $cart object, and use that as the name for this variable variable. This means it'd have to call the __toString() magic method of its class.

If there is no __toString() method in the class, this will cause a catchable fatal error:

Catchable fatal error: Object of class MyClass could not be converted to string...

Otherwise, the name of the $$cart variable variable is the string value of the object as returned by that magic method.

An example with the __toString() magic method implemented (different classes/names but similar to your example calling code):

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文