PHP获取私有属性
怪我咯
怪我咯 2017-04-11 10:11:09
[PHP讨论组]

调用阿里的SDK,返回如下数据:

HttpResponse Object
(
    [body:HttpResponse:private] => {
        "RequestId":"A7847F5F-959A-442F-9D4F-D9A823857128","AssumedRoleUser":{"AssumedRoleId":"381320982304412425:704036879","Arn":"acs:ram::20411481:role/bfvideo/704036879"},
        "Credentials":{"AccessKeySecret":"BDsQMcruMnuP9a1qDJYYGUCPorjwyhBTJ7bUrF7vLoua",
        "AccessKeyId":"STS.Bg5E16x7SzBwg5yw13Wj4W5tW","Expiration":"2016-12-22T06:14:01Z",
        "SecurityToken":"CAIS8AF1q6Ft5B2yfSjIo6SADouClehyzYCcZRPIkzFmW+UYuPDftTz2IHBNf3NoCOActfwzmGlS6vwflqAsE8MdHhKUMpoocQmXMPniMeT7oMWQweEut//MQBqpaXPS2MvVfJ+5Lrf0ceusbFbpjzJ6xaCAGxypQ12iN+/x6/h8cs9FdxKjcD9LPtBSK3EVyqkgOGDWKOymPzPzn2PUFzAIgAdnjn5l4qnNqa/1qDi+1gWmk7ZJ993LT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1/wdom2f74HHWAENv0zcb7CJ6LJlIhF4aqU9Cx/EGZkagAFmPDKrgHtOyVvo4LQk/dVWyukdXLbSfrnHFSd0vY6RQMLdujjvG1QPH4x7Yw1XemtVIepth51kZbUtgVIKN8TkGz/MlgGCM7iEJg5dwVdenn2b7XEmUwKs8rw3shXeAIydSFfiOqteruPzqBkR3R02jF/Btagf4la4HbuMSd8FMg=="}
    }
    [status:HttpResponse:private] => 200
)

这些是私有属性,请问我如何获取到这些值呢?
谢谢诸位

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(4)
PHPz

你看看它提供的应该有

转array/json

或者 getter之类的方法吧

迷茫

既然是PHP,改它的源代码啊, private -> public

如果改不动的话

获取私有属性,调用私有方法

如下:
最后那个用了php 5.6.8+的特性

/**
 * set class's public/private/protected property
 *
 * @param object $class
 * @param string $variant property name
 * @param string $value value
 *
 * @return array
 */
if (!function_exists('set_property'))
{
function set_property($class, $variant, $value)
{
    if (!is_object($class)) throw new Exception('paramater #0 must be an object\'s instance.', 1);

    $property = (new ReflectionClass($class))->getProperty($variant);
    $property->setAccessible(true);

    return $property->setValue($class, $value);
}
}
/**
 * get class's public/private/protected property
 *
 * @param object $class
 * @param string $variant property name
 *
 * @return array
 */
if (!function_exists('get_property'))
{
function get_property($class, $variant)
{
    if (!is_object($class)) throw new Exception('paramater #0 must be an object\'s instance.', 1);
    
    $property = (new ReflectionClass($class))->getProperty($variant);
    $property->setAccessible(true);

    return $property->getValue($class);
}
}

/**
 * call class's public/private/protected method
 *
 * @param object $class
 * @param string $variant property name
 * @param string $value value
 *
 * @return array
 */
if (!function_exists('call_class_method_array'))
{
function call_class_method_array($class, $method, $parameters)
{
    if (!is_object($class)) throw new Exception('paramater #0 must be an object\'s instance.', 1);

    $reflectionMethod = (new ReflectionClass($class))->getMethod($method);
    $reflectionMethod->setAccessible(true);

    return $reflectionMethod->invokeArgs($class, $parameters);
}
}

/**
 * call class's public/private/protected method
 *
 * @param object $class
 * @param string $variant property name
 * @param string $value value
 *
 * @return array
 */
if (!function_exists('call_class_method'))
{
function call_class_method($class, $method, ...$parameters)
{
    if (!is_object($class)) throw new Exception('paramater #0 must be an object\'s instance.', 1);

    $reflectionMethod = (new ReflectionClass($class))->getMethod($method);
    $reflectionMethod->setAccessible(true);

    return $reflectionMethod->invokeArgs($class, $parameters);
}
}
伊谢尔伦

私有属性是不能直接访问的

怪我咯

这是阿里云sdk接口的问题,你直接改动他的sdk,返回数据就是json格式了。改动此目录下,aliyun-openapi-php-sdk-masteraliyun-openapi-php-sdk-masteraliyun-php-sdk-coreHttp,的HttpHelper.php,大概37行,删除或者屏蔽curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);即可。然后json数据就直接就返回了,无需再print_r($rsponse).

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号