標準関数のコードを読んでみる ~PHPコアコードの読み方~
by
dShikata
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 ご清聴ありがとうございました。