gpt4 book ai didi

php - 在字符串中访问一个对象两次

转载 作者:搜寻专家 更新时间:2023-10-31 21:05:57 25 4
gpt4 key购买 nike

当我试图在我的查询中放入一些对象值时,我在 PHP 和 MySQL 中注意到了这一点。我做了一些谷歌搜索“两次访问对象属性”和“-> PHP 两次”,但找不到太多结果。我认为这是 PHP 处理字符串的方式,需要更多信息。这是我的问题:

<?php
class Object {
public function __construct() {
$this->a = new A();
echo "This x is '$this->a->x'";
}
}

class A {
public function __construct() {
$this->x = 1;
}
}

$object = new Object();
?>

上面的代码会引发错误:E_RECOVERABLE_ERROR : type 4096 -- Object of class A could not be converted to string -- at line 5

但是,如果我们像这样给它一个临时变量:

<?php
class Object {
public function __construct() {
$this->a = new A();
$x = $this->a->x;
echo "This x is '$x'";
}
}

class A {
public function __construct() {
$this->x = 1;
}
}

$object = new Object();
?>

然后它就完全可以正常工作,或者如果我们将它连接起来,它也可以正常工作

<?php
class Object {
public function __construct() {
$this->a = new A();
echo "This x is '" . $this->a->x . "'";
}
}
?>

双引号 PHP 字符串应该能够识别前缀为 $ 的变量并自动替换它们。如果我们只访问对象属性一次(-> single),这也能正常工作。我认为 PHP 双引号字符串在单个 -> 之后停止处理,因此导致错误的原因:

E_RECOVERABLE_ERROR:类型 4096 -- A 类对象无法转换为字符串 -- 在第 5 行

如果它只被访问一次(因为 $this->a 仍然是一个对象),这是有道理的。我并不完全相信,也无法在 PHP 中找到太多关于此的信息,所以我想知道是否有人可以详细说明或详细说明这一点以及为什么会发生这种情况?

最佳答案

你是对的。 PHP 只接受 $this->a 作为变量。您也可以在 PHP manual 中看到这一点:

Similarly, an array index or an object property can be parsed. With array indices, the closing square bracket (]) marks the end of the index. The same rules apply to object properties as to simple variables.

这意味着在双引号字符串中:

$arr[0][1] = "X"; 
echo "$arr[0][1]"; //Same as echo $arr[0] . "[1]";

$o = (object)["a" => (object)["b" => "X"]];
echo "$o->a->b"; //Same as echo $o->a "->b";

所以要解决这个问题,你必须使用复杂的 curl 语法,例如

echo "{$o->a->b}";
↑See here↑

有了它,您可以明确定义变量是什么以及普通字符串是什么。

关于php - 在字符串中访问一个对象两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32417616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com