是否有任何基本的理由在php中使用isset()over @
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了是否有任何基本的理由在php中使用isset()over @,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1668字,纯文字阅读大概需要3分钟。
内容图文
![是否有任何基本的理由在php中使用isset()over @](/upload/InfoBanner/zyjiaocheng/755/3f7a3723ea544170b1e82745e3d98e81.jpg)
所以我正在努力清理一个可怕的代码库,我正在慢慢转向完整的错误报告.
这是一个艰巨的过程,有数百条通知:
Notice: Undefined index: incoming in /path/to/code/somescript.php on line 18
由于使用变量假设未定义的变量将只处理为false,如:
if($_SESSION['incoming']){
// do something
}
目标是能够知道何时引入了错误的未定义变量,使用严格错误/通知检查的能力,作为重构过程的第一阶段 – 最终将包括重写依赖于标准输入的代码点这样的数组.我知道有两种方法可以替换可能定义或未定义的变量
以某种方式抑制通知,如果尚未定义.
仅仅替换像$_REQUEST [‘incoming’]这样的变量实例是相当干净的,这些变量只是寻找真实值
@$_REQUEST['incoming'].
用“标准”测试替换像$_REQUEST [‘incoming’]这样的变量的实例是非常脏的,这是
(isset($_REQUEST['incoming'])? $_REQUEST['incoming'] : null)
而且你添加了一个三元/内联if,这是有问题的,因为你实际上可以在复杂的代码中以不同的方式嵌套parens并完全改变行为.
所以…….使用@错误抑制符号与使用(isset($something)相比,是否有任何不可接受的方面?$something:null)?
编辑:为了尽可能清楚,我不是将“将代码重写为好”与“@”进行比较,由于真正的重构增加了复杂性,这是此过程的后期阶段.我只是比较了我所知道的两种方式(可能还有其他方法),用现在的非通知抛出版本替换$undefined_variable.
解决方法:
另一个选项,似乎适用于在整个地方使用“超级全局”的蹩脚代码,是将全局变量包装在专用数组对象中,具有或多或少明智的[]行为:
class _myArray implements ArrayAccess, Countable, IteratorAggregate
{
function __construct($a) {
$this->a = $a;
}
// do your SPL homework here: offsetExists, offsetSet etc
function offsetGet($k) {
return isset($this->a[$k]) ? $this->a[$k] : null;
// and maybe log it or whatever
}
}
然后
$_REQUEST = new _myArray($_REQUEST);
通过这种方式,您可以获得对“$REQUEST”和朋友的控制权,并可以观察其余代码如何使用它们.
内容总结
以上是互联网集市为您收集整理的是否有任何基本的理由在php中使用isset()over @全部内容,希望文章能够帮你解决是否有任何基本的理由在php中使用isset()over @所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。