php 反射

PHP 具有完整的反射 API,增加了内省类、接口、函数、方法和扩展的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。

A.php



/**
 * 类的注释
 */
class A
{
    public $one = '';
    public $two = '';

    //Constructor
    public function __construct()
    {
        //Constructor
    }

    //print variable one
    public function echoOne($a,$b)
    {

        return "echoOne---- {$a}|{$b}";
    }


    /**
     * print variable two
    */
    public function echoTwo()
    {
        return "echoTwo\n";
    }
}

反射获取相关信息实例

  /**
     * 反射
     * @return void
     */
    public function reflectDemo()
    {
        //Instantiate the object
        $a = new \A();
        var_dump($a);
        // Instantiate the reflection object
        $reflector = new \ReflectionClass($a);

        //Now get all the properties from class A in to $properties array
        $properties = $reflector->getProperties();
        var_dump($properties);

        $i =1;
        //Now go through the $properties array and populate each property
        foreach($properties as $property)
        {
            //Populating properties
            $a->{$property->getName()}=$i;
            //Invoking the method to print what was populated
            //$a->{"echo".ucfirst($property->getName())}()."\n";

            $i++;
        }

        // 相当于实例化这个类 等同于上面的 $a
        $instance = $reflector->newInstance();
//        var_dump($instance);

        // 方法一
        //invoke method
        echo $instance->echoTwo();
        // 方法二
        // get method
        $method = $reflector->getMethod('echoOne');
        echo $method->invokeArgs($instance,["abd","eff"]);

        // 方法三 没有参数的方法
        $method = $reflector->getMethod('echoTwo');
        echo $method->invoke($instance);
        // 获取所有 method
        $methods = $reflector->getMethods();
        var_dump($methods);

        // 获取类注释 方法注释
        var_dump($reflector->getDocComment());
        var_dump($method->getDocComment());

        //判断某个方法是不是公共的
        $method = new \ReflectionMethod($a,'echoOne');
        if ($method->isPublic()) {
            echo "method is public";
        }

        // 获取方法的参数和参数个数
        var_dump($method->getParameters());
        var_dump($method->getNumberOfParameters());

    }

你可能感兴趣的:(PHP,php)