2015-12-17 33 views
0

PHP中的可調參數可以有很多形式,如對象,數組或包含函數名稱的字符串。打印名稱或PHP中可調用的定義

如果我在變量中有這樣一個可調用的話,我該如何在日誌中打印一些用戶友好的「定義」。

認爲這代碼:

call_user_func($callable); 
$logger->log("Provided callable " . (string) $callable . " called"); 

問題是,這引起了錯誤,例如陣列,以串轉換錯誤。打印出關於該可調用對象的最佳方法是什麼?

+0

你有沒有考慮[var_export()](http://php.net/manual/en/function.var-export.php)?或者是那太多的細節? – dave

+0

@dave如果涉及一個對象,它太詳細了。理想情況下,只有類名,函數/方法名或描述性字符串(如果它是匿名函數)。我可以編寫自定義代碼來處理所有可能性,但不想重新發明輪子。 – EdgarPE

回答

0

像這樣的東西應該工作:

function getCallableName(callable $callable) { 
    if (is_string($callable)) { 
     return trim($callable); 
    } else if (is_array($callable)) { 
     if (is_object($callable[0])) { 
      return sprintf("%s::%s", get_class($callable[0]), trim($callable[1])); 
     } else { 
      return sprintf("%s::%s", trim($callable[0]), trim($callable[1])); 
     } 
    } else if ($callable instanceof Closure) { 
     return 'closure'; 
    } else { 
     return 'unknown'; 
    } 
}