Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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_Class_Oop - Fatal编程技术网

Php 引发异常后无法访问类的属性

Php 引发异常后无法访问类的属性,php,class,oop,Php,Class,Oop,我有一个PHP类,对于这个例子,我只是调用MyClass。如果这个类中出现了错误,它会抛出一个异常,我正在捕获它。在这个catch块中,我需要访问MyClass的一些公共类属性,但由于某些原因,它们都返回NULL。代码如下 try { $myClass= new \sys\global\MyClass($id); } catch (Exception $e) { die(var_dump($myClass->reading)); } 尽管reading是MyClass的一

我有一个PHP类,对于这个例子,我只是调用
MyClass
。如果这个类中出现了错误,它会抛出一个异常,我正在捕获它。在这个catch块中,我需要访问
MyClass
的一些公共类属性,但由于某些原因,它们都返回
NULL
。代码如下

try {
    $myClass= new \sys\global\MyClass($id);
} catch (Exception $e) {
    die(var_dump($myClass->reading));
}
尽管
reading
MyClass
的一个公共属性,但上面的内容正在向页面打印
NULL

namespace sys\global;

class MyClass {
    public $reading = 10;

    // ... other class code
}
在抛出异常之前,我甚至在类中执行了
die(var_dump($this->reading))
,它的值为
10


在类中引发异常会破坏它吗?

根据异常是什么,您可能无法访问成员。在这种情况下,您的异常似乎是在
$myClass
的构造函数中引起的,因此我怀疑您的对象是否正确创建,因此这意味着您无法访问其属性。

如果在构造函数中引发异常,则不会创建该对象。i、 e.您无法访问不存在的对象的属性。

构造函数的最后一行调用引发异常的方法。构造函数正在等待该方法“完成”是有道理的,这意味着对象尚未完全创建。谢谢。@ChrisWhite如果所讨论的方法的返回值对对象的存在不是至关重要的,则可以在构造函数中捕获异常。