您好我正在使用CakePHP,我想知道你们在视图中的所有变量周围放置了isset()或!empty()吗?或者我应该依赖数据验证?建议的解决方案是什么?
答案 0 :(得分:14)
我认为您应该了解isset
和empty
之间的差异,并使用满足您需求的那些。
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)
要回答这个问题,不。
答案 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()
而且在其他编程语言中我也没有使用它。