iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
1
Modern Web

成為 Modern PHPer系列 第 21

Day 21:Callable 類型

  • 分享至 

  • xImage
  •  

前言

PHP 內建一系列的基礎資料型態

  • bool
  • int
  • float
  • string
  • object
  • resource
  • null
  • callable

Callable 又被稱為 Callback,基本上無法以中文譯名稱之。其存在的意義為「作為可被呼叫的資料型態,提供類似於函式的作用」。

對於有使用過 C/C++ 的人來說,將 Callable 視為 Function Pointer 可能會比較容易理解。

實際用法

Callable 具有許多表現形式,以下分別說明。

註:在以下的範例中,會使用到 call_user_func() 這個函式,可先參考官方文件以確定其用法

已定義之 Function

對於單純存在的 function(無論是自定義的或內建的),可以直接使用該 function 的名稱。

<?php

function inc(int $number): int 
{
    return $number + 1;
}

call_user_func('inc', 10); // 11

Static Method

對於 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 時相當好用。

Method

對於 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 Method

__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 的其中一種而已。


上一篇
Day 20:Stream Filter 的使用
下一篇
Day 22:Closure 匿名函式
系列文
成為 Modern PHPer30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言