var_dump говорит, что у меня есть объект, но ошибка php говорит, что я пытаюсь получить значение не-объекта - PullRequest
0 голосов
/ 14 октября 2019

Я не могу понять, почему он говорит, что я пытаюсь получить свойство необъекта, когда мой 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"
        }
      }
    }

Мой код

<code>    echo "<pre>";
    var_dump($images);
    echo "
"; echo ''; foreach ($ images as $ image) {foreach ($ image-> mediaManagerImagesSubform as $ imageSubform) {foreach ((объект) $ imageSubform-> chooseImagesTypes как $ imageType) {if (! пусто ($ imageType [$ i] -> $ externalUrlImage)) {$ imageURL = $ imageType [$ i] -> $ externalUrlImage;} else {$ imageURL = $ imageType -> $ mediaManagerImage;} echo '«;} echo '' . $altText . '';echo "";}

Сообщение об ошибке

Notice: Trying to get property 'chooseImagesTypes' of non-object in /x~/default.php on line 54

Почему он говорит, что это не объект?
Есть ли лучший способ сделать вложенныйзаявления foreach?

То, что я пытался.

Приведение его в качестве объекта с использованием (объекта). Также без этого.

(object)$imageSubform->chooseImagesTypes

Использование итерационных обозначений, как это (с и без). Я пробовал это в разных местах, но безрезультатно.

$imageType[$i]

Меня смущает то, что другие части, кажется, работают с использованием того же кода, и я не вижу разницы. Обычно в подобных случаях я обнаруживаю, что это массив, но var_dump и print_r оба ссылаются на него как на объект, а приведение с использованием (object) не исправляет его (хотя, если это массив, я просто использую ['arrayItem']).

1 Ответ

1 голос
/ 14 октября 2019

Вы пытаетесь использовать "$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->mediaManagerImagesSubform as $imageSubform) часть)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...