zoukankan      html  css  js  c++  java
  • 直接调用魔术方法

    看laravel的包文件时,无意中发现他引入了一个专门实例化一个类而又不触发构造方法的包。

    "name": "doctrine/instantiator",
    "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors"

    之前只知道构造函数是在实例化时自动触发的,就好奇 如果实例化时没有调用,那么要怎么执行构造方法。于是写了测试代码

    class ClassName
    {
      public $a;

      public function __construct()
      {
        $this->a = 'a';
      }
    }

    $reflection = new ReflectionClass('ClassName');
    $class = $reflection->newInstanceWithoutConstructor();
    var_dump($class);

    输出:

    object(ClassName)#2 (1) { ["a"]=> NULL }

    修改代码

    class ClassName
    {
      public $a;

      public function __construct()
      {
        $this->a = 'a';
      }
    }

    $reflection = new ReflectionClass('ClassName');
    $class = $reflection->newInstanceWithoutConstructor();

    $class->__construct();

    var_dump($class);

    输出:

    object(ClassName)#2 (1) { ["a"]=> string(1) "a" }

    很诧异构造方法竟然还可以直接调用。

    但是使用场景,据大神说是在构造函数中有类似数据库连接等耗时耗资源的情况下,需要在实例化时不触发构造函数

  • 相关阅读:
    名言
    八猫图
    springMVC 上传下载文件
    mongdb 模糊查询
    tomcat结合nginx使用小结
    orale存储过程
    java执行效率低,但效率就低吗?
    Spring aop 原始的工作原理的理解
    spring aop一些名词的理解
    Spring控制反转(IOC)和依赖注入(DI),再记不住就去出家!
  • 原文地址:https://www.cnblogs.com/buerr/p/6860410.html
Copyright © 2011-2022 走看看