错误抑制@不工作

Not*_*ter 5 php error-suppression

我一直很高兴在我的PHP开发设置上使用错误抑制操作符.但是最近有这样的通知如下:

注意:未初始化的字符串偏移:第35行的C:\ websites\xxx\htdocs\includes\myscript.php中为0

第35行:

$ file_name = @ $ File ['file_name'];

我打开了display_errors,并将error_reporting设置为6143(E_ALL).

我错过了什么吗?不应该抑制错误?

编辑:

在原始脚本中测试:

$a = array();
$b = @$a['f5'];

抑制了错误.所以我想我们正在以某种方式改变error_reporting值.(电影11)

谢谢你的帮助.

lee*_*ers 4

除了抛弃脚本或实际上没有好方法来捕获错误的实例之外,这里不是错误抑制的忠实粉丝.

让我解释一下Uninitialized string offset错误的行为.这不是一个错误:

示例#1

$a = 0;
$b = $a['f5'];
Run Code Online (Sandbox Code Playgroud)

$a是一个数字标量值.在第二行中,PHP隐式地将此数值转换为字符串.该字符串'0'的长度为1.

在PHP中,您可以使用数组索引在字符串中查找字符,因为PHP在内部将字符串存储为数组.例如:

$s= 'abcd';
print_r($s[1]);
Run Code Online (Sandbox Code Playgroud)

此代码的输出将是b字符串中的第二个字符.在示例#1中,查找'f5'被转换为数字,因为字符串只能通过字符位置索引.echo intval('f5');向我们展示PHP 在数字上下文中解释'f5'字符串的内容0.

和我一起到目前为止?以下是我们将其应用于示例#2时会发生的情况

例#2

$a = '';
$b = $a['f5'];
Run Code Online (Sandbox Code Playgroud)

$a是零长度的字符串.第二行与$b= $a[0];- 相同- 即,第二行是要求零长度字符串的第一个字符,但该字符串不包含任何字符.因此PHP抛出以下错误,让您知道索引根本不存在:

Notice: Uninitialized string offset: 0 in C:\websites\tcv3\wc2009\htdocs\aatest_array.php on line 3
Run Code Online (Sandbox Code Playgroud)

这些是松散类型语言编程的难题.