فهرست منبع

Update:更新autoload方法,实例化加上参数确定是否需要重新实例化

Jinhui Zhu 5 سال پیش
والد
کامیت
b2badf212c
1فایلهای تغییر یافته به همراه9 افزوده شده و 1 حذف شده
  1. 9 1
      src/Autoloader/Psr4.php

+ 9 - 1
src/Autoloader/Psr4.php

@@ -36,6 +36,8 @@ class Psr4
      */
     protected static $_loadedClass = array();
 
+    protected static $_loadedClassParams = array();
+
     /**
      * @var $_realpath 将转换后的路径存放到此变量中
      */
@@ -448,7 +450,13 @@ class Psr4
         $args = func_get_args();
         $class = array_shift($args);
         $className = $this->getClassName($class);
-        if (isset(self::$_loadedClass[$className])) return self::$_loadedClass[$className];
+        //如果实例化的参数发生变化,就重新实例化
+        $paramsHash = md5(var_export($args, true));
+        if (isset(self::$_loadedClass[$className]) && isset(self::$_loadedClassParams[$className])
+            && self::$_loadedClassParams[$className] == $paramsHash) return self::$_loadedClass[$className];
+        
+        self::$_loadedClassParams[$className] = $paramsHash;
+
         if (!class_exists($className, false)) {
             throw new \Qii\Exceptions\CallUndefinedClass(\Qii::i('1105', $className), __LINE__);
         }