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" }

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

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

  • 相关阅读:
    Repo介绍
    =vscode========》快捷键
    linux c延时程序大全
    Linux vi/vim
    =vscode========》实用小技巧
    编程中闰年判断条件
    代码质量的评价标准
    Python如何计算编辑距离?
    python 格式化输出保留一位小数
    字符串拆分 split()方法
  • 原文地址:https://www.cnblogs.com/buerr/p/6860410.html
Copyright © 2011-2022 走看看