isset()或!empty()函数对视图中的所有变量有效吗?

时间:2009-12-21 03:45:52

标签: php cakephp views

您好我正在使用CakePHP,我想知道你们在视图中的所有变量周围放置了isset()或!empty()吗?或者我应该依赖数据验证?建议的解决方案是什么?

6 个答案:

答案 0 :(得分:14)

我认为您应该了解issetempty之间的差异,并使用满足您需求的那些。

如果变量的非空非零值,

empty将返回FALSE

以下值被视为为空

  • ""(空字符串)
  • 0(0为整数)
  • "0"(0为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • var $var;(声明的变量,但类中没有值)

另一方面,isset如果变量不存在或未设置FALSE,或者变量已设置为unset(),则会返回NULL。< / p>

答案 1 :(得分:4)

这是一个非常广泛的问题。这取决于你是否可以期望变量始终存在,或者是否可能合理地存在变量。如果根据您的程序结构,程序中此时应始终存在某个变量,则不应检查其是否存在。通过这种方式,当一些东西搞砸了,你知道出了什么问题,你会得到一个很好的警告。如果,OTOH,您希望变量有时不存在,您需要检查此情况以优雅地捕获否则将导致的错误。

此外,isset!empty之间的选择取决于您的意思是“已设置而非null”还是“已设置并包含不被视为false的内容”。这是一个很小但有时很重要的区别。

答案 2 :(得分:1)

就个人而言,我习惯使用isset,否定不是我经常使用的东西。

答案 3 :(得分:1)

要回答这个问题,不。

  1. 如果模型中的值不能为null,那么我不会。
  2. 如果是错误和空集,那么最好重定向添加页面而不是404。
  3. 当我在视图中使用它时,它通常处于较高的水平,因此我不必经常写。
  4. 3涉及到经常需要仔细设计您的模型。因此,使用Isset和!empty是不能在这些模型上工作的。

  5. 可选项似乎通常也属于一对多关系,因为这些foreach循环比检查每个值更有效。

答案 4 :(得分:0)

当它是这个或那个

之间的选择时

如果未设置,则为空 &LT; =&GT; 当它不为空时,它被设置

但是当它被设置时,它可能是空的......可能不是..........

所以这是不同的

答案 5 :(得分:0)

当您从控制器执行$this->set(compact('posts', 'tags', 'categories'));之类的操作时,只有非null的变量才会被发送到视图。因此,如果您之前已完成$categories = $this->Categories->find('all', ...);并且未返回任何结果,那么您的视图中将不会存在$categories。所以为了回答你的问题,在视图中,我只是这样做:

<?php if (isset($categories)): ?>
    <ul>
        <?php foreach ($categories as $category): ?>
            <li>{output category information here}</li>
        <?php endforeach; ?>
    </ul>
<?php else: ?>
    <p>No categories</p>
<?php endif; ?>

空值也不等于true,因此您可以执行以下操作:

<dl>
    <dt>Title</dt>
    <dd><?php echo $category['Category']['title']; ?></dd>
    <dt>Description</dt>
    <dd>
        <?php if ($category['Category']['description']): ?>
            <?php echo $category['Category']['description']; ?>
        <?php else; ?>
            None
        <?php endif; ?>
    </dd>
</dl>

简而言之,我只使用isset()来避免有关未设置变量的错误。

我很少使用empty()而且在其他编程语言中我也没有使用它。