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


Can we use @ symbol in variable name php

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

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

此代码在我的本地设置上运行良好,但一旦我将其上传到服务器上,这就不起作用并返回网络错误,并且此代码之后的所有代码/HTML也不起作用。

虽然,我调试了这个问题,并删除了这个。此外,我知道我们使用@符号来处理错误,而且我也读过这个问题

我的问题是,上面的错误是什么,为什么没有显示,如果我想检查错误,那么我该怎么做。

对于错误报告,我应该告诉你我已经使用了下面的代码
<?php
ini_set("display_errors", "1");
error_reporting(E_ALL);
?>

所以请告诉我为什么我的代码无法通过这个语句,因为我有大约100个这样的代码块。php中有什么设置可以帮我解决这个问题吗

@是PHP中的错误抑制操作符,请查看文档

在您的示例中,它在变量名之前使用,以避免那里的E_NOTICE错误。如果在$_POST数组中,'Days'键没有设置,它将抛出E_NOTICE消息,但是在那里使用@来避免E_NOTICE。

代码不能在服务器上工作的原因可能是由于尖叫。在你的php.ini配置中禁用了Enabled指令。

禁用scream应该可以解决这个问题。

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

scream.enabled = 0

如果您想在运行时禁用它,那么您可以使用手册中所述的ini_set:

ini_set('scream.enabled', false);

编辑

评论中有人指出我的回答不够彻底。我会试着在这里修改我的错误:)

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

同样,如果给E_NOTICE附加错误处理程序,它也会抛出错误。引用另一个问题:

上面的代码将抛出一个ErrorException在E_NOTICE或E_WARNING被抛出,有效地终止脚本输出(如果异常未被捕获)。对PHP错误抛出异常是最好的与并行异常处理策略相结合(set_exception_handler)在生产环境中优雅地终止环境。