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)
谢谢你的帮助.
除了抛弃脚本或实际上没有好方法来捕获错误的实例之外,这里不是错误抑制的忠实粉丝.
让我解释一下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)
这些是松散类型语言编程的难题.