CRM-15711 - Improve efficiency of deleting a contact
[civicrm-core.git] / CRM / Contact / DAO / Factory.php
index d4b89050efcfa1a01e50613cdcf5c0a6dded0f0e..e26ad410e8865bad6c1a6ab7ea6b471db55dae06 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+/**
+ * Class CRM_Contact_DAO_Factory
+ */
 class CRM_Contact_DAO_Factory {
 
   static $_classes = array(
@@ -23,21 +26,12 @@ class CRM_Contact_DAO_Factory {
 
   static $_suffix = '.php';
 
-  static $_preCall = array(
-    'singleton' => '',
-    'business' => 'new',
-    'data' => 'new',
-  );
-
-  static $_extCall = array(
-    'singleton' => '::singleton',
-    'business' => '',
-    'data' => '',
-  );
-
-
-  static
-  function &create($className) {
+  /**
+   * @param string $className
+   *
+   * @return mixed
+   */
+  static function &create($className) {
     $type = CRM_Utils_Array::value($className, self::$_classes);
     if (!$type) {
       return CRM_Core_DAO_Factory::create($className);
@@ -48,13 +42,14 @@ class CRM_Contact_DAO_Factory {
 
     require_once ($file . self::$_suffix);
 
-    $newObj = eval(sprintf("return %s %s%s();",
-        self::$_preCall[$type],
-        $class,
-        self::$_extCall[$type]
-      ));
+    if ($type == 'singleton') {
+      $newObj = $class::singleton();
+    }
+    else {
+      // this is either 'business' or 'data'
+      $newObj = new $class;
+    }
 
     return $newObj;
   }
 }
-