PHP 內建一系列的基礎資料型態
bool
int
float
string
object
resource
null
callable
Callable 又被稱為 Callback,基本上無法以中文譯名稱之。其存在的意義為「作為可被呼叫的資料型態,提供類似於函式的作用」。
對於有使用過 C/C++ 的人來說,將 Callable 視為 Function Pointer 可能會比較容易理解。
Callable 具有許多表現形式,以下分別說明。
註:在以下的範例中,會使用到
call_user_func()
這個函式,可先參考官方文件以確定其用法
對於單純存在的 function(無論是自定義的或內建的),可以直接使用該 function 的名稱。
<?php
function inc(int $number): int
{
return $number + 1;
}
call_user_func('inc', 10); // 11
對於 Object 中的 Static Method,可以使用字串及陣列兩種型式。
<?php
class Math
{
public static function inc(int $number): int
{
return $number + 1;
}
}
call_user_func('Math::inc', 10); // 11
call_user_func(['Math', 'inc'], 10); // 11
call_user_func([Math::class, 'inc'], 10); // 11
註:在上述範例中,
'Math'
與'Math::class'
為等價的,這樣的用法在具有很長的 namespace 時相當好用。
對於 Object 中的 Method,可以使用 new
出來的物件配合 method 名稱組合而成的陣列。
<?php
class Math
{
public function inc(int $number): int
{
return $number + 1;
}
}
call_user_func([new Math(), 'inc'], 10); // 11
__invoke()
是 Object 中的魔術方法,表示當該物件被 new
出來之後,如果被當成函式使用的處理方式。
class Inc
{
public function __invoke(int $number): int
{
return $number + 1;
}
}
call_user_func(new Inc(), 10); // 11
註:關於魔術方法會再開一篇做說明。
從 PHP 5.3 後,PHP 加入匿名函式的特性。
<?php
call_user_func(function (int $n): int {
return $n + 1;
} , 10); // 11
註:關於匿名函式會再開一篇做說明。
murmur:看來 30 天不怕沒文章了呢(灑花)
今天的內容算是比較混的,僅是針對 Callable 做一些概述而已。
事實上原本我已經不知道該寫些什麼的,不過在看了一下 Callable 之後發現 Callable 常常會與 Clousure 搞混。
Clousure 等同於匿名函式,而它是 Callable 的其中一種而已。