为存档编辑:
在网上其他地方阅读时,我的印象是,您可以在foreach
循环中可互换地访问对象属性和数组成员。然而,这是不正确的。正如我接受的答案的评论中所提到的,foreach
无论如何都不会改变类型提示或强制转换。我的问题源于一个函数传递了一个数组,而不是一个对象数组。
$AllMessages = func_getAllMessages($ThreadID);
foreach($AllMessages as $Message) {
echo $Message->Body; // Error
echo $Message['Body']; // Works
}
说明:
func_getAllMessages()
一个从数据库返回匹配数据的简单函数。仔细一看,这就是我的问题的根源。我期望的是一个对象数组,而不是它实际提供的数组。如果您有类似的问题,请检查此项!
简而言之:foreach
不会改变类型转换/类型提示。如果无法以某种方式访问数据,请检查向foreach
提供数据的内容。
您可以将其转换为对象
foreach($AllMessages as $Message) {
$Message= (object) $Message;
echo $Message->Body;
}
参见示例2