Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP没有';在访问空对象的属性时是否引发异常?_Php - Fatal编程技术网

PHP没有';在访问空对象的属性时是否引发异常?

PHP没有';在访问空对象的属性时是否引发异常?,php,Php,我注意到,当我试图从空对象访问属性时,PHP不会抛出异常。这是正确的吗?我希望会有一些类似于其他语言的错误 它报告了一个错误,一个更正确的通知 <?php error_reporting(-1); $var = null; $var->prop; echo 'Hello!'; 它报告了一个错误,一个更正确的通知 <?php error_reporting(-1); $var = null; $var->prop; echo 'Hello!'; 您应该会收到

我注意到,当我试图从空对象访问属性时,PHP不会抛出异常。这是正确的吗?我希望会有一些类似于其他语言的错误

它报告了一个错误,一个更正确的通知

<?php

error_reporting(-1);

$var = null;
$var->prop;

echo 'Hello!';

它报告了一个错误,一个更正确的通知

<?php

error_reporting(-1);

$var = null;
$var->prop;

echo 'Hello!';

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

PHP Notice:  Trying to get property of non-object in [...]
如果没有,您应该检查错误设置。在开发过程中,请尝试设置

error_reporting(-1);

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

您应该会收到一条PHP通知警告,它看起来如下所示:

PHP Notice:  Trying to get property of non-object in [...]
如果没有,您应该检查错误设置。在开发过程中,请尝试设置

error_reporting(-1);

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

不,只是访问未定义成员的警告。如果愿意,您可以使用magic函数手动将异常添加到类中:

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

不,只是一个访问未定义成员的警告。如果愿意,您可以使用magic函数手动将异常添加到类中:

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

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


要获取错误、警告和通知,可以使用PHP.ini文件的开发版本。或者只需搜索php.ini文件,在其中查找
错误处理和日志记录
部分,并将
错误报告
设置为
E\u ALL
,查找
显示错误
并将其设置为
on
。然后重新启动web服务器,使设置生效。

从版本5开始引入异常处理,尚未对所有内置功能实施异常处理。
如果要获取异常,可以始终检查变量是否为null或不是对象,并抛出可由catch块处理的自定义异常


要获取错误、警告和通知,可以使用PHP.ini文件的开发版本。或者只需搜索php.ini文件,在其中查找
错误处理和日志记录
部分,并将
错误报告
设置为
E\u ALL
,查找
显示错误
并将其设置为
on
。然后重新启动web服务器,使设置生效。

这样脚本的执行不会停止吗?它只是记录错误并继续运行。正确吗?不幸的是,由于某些原因,PHP开发人员认为允许程序员忽略错误是有用的。所以脚本的执行不会停止吗?它只是记录错误并继续运行。正确吗?不幸的是,由于某些原因,PHP开发人员认为允许程序员忽略错误是有用的。