访问NULL对象的属性时,PHP不会引发异常?

时间:2012-11-17 16:15:19

标签: php

我注意到当我尝试从NULL对象访问属性时,PHP不会抛出异常。它是否正确?我希望会出现像其他语言一样的错误。

4 个答案:

答案 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服务器以使设置生效。