我注意到当我尝试从 NULL 对象访问属性时,PHP 不会引发异常。它是否正确?我希望会像其他语言一样出现某种错误。
问问题
1772 次
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_reporting
为E_ALL
,查找display_errors
并将其设置为on
。然后重新启动您的网络服务器以使设置生效。
于 2012-11-17T16:34:31.947 回答