我们可以在变量名php中使用@符号

时间:2016-10-06 05:32:22

标签: php

我有一个来自其他开发人员的旧代码设置,我在我的服务器上设置相同,我看到了一行

<?php @$Days = $_POST['Days']; ?>

此代码在我的本地设置上运行良好,但是一旦我将其上传到服务器上,这就无法正常工作并返回网络错误,此代码后的所有代码/ HTML也无效。

虽然,我调试了这个问题并删除了它。另外,我知道要处理错误,我们使用@符号,并且我已阅读this question

我的查询是上述案例中的错误是什么,为什么没有显示,如果我想检查错误,那我该怎么做。

对于错误报告,我会告诉您我已经使用了以下代码

<?php
ini_set("display_errors", "1");
error_reporting(E_ALL);
?>

所以请告诉我为什么我的代码无法通过此声明,因为我有大约100个这样的代码块。 php中是否有任何设置可以帮助我克服这个问题。

1 个答案:

答案 0 :(得分:4)

@是PHP中的错误抑制运算符,请查看documentation

在您的示例中,在变量名称之前使用它以避免E_NOTICE错误。如果在$ _POST数组中,那么&#39; Days&#39; key未设置它将抛出一个E_NOTICE消息,但在那里使用@来避免E_NOTICE。

代码无法在服务器上运行的原因可能是由于scream.enabled directive in your php.ini配置被禁用。

禁用scream可以解决问题。

更改php.ini中的指令,如下所示:

scream.enabled = 0

如果要在运行时禁用它,则可以按照手册中的说明使用ini_set:

ini_set('scream.enabled', false);

修改

评论中有人指出,我的答案还不够彻底。我将尝试修改我在这里编辑的错误:)。

scream(和禁用@)可以/将会破坏代码的原因是由于变量没有值。如果代码的其余部分尝试使用该变量,则会抛出错误。

此外,如果您将错误处理程序附加到E_NOTICE,则E_NOTICE可能会抛出错误。 来自another question的引用:

  

以上代码会在E_NOTICE或者任何时候抛出ErrorException   引发E_WARNING,有效地终止脚本输出(如果是   异常没有被捕获)。抛出PHP错误的异常是最好的   结合并行异常处理策略   (set_exception_handler)在生产中正常终止   的环境中。