栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何避免isset()和empty()

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何避免isset()和empty()

恕我直言,您不仅应该考虑使应用程序“与E_NOTICE兼容”,还应该对整个事情进行重组。在您的代码中有 数百个
点经常尝试使用不存在的变量听起来像一个结构很差的程序。尝试访问不存在的变量永远不会发生,其他语言在编译时会对此表示沮丧。PHP允许您这样做的事实并不意味着您应该这样做。

这些警告可以 帮助 您,而不会惹恼您。如果收到警告 “您正在尝试使用不存在的东西!” ,您的反应应该是 “糟糕,我的糟糕,让我尽快解决该问题。”
您还如何区分 “在未定义的范围内有效的变量”可能导致严重错误的诚实错误代码 之间的区别?这也是为什么您始终 _总是_将错误报告转为11并继续插入代码直到没有一个出现的原因

NOTICE
发行。关闭错误报告仅适用于生产环境,从而避免信息泄漏并即使面对错误代码也能提供更好的用户体验。


详细说明:

您将始终需要在代码中

isset
empty
代码中的某个位置,减少它们出现的唯一方法是正确初始化变量。根据情况,有不同的方法可以执行此操作:

函数参数:

function foo ($bar, $baz = null) { ... }

有没有必要检查是否

$bar
$baz
设置里面的功能,因为你设置它们,你需要担心的是,如果他们的价值评估为
true
false
(或任何其他)。

任何地方的常规变量:

$foo = null;$bar = $baz = 'default value';

在将要使用它们的代码块的顶部初始化变量。这样可以解决

!isset
问题,确保您的变量始终具有已知的默认值,使读者可以了解以下代码将要处理的内容,从而也可以作为一种自说明文件。

数组:

$defaults = array('foo' => false, 'bar' => true, 'baz' => 'default value');$values = array_merge($defaults, $incoming_array);

与上述相同,您正在使用默认值初始化数组,并使用实际值覆盖它们。

在其余情况下,假设您要在模板中输出可能由控制器设置或可能未设置的值,则只需检查以下内容:

<table>    <?php if (!empty($foo) && is_array($foo)) : ?>        <?php foreach ($foo as $bar) : ?> <tr>...</tr>        <?php endforeach; ?>    <?php else : ?>        <tr><td>No Foo!</td></tr>    <?php endif; ?></table>

如果您发现自己经常使用

array_key_exists
,则应该评估其用途。唯一的改变是在这里:

$array = array('key' => null);isset($array['key']); // falsearray_key_exists('key', $array); // true

如上所述,但是,如果您正确初始化变量,则无需检查键是否存在,因为您知道它确实存在。如果您收到来自外部源的阵列,该值将最有可能不是

null
,但是
''
0
'0'
false
或类似的东西,也就是一个值,你可以用评估
isset
或者
empty
,这取决于你的意图。如果您定期将数组键设置为,
null
并希望它的含义不是
false
,即在上例中,如果程序逻辑的不同结果
isset
array_key_exists
不同之处,您应该问自己为什么。仅仅存在一个变量并不重要,只有其值才有意义。如果键是
true
/
false
标志,则使用
true
或者
false
,不是
null
。唯一的例外是希望
null
表示某些含义的第三方库,但是由于
null
很难在PHP中检测到,因此我尚未找到任何可以做到这一点的库。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号