PHP访问类私有属性

来源:互联网 发布:阿里云ecs手动搭建 编辑:程序博客网 时间:2024/06/06 13:57

除了常用的 __get 方法外,记录一个反射API的方法。

/** * 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);}}
===========

实例代码:

            $a = new \ReflectionClass(CouponStatistics::class);            $property = $a->getProperty('fillable');            $property->setAccessible(true);            $class = $property->getValue($a->newInstance());



0 1