src/AppBundle/Common/ReflectionUtils.php

(开头部分) 1KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

<?php

namespace AppBundle\Common;

use Codeages\Biz\Framework\Service\ServiceProxy;

/**
 * 使用方法可参考 ReflectionUtilsTest.php
 */
class ReflectionUtils
{
    /**
     * 通过反射的方式调用方法, 可调用私有方法
     * 如
     * ReflectionUtils::invokeMethod($this->getUsersSyncService(), 'dealData', array($arg1, $arg2));
     */
    public static function invokeMethod($classObj, $methodName, $args = null)
    {
        if ($classObj instanceof ServiceProxy) {
            $classPackName = $classObj->getClassName();
            $classObj = $classObj->getClass();
        } else {
            $classPackName = get_class($classObj);
        }

        $class = new \ReflectionClass($classPackName);
        $method = $class->getmethod($methodName);
        $method->setAccessible(true);

        if (isset($args)) {
            $result = $method->invokeArgs($classObj, $args);
        } else {
            $result = $method->invoke($classObj);
        }

        return $result;
    }

    /**
     * 通过反射的方式, 设置非静态局部变量
     * 如
     * ReflectionUtils::setProperty(ServiceKernel::instance(), 'debug', true);
     */
    public static function setProperty($classObj, $propertyName, $propertyValue)
    {
        if ($classObj instanceof ServiceProxy) {
            $classPackName = $classObj->getClassName();
            $classObj = $classObj->getClass();
        } else {
            $classPackName = get_class($classObj);
        }
        $class = new \ReflectionClass($classPackName);
        $property = $class->getProperty($propertyName);
        $property->setAccessible(true);
        $property->setValue($classObj, $propertyValue);

        return $classObj;
    }

    public static function getProperty($classObj, $propertyName)

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。