Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.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,我已经生成了这些数据,但是如何获取数据的值,例如 用户ID->[ID]=>1429517 消息->[数据:协议节点:专用]=>获取我的消息 Array ( [0] => ProtocolNode Object ( [tag:ProtocolNode:private] => message [attributeHash:ProtocolNode:private] => Array (

我已经生成了这些数据,但是如何获取数据的值,例如

用户ID->[ID]=>1429517

消息->[数据:协议节点:专用]=>获取我的消息

Array
(
[0] => ProtocolNode Object
    (
        [tag:ProtocolNode:private] => message
        [attributeHash:ProtocolNode:private] => Array
            (
                [id] => 1429517
                [offline] => 0
                [type] => text
                [t] => 14722889
            )

        [children:ProtocolNode:private] => Array
            (
                [0] => ProtocolNode Object
                    (
                        [tag:ProtocolNode:private] => body
                        [attributeHash:ProtocolNode:private] => Array
                            (
                            )

                        [children:ProtocolNode:private] => 
                        [data:ProtocolNode:private] => get my message
                    )

            )

        [data:ProtocolNode:private] => 
    )

)
我试过使用这个:

    foreach($msgs as $msg) {
    echo 'test: ' . $msg->tag ; 
    }
但我得到了一个错误:

致命错误:无法访问私有属性ProtocolNode::$tag

$reflection = new ReflectionClass($msg);
$prop = $reflection->getProperty("tag");
$prop->setAccessible(true);
$tag = $prop->getValue();

但这是一种有点小技巧的方法,如果你的团队中有ProtocolNode,那么最好添加getter“getTag”,如果ProtocolNode是某个供应商库类,那么你可以将ProtocolNode扩展到MyProtocolNode并添加getter,该类需要提供一个getter方法来获取这些值。如果没有,您可以自己添加,但文档很可能会告诉您如何获取它。您只能从实例化的类中访问私有属性。要从全局范围访问此类属性,必须将属性类型更改为public或使用返回值的getter方法。你是你正在使用的类的作者吗?你能编辑这个类吗?