也许有人可以帮助解释这个匿名对象的奇怪行为:
CMAKE_MODULE_PATH
在以下循环中,我可以将值分配给$equipTest = (object) [
$leakageLimit = "",
$description = "",
$location = "",
$text = "",
];
$description = "";
而没有任何问题。
$leakageLimit
但$equipTest->leakageLimit = $temp;
不会让我连接错误/通知:
$location
结果:
注意(8):未定义的属性:
$equipTest->location .= $temp;
正如stdClass::$location
所做的那样,直到我在循环外声明了一个temp var。我在循环中为temp描述赋值:
$equipTest->description
然后将它分配给循环结束时的对象:
$description .= $temp;
为什么我不能连接到这个匿名对象?在我把它作为一个完全声明的类的一部分之前,它还可以。
答案 0 :(得分:2)
此代码
[
$leakageLimit = "",
$description = "",
$location = "",
$text = "",
]
并不意味着
使用四个命名的元素创建数组,并使用空字符串初始化每个元素。
这意味着
创建四个数字索引元素的数组,并设置每个元素的值,作为将空字符串赋值给变量的结果。
分配的结果是分配的值,即 - 空字符串。
所以,如果你
print_r([
$leakageLimit = "",
$description = "",
$location = "",
$text = "",
]);
你会看到有4个空值的数组。此外,您的变量$leakageLimit
,$description
,$location
,$text
也将设置为空字符串。
因此,如果要创建具有四个命名属性的对象,则代码为:
$equipTest = (object) [
'leakageLimit' => "",
'description' => "",
'location' => "",
'text' => "",
];
答案 1 :(得分:0)
您的部分问题是您正在向array
投放object
。这有时产生不可预测的事情,而且它在这里。如果你var_dump($equipTest)
你会得到什么
object(stdClass)#1 (4) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
[3]=>
string(0) ""
}
你会注意到它并没有像你期望的那样保留键。当你这样做
$equipTest->leakageLimit = 'someval';
它实际上创建了变量。
object(stdClass)#1 (5) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
[3]=>
string(0) ""
["leakageLimit"]=>
string(7) "someval"
}
如果我是你,我会先创建一个定义这些值的类,然后再连接它们。它避免了the nasty side effects of casting