Могу ли я использовать PHP try / catch вокруг большого блока HTML? - PullRequest
0 голосов
/ 06 ноября 2010

Я хотел бы заключить весь этот блок кода в попытку / перехват, поскольку он вызывает ошибку, когда в массиве сетки ничего нет. Какой лучший способ сделать это?

 <?php foreach ($grid->result() as $idx => $row): ?>  <?php if ($idx % 3 == 2): ?>
   <div class="img_grid_3"><img src="/images/thumb/<?= $row->images_name; ?>" /></div>
    <?php else: ?>
   <div class="img_grid"><img src="/images/thumb/<?= $row->images_name; ?>" /></div>
   <?php endif; ?>
<?php endforeach; ?>

Спасибо

Ответы [ 3 ]

1 голос
/ 06 ноября 2010

Может быть, я упускаю суть, но почему бы вам не протестировать $ grid перед выполнением foreach?

<?php if($grid): ?>
  .... foreach ....
<?php endif; ?>
0 голосов
/ 06 ноября 2010

foreach не выдаст ошибку, если массив пуст.

Так что либо $grid не является объектом, либо result() возвращает не массив, такой как false или null.Если первый, окружите foreach с if ($grid), из второго, чем используйте if (!empty($grid->result()))

0 голосов
/ 06 ноября 2010

Если я вас правильно понял, вам нужен оператор подавления ошибок @.Если вы передадите пустой массив в foreach, вы получите предупреждение PHP, вы не можете перехватить его с помощью блока try/catch.

<?php @foreach ($grid->result() as $idx => $row): ?>
   <?php if ($idx % 3 == 2): ?>
   <div class="img_grid_3"><img src="/images/thumb/<?= $row->images_name; ?>" /></div>
   <?php else: ?>
   <div class="img_grid"><img src="/images/thumb/<?= $row->images_name; ?>" /></div>
   <?php endif; ?>
<?php endforeach; ?>

Можно использовать блок try catch с содержимым htmlтоже, но он, очевидно, будет ловить только Exceptions.

Обратите внимание, что лучше проверить, пуст массив или нет, прежде чем использовать его в блоке foreach.

...