2

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

4

4 回答 4

4

不,只是访问未定义成员的警告。如果您愿意,可以使用__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
于 2012-11-17T16:23:19.290 回答
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!
于 2012-11-17T16:17:33.967 回答
1

您应该会收到一个 PHP 通知警告,它看起来像这样:

PHP Notice:  Trying to get property of non-object in [...]

如果没有,您应该检查您的错误设置。在开发中,尝试设置

error_reporting(-1);

为了查看所有 PHP 错误/警告/通知,以便您可以尽可能地修复您的代码。

于 2012-11-17T16:18:29.813 回答
0

异常处理从版本 5 开始引入,并没有为所有内置函数实现。
如果您想获取异常,您可以随时检查变量是否为 null 或不是对象,并抛出可由 catch 块处理的自定义异常。

要获取错误、警告和通知,您可以使用 PHP.ini 文件的开发版本。或者只是搜索 php.ini 文件,Error handling and logging在其中查找部分并将其设置error_reportingE_ALL,查找display_errors并将其设置为on。然后重新启动您的网络服务器以使设置生效。

于 2012-11-17T16:34:31.947 回答