【问题标题】:var_dump says I have an object, but php error says I am trying to get the value of a non-objectvar_dump 说我有一个对象,但是 php 错误说我正在尝试获取非对象的值
【发布时间】: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_dumpprint_r 都将它称为一个对象并且使用(object) 进行强制转换并不能解决它(尽管如果它是一个数组,我将只使用@ 987654336@).

【问题讨论】:

  • 这就是整个 var_dump
  • 是的,我也认为 vardump 的一些元素已经说过属性,但有些没有
  • 请将此减少到所需的minimal reproducible example。我相信你会在自己的路上发现错误。此外,了解如何使用调试器来逐步执行代码。
  • 我要试试这个。 developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/… 只是把它留在这里,以防有人偶然发现并需要同样的建议。如果链接不正确,我会在我尝试后更新。

标签: php object foreach


【解决方案1】:

您正在尝试将“$mediaManagerImagesSubform”用作一个数组,而它是一个对象;

尝试类似:

foreach ($image->mediaManagerImagesSubform->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) . '"';
}

最后,删除不必要的循环(我的意思是foreach ($image-&gt;mediaManagerImagesSubform as $imageSubform) 部分)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2014-01-28
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多