在 PHP 中,gettype() 函數用于獲取變量的類型。但是,當你嘗試獲取回調函數的類型時,它會返回 “callback”,而不是實際的回調類型(例如 “function”)。這是因為回調函數本質上是一個指向函數的指針,而 gettype() 無法識別具體的函數類型。
如果你想要檢查一個變量是否是回調函數,你可以使用 is_callable() 函數。is_callable() 函數會檢查給定的變量是否可以被調用(例如,它是否是一個函數名、閉包或者實現了 __invoke() 方法的對象)。
這里有一個例子:
function myCallback() {
echo "Hello, I'm a callback function!";
}
$callback = 'myCallback';
if (is_callable($callback)) {
echo "The variable is a callback function.";
} else {
echo "The variable is not a callback function.";
}
在這個例子中,myCallback 是一個函數,所以 is_callable($callback) 返回 true,輸出 “The variable is a callback function.”。
如果你想要獲取回調函數的具體類型(例如,它是一個匿名函數還是命名函數),你可以使用 get_defined_functions() 函數。這個函數返回一個包含所有已定義函數的數組,你可以在其中查找你的回調函數。
這里有一個例子:
function myCallback() {
echo "Hello, I'm a callback function!";
}
$callback = 'myCallback';
if (is_callable($callback)) {
$definedFunctions = get_defined_functions()['internal'];
if (in_array($callback, $definedFunctions)) {
echo "The variable is a defined function.";
} elseif (in_array($callback, $defined_functions['user'])) {
echo "The variable is a user-defined function.";
} else {
echo "The variable is not a function.";
}
} else {
echo "The variable is not a callback function.";
}
在這個例子中,我們首先檢查 $callback 是否是一個可調用的變量。如果是,我們使用 get_defined_functions() 函數獲取所有已定義的函數(包括內部和用戶定義的函數),然后檢查 $callback 是否在這些函數中。如果找到了匹配的函數,我們輸出相應的消息。