我注意到当我尝试从NULL对象访问属性时,PHP不会抛出异常。它是否正确?我希望会出现像其他语言一样的错误。
答案 0 :(得分:3)
不,只是访问未定义成员的警告。如果您愿意,可以使用__get()魔术功能手动将异常添加到班级中:
class foo {
public function __get( $name )
{
throw new Exception($name . ' does not exist in foo');
}
}
现在课程将表现出你的期望。
$bar = new foo();
$x = $bar->something;
回声:
Fatal error: Uncaught exception 'Exception' with message 'something does not exist in foo' in C:\web\xampp\htdocs\stupid2.php:7 Stack trace: #0 C:\web\xampp\htdocs\stupid2.php(14): foo->__get('something') #1 {main} thrown in C:\web\xampp\htdocs\test.php on line 7
答案 1 :(得分:1)
报告错误,通知更正确
<?php
error_reporting(-1);
$var = null;
$var->prop;
echo 'Hello!';
结果:
Notice: Trying to get property of non-object in /..../prog.php on line 6
Hello!
答案 2 :(得分:1)
您应该收到PHP通知警告,它看起来像这样:
PHP Notice: Trying to get property of non-object in [...]
如果没有,您应该检查错误设置。在开发过程中,请尝试设置
error_reporting(-1);
以查看所有PHP错误/警告/通知,以便您尽可能地修复代码。
答案 3 :(得分:0)
自版本5以来引入了异常处理,并且尚未在构建的函数中实现所有异常处理 如果要获得异常,可以始终检查变量是否为null或不是对象,并抛出可由catch块处理的自定义异常。
要获取错误,警告和通知,您可以使用PHP.ini文件的开发版本。或者只搜索php.ini文件,在其中查找Error handling and logging
部分并将error_reporting
设置为E_ALL
,查找display_errors
并将其设置为on
}。然后重新启动Web服务器以使设置生效。