PHP:不同机器上的“注意”警告

5
我已经在新机器上设置好了所有的PHP内容,但是我收到了很多通知和警告。
我的代码在旧机器上没有错误地正常工作。
例如,以下行(应该获取记录集值)将导致一个通知: $ID = $rs[id];
原因是id字段缺少引号,还有像在不存在的值上调用$_GET也会导致通知。
有人知道这是什么原因吗? 我希望像在旧机器上一样保持“简单”的编码方式,而不必在记录集上添加引号或大量使用isset() - 有什么想法吗?
谢谢

1
有什么想法吗?尝试编写漂亮的代码。或者普通一点。至少不要有异味。http://pear.php.net/manual/en/coding-standards.php http://groups.google.com/group/php-standards/web/psr-0-final-proposal?pli=1 - OZ_
4个回答

5
新机器上的PHP安装具有更强大的配置,可以显示提示信息,而不仅仅是错误。这很好。我从不在服务器上编写或接受触发某些提示的PHP脚本。
这种“懒惰”的编码(请原谅,我想帮助您!)会带来未来的问题(代码难以阅读和调试),并间接引起安全问题(“懒惰”的代码通常存在缺陷)。修复所有触发提示的内容。 :)
如果可以的话,学习一些更高级的PHP:走向面向对象编程、封装、信息隐藏等等......这就是现代做事情的方式,比以前工作得更好。围绕提示抑制和register_globals构建的旧PHP脚本有点笨拙。

你指的是哪种安全问题?它真的那么重要吗?谢谢。 - Fuxi
好的,它并不会直接带来安全问题,但是会间接地带来。我通过经验发现,“懒惰”的代码通常也不安全,并且很难调试和维护。 - gd1

4
通知的原因是因为您有一个“未定义常量”。如果您没有在意图字符串周围加引号,php将把它视为常量。如果未定义,则php将其视为字符串。请看以下示例:
$array = array(
   'one' => 'right'
   , 'two' => 'wrong'
);
define('one', 'two');

echo $array[one]; //echoes "wrong"

此外,如果您尝试访问未定义的数组键(例如上面的$array['three'];),您将收到通知。PHP很友好地为您执行此操作,而其他语言会出错(或更糟)。这些通知不仅是为了打扰您,而且也是为了让您知道代码中存在问题,您应该认真考虑解决。

3
听起来你的错误报告级别在不同的机器上有所不同。请比较不同机器上php.ini文件中error_reporting级别。

1

看起来你在两个服务器上设置了不同的error_reporting值。请检查你的php.ini文件并进行相应的设置。


你的意思是设置相应的内容,以便它始终打印任何类型的通知。对吗? - gd1
嗯,并不一定。冗长的代码并不总是被视为优点。 - AJ.
1
这不是啰嗦。你不应该满足于一个触发通知的 PHP 脚本,而应该通过消除通知的原因来压制冗余输出。这种懒惰是 PHP5 之前的遗留问题,应当予以根除 :) - gd1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接