如何读取“受保护”变量


How to read "protected" variable

>我从管理 WSDL 数据的类中获取结果集。

我没有把代码写到类上,我只使用它。

我调用一个函数来使用服务创建 ID,并希望稍后在同一脚本中使用该 ID。

我的结果集如下所示:

Array
(
    [0] => SaveResult Object
        (
            [id:protected] => newgeneratedID
            [success:protected] => 1
        )
)

所以我尝试$response[0]->id来获取我需要的ID。现在我得到一个致命的错误。

PHP Fatal error:  Cannot access protected property SaveResult::$id

我知道这是一个菜鸟问题,但我不明白为什么我可以print_r对象但不能获取其中的值。

不能使用除同一对象之外的其他空间中的任何受保护数据。

但是您可以编辑 SaveResult 对象并为 id 添加 getter:

public function getId() {
   return $this->id;
}
应该有一个

可以在 SaveResult 类中调用的方法,它允许您访问数据,如下所示:

$response[0]->getId();

请参阅该类的文档/源代码。

您可以使用 ReflectionProperty 接口读取受保护的属性。

phptoolcase 库中HandyMan 组件有一个方便的方法来读取无法访问的对象属性。

$value = PtcHandyMan::getProperty( $your_object , 'propertyName');

来自单一实例类的静态属性:

$value = PtcHandyMan::getProperty( 'myCLassName' , 'propertyName');

非常简单和有用,尽管仅在少数情况下建议使用,因为不应在其范围之外使用受保护/私有财产。

你可以在这里找到勤杂工类:http://phptoolcase.com/guides/ptc-hm-guide.html