お前はPHPの標準関数の数を知っているか

公開日:

オンラインoVice(PHPerRoom)で開催された『PHPer Tea Night★第三夜』でライトニングトーク(5分)として発表しました。

Download PDF

スライドテキスト

Page 1

お前はPHPの標準関数の数を知っているか

Do you know the number of standard functions in PHP?

pixiv Inc.
USAMI Kenta

2022-10-05

Page 2

お前誰よ

  • うさみけんた (@tadsan) / Zonu.EXE / にゃんだーすわん
  • ピクシブ株式会社 pixiv事業本部 エンジニア
    • 最近はピクシブ百科事典(dic.pixiv.net)を開発しています
  • Emacs Lisper, PHPer
    • Emacs PHP Modeを開発しています (2017年-)
  • PHPerKaigi コアスタッフ、

PHPカンファレンス実行委員は今年はお休み

Page 3

このLTについて

Page 4

PHPカンファレンス2022

Page 5

問題です

Page 6

PHPの標準関数の数は いくつあるでしょうか

Page 7

ヒント:
Python 3.10は71個 (型を除くと56個くらい)

Page 8

答え:
わかんない

Page 9

Page 10

???

Page 11

この状況を理解するには
モジュールシステムを
理解する必要がある

Page 12

関数は
どこからくるの?

Page 13

関数定義を探しにいこう

Page 14

https://github.com/php/php-src

Page 15

C言語で定義されています

Page 16

C言語で定義されています

ここを抜き出せば
関数一覧を作れる?

Page 17

rg -g '*.c' -o

'^(?:ZEND|PHP)_FUNCTION\(.+\)' |

cut -d: -f2 | sort -u | wc -l

Page 18

まじで???

Page 19

PHPマニュアルを
見にいこう

Page 20

PHPには関数がいっぱい

Page 21

PHPには関数がいっぱい

これ全部読むの…?

Page 22

実は関数一覧のJSONがある

Page 23

curl

http://doc.php.net/downloads/json/php_manual_en.json
| jq-rs '[ .[] | keys ] | flatten |

unique | .[]' | grep -v :: | wc -l

Page 24

増えたんですが…

Page 25

PHPには関数がいっぱい

ここから辿る

Page 26

PHPには関数がいっぱい

われわれの知る
標準関数はこのへん

Page 27

おなじみの関数がいっぱい

Page 28

拡張モジュール(Extension)とは

  • PHPにコンパイル時または起動時にロードされる機能単位
    • PHPスクリプトではなく動的モジュール(*.so, *.dll)で提供される
  • コンパイル時に有効化/無効化するか、php.iniに記述する必要あり
    • オンプレで実行していたりするとシステム管理者の作業が必要な場合あり
      • レンタルサーバー(非VPS)では利用者が設定できないかもしれない
  • ApacheやPHP-FPMでは設定変更後に再起動することで反映される

Page 29

拡張モジュールの種類

  • コア拡張 → PHPの標準機能として組み込まれており無効化できない
  • バンドル拡張 → PHPに同梱されていてコンパイル時に有効化できる
  • 外部拡張 → PHP以外のライブラリとリンクすることで有効になる機能
  • PECL拡張 → pecl.php.net でインストールできるモジュール
  • その他(野良) → コードからphpizeしてcon(cid:219)gureしてmake install

Page 30

Docker

(PHP Official Image)

mbstringはデフォルト有効

Page 31

Debianではモジュールごとのapt

よく使われるモジュールも 明示的にインストールが必要

Page 32

WindowsではDLL同梱

Page 33

php.ini

Page 34

Windowsの場合のphp.ini

必要なところだけ ; を消す

Page 35

話を戻しましょう

Page 36

狭義の標準関数=
コア拡張に属する関数

Page 37

取材班は関数の数を 数えるためJSONに 向き合うことにした

Page 38

php_manual_en.json

Page 39

区切り文字がない関数名

Page 40

ていねいな正規表現でキャッチ

Page 41

スクリプトはここにあります

Page 42

ていねいな正規表現調べ

Page 43

774個の関数を
覚えられるか

Page 44

😇

Page 45

数が多すぎるので
馴染みのない関数を 調べる方が筋がいい

Page 46

どうやって関数を探す?

Page 47

関数名 検索

php [ ]

Page 48

🙅

Page 49

php.net/json_encode

Page 50

php.net/DateTime

Page 51

php.net/$_SERVER

Page 52

特定の関数から
追っていく

Page 53

たとえば
配列を処理したい

Page 54

適当な配列関数にアクセス

ここから辿る

Page 55

日本語説明付き一覧がある

Page 56

言語を横断して関数に
使われがちな語彙も
身につけられる