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
A better future with KSS
kneath
238
17k
We Have a Design System, Now What?
morganepeng
50
7.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
The Cost Of JavaScript in 2023
addyosmani
45
6.6k
Documentation Writing (for coders)
carmenintech
65
4.4k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
7.9k
Embracing the Ebb and Flow
colly
84
4.4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
290
KATA
mclloyd
29
13k
Rails Girls Zürich Keynote
gr2m
93
13k
Making the Leap to Tech Lead
cromwellryan
132
8.9k
Why You Should Never Use an ORM
jnunemaker
PRO
53
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 ご清聴ありがとうございました。