Slide 1

Slide 1 text

#phpltfes ©2020 RAKUS Co., Ltd. 標準関数のコードを読んでみる ~PHPコアコードの読み方~ 四方 大輔

Slide 2

Slide 2 text

#phpltfes 自己紹介 ● 氏名 ○ シカタ ダイスケ ● 所属 ○ 株式会社 ラクス ● お仕事 ○ Mail Dealerの機能開発をやってます

Slide 3

Slide 3 text

#phpltfes 今日話すこと ● PHPの標準関数の読み方 ● 一度も読んだことない人向け ● 読めそうな気になってもらえたら嬉しい ● C言語の話は(ほぼ)しません

Slide 4

Slide 4 text

#phpltfes こんなことありませんか?? ● PHPの挙動に振り回される ○ バージョンアップで挙動が変わった … ○ 関数が意味不明な値を返す … ○ 意味不明な挙動をしている … ○ 引数で使えるかわからない値 …

Slide 5

Slide 5 text

#phpltfes 実際にありました ● バージョンアップでcount関数の挙動が変わった ○ Countableでない値は1、nullだけは0を返す?? ○ Falseは?空文字は??空配列とかどうなるの … ○ nullだけ0ってなんやねん … ● curlの関数が意味不明な値を返してくる ○ ステータスコード0ってなんやねん… ○ そんなん定義されてないやん …

Slide 6

Slide 6 text

#phpltfes そうだ PHP本体のコード、 読もう。

Slide 7

Slide 7 text

#phpltfes 読んだらスッキリしました ● バージョンアップでcount関数の挙動が変わった ○ ちゃんと、Countableでない値は1、nullは0を返すようになってた! ○ nullのとき、配列のとき、オブジェクトのとき、それ以外みたいなロジック ○ わかりやすい分岐で、スッキリ(自己満足) ● curl関連の関数が意味不明な値を返してくる ○ 0を返す実装になってた! ○ なるほど、スッキリ(自己満足)

Slide 8

Slide 8 text

#phpltfes でも、ソースコード読むって 難しいんでしょ??

Slide 9

Slide 9 text

#phpltfes (雰囲気だけなら) 意外と読めます!!

Slide 10

Slide 10 text

#phpltfes まず、読む前に ● 必要なもの ○ ソースコードはここ ■ https://github.com/php/php-src ○ 最低限のC言語の知識 ■ 基本的な文法がわかれば十分 ■ あとは、雰囲気で上から下へ読めたら OK

Slide 11

Slide 11 text

#phpltfes 標準関数の探し方 ● キーワード PHP_FUNCTION( 関数名 )

Slide 12

Slide 12 text

#phpltfes 読むときのコツ ● 深追いしない ● 雰囲気だけを理解する ● ある程度納得したらやめておく ● いきなり沼(言語のコア)に飛び込まない

Slide 13

Slide 13 text

#phpltfes 読んでみる! ● 今回の対象 ○ sleep関数 ● 目的 ○ 引数に0を指定したらどんな動きになるの?? ○ 本当に0秒スリープするの??

Slide 14

Slide 14 text

#phpltfes sleep関数を探してみる ● PHP_FUNCTION(sleep) ● IDEを使ってもOK

Slide 15

Slide 15 text

#phpltfes sleep関数を探してみる ● sleep関数

Slide 16

Slide 16 text

#phpltfes sleep関数を読んでみる ● sleep関数 zendは言語解析の関連(沼) この辺っぽい

Slide 17

Slide 17 text

#phpltfes sleep関数を読んでみる ● さらに追いかける

Slide 18

Slide 18 text

#phpltfes sleep関数を読んでみる ● マクロの定義を2つ見つけた ??? windowsでないなら C言語の sleep

Slide 19

Slide 19 text

#phpltfes sleep関数を読んでみる ● これ以上は追いかけられない

Slide 20

Slide 20 text

#phpltfes sleep関数を読んでみる ● sleep Ex ??? ○ PHP内で定義されているものではない ○ たぶん何かのAPIやライブラリだろう… ○ あとは調べたらいけそう

Slide 21

Slide 21 text

#phpltfes sleep関数を読んでわかったこと ● Sleep関数 ○ 実行環境がWindowsの場合 ■ windowsAPIのスリープ機能が呼ばれる ■ SleepExに0を指定すると、ほぼ0秒スリープになるらしい ○ 実行環境がWindows以外の場合 ■ C言語のsleepが呼ばれる ■ C言語のリファレンスには0が指定可能と書かれている ● 結論 ○ sleep関数の引数で0を指定すると、ほぼ0秒スリープになるらしい

Slide 22

Slide 22 text

#phpltfes 簡単じゃないですか??

Slide 23

Slide 23 text

#phpltfes まとめ ● 読んでみるだけなら意外と簡単 ○ 普通にソースコードを読むノリでいける ○ PHP_FUNCTION( 関数名 )を探す ○ 手続きなので、雰囲気で理解する ○ 追いすぎない ○ 沼に飛び込まない ○ もちろん、ちゃんと理解しようと読むと、もう少し苦労する ○ コアなところはノリでは読めないので注意 ※ あくまで個人的な読み方です。

Slide 24

Slide 24 text

#phpltfes 身近な関数で試してみてください

Slide 25

Slide 25 text

#phpltfes ご清聴ありがとうございました。