如何使用已定义的变量来阻止PHP Notices?

时间:2009-12-24 19:12:33

标签: php notice

基本上我在页面上有很多链接,我会使用类似的东西

<?PHP echo $SITE_PATH ?>

在同一页面上多次,但它会在PHP中显示一条通知。

我知道你应该使用 isset()之类的东西,但每次打电话时我真的需要使用吗?

<?PHP echo $SITE_PATH ?>

---编辑:
如果我切换到使用已定义的变量,那么通知似乎就会消失

4 个答案:

答案 0 :(得分:9)

这里有两个解决方案:

  • 只使用存在的变量 - 这是你应该做的。
  • 或在尝试使用之前测试它们是否存在(使用isset

没有魔法^^

如果您的应用程序使用了许多未设置的变量,那么您的设计可能会遇到一些问题。


在你提出的一个案例中,对于一个多次使用的变量,我会确保它存在,如果没有,则将其设置为'',例如,在我的脚本开头。

这看起来并不是很好,但它会起作用 - 这样,你就不必完成整个应用程序,修补所有内容。

(或者我也可以禁用E_NOTICE error_reporting级别 - 我不喜欢这个想法,但是,有时候,它确实是处理某些代码库的唯一方法)

答案 1 :(得分:3)

您可以使用@:

来抑制邮件
print @$site_path;

或者您可以使用三元操作来获取默认值:

print (isset($site_path)) ? $site_path : "default_path" ;

最后,您不应该使用未设置的变量。如果你是,你需要重新思考你的方法。事先处理这些信息,因此其余的脚本可以毫无问题地运行。

答案 2 :(得分:1)

您确实应该确保在使用变量之前设置变量(特别是将其回显到页面)。如果变量来自不安全的源($ _GET,$ _POST,数据库),那么您应该进行某种类型的过滤以防止安全漏洞(跨站点脚本(XSS),跨站点请求伪造(CSRF)等)。 。)但是如果您觉得一切都安全并且您只是不想显示错误(例如在生产中),请将错误报告设置为0。

E.g。 error_reporting(0);

您可以在php.ini级别或每页(在页面顶部设置error_reporting(0);)执行此操作。

另外,在制作中,您不希望显示错误。记录它们。在开发中,您希望看到所有错误(E_STRICT)。

答案 3 :(得分:0)

您可以创建一个函数来检查变量是否已设置并返回它:

function EchoVar() {
    global $SITE_PATH;
    return isset($SITE_PATH) ? $SITE_PATH : '';
}

// calling it
echo EchoVar();