最新消息:欢迎加入小松的QQ群一起讨论一起学习,搜索页面修改成lua+ElasticSearch,使用php这个页面速度相对慢一点,优化之后速度杠杠的,如有问题请加群联系我

laravel 反射机制

PHP 157浏览 0评论

PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。我的理解就是php反射机制能拿到类里面的属性方法,private 和 protected的也可以

官方文档
http://www.php.net/manual/zh/book.reflection.php

laravel中反射的使用
文件 laravel\framework\src\Illuminate\Container\Container.php
这个一个laravel的容器文件

 public function build($concrete, array $parameters = [])
    {
        // If the concrete type is actually a Closure, we will just execute it and
        // hand back the results of the functions, which allows functions to be
        // used as resolvers for more fine-tuned resolution of these objects.
        if ($concrete instanceof Closure) {
            return $concrete($this, $parameters);
        }
        //创建一个反射实例
        $reflector = new ReflectionClass($concrete);

        // 判断这个来是否可以实例化,如果不能实例化返回错误       
        if (! $reflector->isInstantiable()) {

            if (! empty($this->buildStack)) {
                $previous = implode(', ', $this->buildStack);

                $message = "Target [$concrete] is not instantiable while building [$previous].";
            } else {
                $message = "Target [$concrete] is not instantiable.";
            }

            throw new BindingResolutionException($message);
        }

        $this->buildStack[] = $concrete;
        //获取类的构造函数
        $constructor = $reflector->getConstructor();
        //判断是否存在构造函数,不存在直接实例化该类
        if (is_null($constructor)) {
            array_pop($this->buildStack);

            return new $concrete;
        }
        //获取构造函数参数
        $dependencies = $constructor->getParameters();

        //构造函数的参数和值,数字key为构造还是得参数名,val为值
        $parameters = $this->keyParametersByArgument(
            $dependencies, $parameters
        );
        //解析反射参数的所有依赖项
        $instances = $this->getDependencies(
            $dependencies, $parameters
        );

        array_pop($this->buildStack);
        //创建一个新的类实例
        return $reflector->newInstanceArgs($instances);
    }
QQ交流群:136351212(满) 455721967

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» laravel 反射机制
本文链接地址:https://www.phpsong.com/2804.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!