我们可以在变量名php中使用@symbol吗
我有一个来自其他开发者的旧代码设置,我正在我的服务器上设置相同的代码,在那里我看到一行我们可以在变量名php中使用@symbol吗,php,Php,我有一个来自其他开发者的旧代码设置,我正在我的服务器上设置相同的代码,在那里我看到一行 <?php @$Days = $_POST['Days']; ?> 这段代码在我的本地安装程序上运行良好,但一旦我将其上传到服务器上,它就不起作用了,并返回了一个网络错误,并且在这段代码之后的所有代码/HTML也不起作用 尽管如此,我调试了这个问题并删除了它。另外,我知道为了处理错误,我们使用@符号,我也读过 我的问题是,在上述情况下,什么是错误,为什么没有显示,如果我想检查错误,那么我该怎
<?php @$Days = $_POST['Days']; ?>
这段代码在我的本地安装程序上运行良好,但一旦我将其上传到服务器上,它就不起作用了,并返回了一个网络错误,并且在这段代码之后的所有代码/HTML也不起作用
尽管如此,我调试了这个问题并删除了它。另外,我知道为了处理错误,我们使用@符号,我也读过
我的问题是,在上述情况下,什么是错误,为什么没有显示,如果我想检查错误,那么我该怎么做
对于错误报告,我将告诉您,我已经使用了以下代码
<?php
ini_set("display_errors", "1");
error_reporting(E_ALL);
?>
所以请告诉我为什么我的代码不能通过这个语句,因为我有大约100个这样的代码块。php中是否有任何设置可以帮助我克服这个问题。php中的@是错误抑制运算符,请查看 在您的示例中在变量名之前使用它,以避免出现E_note错误。如果在$\u POST数组中未设置“Days”键,它将抛出一条E\u通知消息,但在那里使用@来避免该E\u通知 代码在服务器上不工作的原因可能是由于配置被禁用 禁用尖叫应该可以解决问题 更改php.ini中的指令,如下所示:
scream.enabled = 0
如果要在运行时禁用它,则可以使用手册中所述的ini_集:
ini_set('scream.enabled', false);
编辑
评论中有人指出我的回答不够彻底。我将尝试在这里修改我的错误编辑:)
尖叫(并禁用@)可以/将破坏代码的原因是变量没有值。如果代码的其余部分尝试使用该变量,它将抛出一个错误
此外,如果您将错误处理程序附加到E_通知,则E_通知可能会引发错误。
引自:
上述代码将在任何时候发出E_通知或
发出E_警告,有效终止脚本输出(如果
未捕获异常)。对PHP错误抛出异常是最好的选择
与并行异常处理策略相结合
(设置异常处理程序)在生产中正常终止
环境
你确定你读过那个问题吗
@
抑制/忽略错误,您不会通过忽略错误来处理错误。这就像说你通过忽略你收到的还款通知来处理你的信用卡债务是的,我知道@suprres通过某些函数来处理错误,我不清楚它在我的例子中,在变量名前面做了什么。“为了处理错误,我们使用了@symbol”——这是完全错误的。通过将@
放在语句前面,您不会处理错误。你。这是一个很大的区别。如果您没有看到错误,您如何确定该行是导致致命错误的原因?如果$\u POST数组中没有此类值,@正在抑制的唯一消息是一条通知(低优先级警告)。不管是否沉默,这都不应该停止脚本,所以问题可能在其他地方。通知不会停止执行,我们没有尖叫,所以我不确定这是否真的会有帮助。没错,它不会总是导致错误,但如果没有实际的错误消息,这是我所能做的最好的:)让我添加一些信息来改进答案,谢谢。感谢@RickvanLieshout提供的信息,我对此进行了进一步调试,实际上变量声明并没有导致错误。它被使用,因为这真的导致了问题。是的,这是我所期望的。15分钟前,由于IMSoP的解释,我做了一次编辑。很高兴我们能帮助你。记住接受答案,+IMSop先生,享受你的编码吧!我仍然不明白scream与任何东西有什么关系(顺便说一句,这是一个我以前从未听说过的扩展,并且不是PHP默认构建的一部分)。如果你让一个通知保持沉默,同样的事情就会发生,就像你忽略了它一样。我发现PHP的通知在大多数时候都“太吵了”,所以我倾向于关闭它们。