2017-06-27 4 views
0

zu lösen Wie man dieses Problem mit call_user_funccall_user_func, wie dieser Fehler

Wenn ich die Funktion ich diese Störung durch php erzeugt rufen zu lösen. Unterhalb des Fehlers.

Warning: call_user_func() expects parameter 1 to be a valid callback, function 'getChildsInMenuCount' not found or invalid function name i 

die Linie in meiner Dateien mit der Funktion

while ($Qcategories->fetch()) { 
    $categories_count++; 
    $rows++; 
    if ((!isset($_GET['cID']) && !isset($_GET['pID']) || (isset($_GET['cID']) && ((int)$_GET['cID'] === $Qcategories->valueInt('id')))) && !isset($cInfo) && (substr($action, 0, 3) != 'new')) { 

     $category_childs = ['childs_count' => AdministratorMenu::getChildsInMenuCount($Qcategories->valueInt('id'))]; 

     $cInfo_array = array_merge($Qcategories->toArray(), $category_childs); 
     $cInfo = new objectInfo($cInfo_array); 
    } 

Das Ergebnis var_dump(__FUNCTION__);is string(20) "getChildsInMenuCount"

class AdministratorMenu { 
    // Count how many subcategories exist in a category 
     public static function getChildsInMenuCount($id) { 
      $OSCOM_Db = Registry::get('Db'); 

      $categories_count = 0; 

      $Qcategories = $OSCOM_Db->prepare('select id 
              from :table_administrator_menu 
              where parent_id = :parent_id 
              '); 

      $Qcategories->bindInt(':parent_id', $id); 
      $Qcategories->execute(); 

      while ($Qcategories->fetch() !== false) { 
      $categories_count++; 
      $categories_count += call_user_func(__FUNCTION__, $Qcategories->valueInt('id')); 
      } 

      return $categories_count; 
     } 
     } 
+1

Warum verwenden Sie 'call_user_func()' dafür? – Barmar

Antwort

3

Da es sich um eine Klassenmethode ist, müssen Sie __METHOD__ zu verwenden, nicht __FUNCTION__. Dies beinhaltet das Klassenpräfix.

$categories_count += call_user_func(__METHOD__, $Qcategories->valueInt('id')); 
0

Änderung call_user_func Parameter wie unten:

call_user_func(__CLASS__ . '::' . __FUNCTION__, $Qcategories->valueInt('id')); 

Sie müssen auch die Klasse in ersten Parameter von call_user_func angeben