【问题标题】:Can I use PHP try/catch around a large block of HTML?我可以在一大块 HTML 中使用 PHP try/catch 吗?
【发布时间】:2010-11-05 23:23:58
【问题描述】:

我想将整个代码块包含在 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; ?>

谢谢

【问题讨论】:

    标签: php exception try-catch


    【解决方案1】:

    也许我没有抓住重点,但你为什么不在 foreach 之前测试 $grid?

    <?php if($grid): ?>
      .... foreach ....
    <?php endif; ?>
    

    【讨论】:

    • 我正在使用 codeigniter 框架。 Grid 将始终是一个数组,但它可能不会被填充。
    【解决方案2】:

    如果我没听错,您正在寻找 @ 错误抑制运算符。如果你将一个空数组传递给 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; ?>
    

    也可以使用带有 html 内容的 try catch 块,但它显然只会捕获 Exceptions

    请注意,在 foreach 块中使用数组之前检查数组是否为空会更简洁。

    【讨论】:

      【解决方案3】:

      如果数组为空,foreach 不会产生错误。

      所以要么$grid 不是对象,要么result() 返回一个非数组,如falsenull。如果是前者,用if ($grid)包围foreach,后者,而不是使用if (!empty($grid-&gt;result()))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-20
        • 2022-11-03
        • 1970-01-01
        • 2013-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多