PHP访问类私有属性

除了常用的 __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());



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值