Browse Source

#53 - get rid of eval in bx_instance function

Alex Trofimov 12 năm trước cách đây
mục cha
commit
c8e6c32c80
1 tập tin đã thay đổi với 6 bổ sung và 13 xóa
  1. 6 13
      inc/utils.inc.php

+ 6 - 13
inc/utils.inc.php

@@ -629,22 +629,15 @@ function bx_import($sClassName, $mixedModule = array()) {
 function bx_instance($sClassName, $aParams = array(), $aModule = array()) {
     if(isset($GLOBALS['bxDolClasses'][$sClassName]))
         return $GLOBALS['bxDolClasses'][$sClassName];
-    else {
-        bx_import((empty($aModule) ? $sClassName : str_replace($aModule['class_prefix'], '', $sClassName)), $aModule);
 
-        if(empty($aParams))
-            $GLOBALS['bxDolClasses'][$sClassName] = new $sClassName();
-        else {
-            $sParams = "";
-            foreach($aParams as $mixedKey => $mixedValue)
-                $sParams .= "\$aParams[" . $mixedKey . "], ";
-            $sParams = substr($sParams, 0, -2);
+    bx_import((empty($aModule) ? $sClassName : str_replace($aModule['class_prefix'], '', $sClassName)), $aModule);
 
-            $GLOBALS['bxDolClasses'][$sClassName] = eval("return new " . $sClassName . "(" . $sParams . ");"); // TODO: remake without eval
-        }
+    $oClass = new ReflectionClass($sClassName);
+    
+    $GLOBALS['bxDolClasses'][$sClassName] = empty($aParams) ? $oClass->newInstance() : $oClass->newInstanceArgs($aParams);
+
+    return $GLOBALS['bxDolClasses'][$sClassName];
 
-        return $GLOBALS['bxDolClasses'][$sClassName];
-    }
 }