標準関数のコードを読んでみる ~PHPコアコードの読み方~
by
dShikata
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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 ご清聴ありがとうございました。