Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
標準関数のコードを読んでみる ~PHPコアコードの読み方~
Search
dShikata
August 21, 2020
1
330
標準関数のコードを読んでみる ~PHPコアコードの読み方~
PHP Lightning Talk Fes "SUMMER 2020" #phpltfes
dShikata
August 21, 2020
Tweet
Share
More Decks by dShikata
See All by dShikata
20年以上のレガシーシステムで始めるリファクタリングの半歩 / RAKUS Meetup Refactoring
dshikata
0
1.1k
Node.jsのEOLと格闘した2年間の記録
dshikata
1
1.6k
Featured
See All Featured
Building Applications with DynamoDB
mza
90
6.1k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
130
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
RailsConf 2023
tenderlove
29
900
The Language of Interfaces
destraynor
154
24k
Facilitating Awesome Meetings
lara
50
6.1k
GitHub's CSS Performance
jonrohan
1030
460k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Designing for humans not robots
tammielis
250
25k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Transcript
#phpltfes ©2020 RAKUS Co., Ltd. 標準関数のコードを読んでみる ~PHPコアコードの読み方~ 四方 大輔
#phpltfes 自己紹介 • 氏名 ◦ シカタ ダイスケ • 所属 ◦ 株式会社
ラクス • お仕事 ◦ Mail Dealerの機能開発をやってます
#phpltfes 今日話すこと • PHPの標準関数の読み方 • 一度も読んだことない人向け • 読めそうな気になってもらえたら嬉しい • C言語の話は(ほぼ)しません
#phpltfes こんなことありませんか?? • PHPの挙動に振り回される ◦ バージョンアップで挙動が変わった … ◦ 関数が意味不明な値を返す …
◦ 意味不明な挙動をしている … ◦ 引数で使えるかわからない値 …
#phpltfes 実際にありました • バージョンアップでcount関数の挙動が変わった ◦ Countableでない値は1、nullだけは0を返す?? ◦ Falseは?空文字は??空配列とかどうなるの … ◦
nullだけ0ってなんやねん … • curlの関数が意味不明な値を返してくる ◦ ステータスコード0ってなんやねん… ◦ そんなん定義されてないやん …
#phpltfes そうだ PHP本体のコード、 読もう。
#phpltfes 読んだらスッキリしました • バージョンアップでcount関数の挙動が変わった ◦ ちゃんと、Countableでない値は1、nullは0を返すようになってた! ◦ nullのとき、配列のとき、オブジェクトのとき、それ以外みたいなロジック ◦ わかりやすい分岐で、スッキリ(自己満足)
• curl関連の関数が意味不明な値を返してくる ◦ 0を返す実装になってた! ◦ なるほど、スッキリ(自己満足)
#phpltfes でも、ソースコード読むって 難しいんでしょ??
#phpltfes (雰囲気だけなら) 意外と読めます!!
#phpltfes まず、読む前に • 必要なもの ◦ ソースコードはここ ▪ https://github.com/php/php-src ◦ 最低限のC言語の知識
▪ 基本的な文法がわかれば十分 ▪ あとは、雰囲気で上から下へ読めたら OK
#phpltfes 標準関数の探し方 • キーワード PHP_FUNCTION( 関数名 )
#phpltfes 読むときのコツ • 深追いしない • 雰囲気だけを理解する • ある程度納得したらやめておく • いきなり沼(言語のコア)に飛び込まない
#phpltfes 読んでみる! • 今回の対象 ◦ sleep関数 • 目的 ◦ 引数に0を指定したらどんな動きになるの??
◦ 本当に0秒スリープするの??
#phpltfes sleep関数を探してみる • PHP_FUNCTION(sleep) • IDEを使ってもOK
#phpltfes sleep関数を探してみる • sleep関数
#phpltfes sleep関数を読んでみる • sleep関数 zendは言語解析の関連(沼) この辺っぽい
#phpltfes sleep関数を読んでみる • さらに追いかける
#phpltfes sleep関数を読んでみる • マクロの定義を2つ見つけた ??? windowsでないなら C言語の sleep
#phpltfes sleep関数を読んでみる • これ以上は追いかけられない
#phpltfes sleep関数を読んでみる • sleep Ex ??? ◦ PHP内で定義されているものではない ◦ たぶん何かのAPIやライブラリだろう…
◦ あとは調べたらいけそう
#phpltfes sleep関数を読んでわかったこと • Sleep関数 ◦ 実行環境がWindowsの場合 ▪ windowsAPIのスリープ機能が呼ばれる ▪ SleepExに0を指定すると、ほぼ0秒スリープになるらしい
◦ 実行環境がWindows以外の場合 ▪ C言語のsleepが呼ばれる ▪ C言語のリファレンスには0が指定可能と書かれている • 結論 ◦ sleep関数の引数で0を指定すると、ほぼ0秒スリープになるらしい
#phpltfes 簡単じゃないですか??
#phpltfes まとめ • 読んでみるだけなら意外と簡単 ◦ 普通にソースコードを読むノリでいける ◦ PHP_FUNCTION( 関数名 )を探す
◦ 手続きなので、雰囲気で理解する ◦ 追いすぎない ◦ 沼に飛び込まない ◦ もちろん、ちゃんと理解しようと読むと、もう少し苦労する ◦ コアなところはノリでは読めないので注意 ※ あくまで個人的な読み方です。
#phpltfes 身近な関数で試してみてください
#phpltfes ご清聴ありがとうございました。