PHP 5.5.12-是foreach将我的对象投射到数组中


PHP 5.5.12 - Is foreach casting my objects into arrays?

为存档编辑:

在网上其他地方阅读时,我的印象是,您可以在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