【发布时间】:2019-10-14 11:38:54
【问题描述】:
当我的var_dump 说我有一个对象时,我不明白为什么它说我正在尝试获取非对象的属性。下面是我的var_dump 的输出。它清楚地表明:
["chooseImagesTypes"]=>
object(stdClass)#1620 (2) {
["chooseImagesTypes0"]=>
object(stdClass)#1619 (3) {
所以说两者都是对象。我尝试在我的代码之前添加(object) 以确保它是一个对象而不是数组,但这不起作用。这是完整的var_dump、错误消息和我的代码。
var_dump
object(stdClass)#1622 (4) {
["images0"]=>
object(stdClass)#1617 (2) {
["mediaManagerImagesSubform"]=>
object(stdClass)#1618 (3) {
["maxOrMinSize"]=>
string(9) "min-width"
["mediaQuerySize"]=>
string(3) "959"
["chooseImagesTypes"]=>
object(stdClass)#1620 (2) {
["chooseImagesTypes0"]=>
object(stdClass)#1619 (3) {
["mediaManagerOrUrl"]=>
string(1) "1"
["mediaManagerImage"]=>
string(0) ""
["externalUrlImage"]=>
string(44) "homepage/joomla-london-hero-image--1200.webp"
}
}
}
我的代码
echo "<pre>";
var_dump($images);
echo "</pre>";
echo '<picture>';
foreach ($images as $image) {
foreach ($image->mediaManagerImagesSubform as $imageSubform) {
foreach ((object)$imageSubform->chooseImagesTypes as $imageType) {
if(!empty($imageType[$i]->$externalUrlImage)) {$imageURL = $imageType[$i]->$externalUrlImage;}
else {$imageURL = $imageType->$mediaManagerImage;}
echo '<source ';
echo 'media="(' . $imageSubform->maxOrMinSize . ':' . $imageSubform->mediaQuerySize . 'px)" ';
echo 'srcset="' . $imageURL . '" ';
echo 'type="image/' . substr($imageURL, strrpos($imageURL, '.') + 1) . '"';
}
}
echo '>';
}
echo '<img src="' . $defaultImage . '"' . ' alt="' . $altText . '">';
echo "</picture>";
}
错误信息
Notice: Trying to get property 'chooseImagesTypes' of non-object in /x~/default.php on line 54
为什么它告诉我它不是一个对象?
有没有更好的方法来执行嵌套的 foreach 语句?
我尝试过的事情。
使用 (object) 将其转换为对象。也没有那个。
(object)$imageSubform->chooseImagesTypes
使用这样的迭代符号(有和没有)。我在各个地方都试过了,但都没有成功。
$imageType[$i]
让我感到困惑的是,其他部分似乎使用相同的代码工作,我看不出有什么区别。通常在这样的情况下,我发现它是一个数组,但var_dump 和print_r 都将它称为一个对象并且使用(object) 进行强制转换并不能解决它(尽管如果它是一个数组,我将只使用@ 987654336@).
【问题讨论】:
-
这就是整个
var_dump? -
是的,我也认为 vardump 的一些元素已经说过属性,但有些没有
-
请将此减少到所需的minimal reproducible example。我相信你会在自己的路上发现错误。此外,了解如何使用调试器来逐步执行代码。
-
我要试试这个。 developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/… 只是把它留在这里,以防有人偶然发现并需要同样的建议。如果链接不正确,我会在我尝试后更新。