Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
標準関数のコードを読んでみる ~PHPコアコードの読み方~
Search
dShikata
August 21, 2020
420
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
標準関数のコードを読んでみる ~PHPコアコードの読み方~
PHP Lightning Talk Fes "SUMMER 2020" #phpltfes
dShikata
August 21, 2020
More Decks by dShikata
See All by dShikata
20年以上のレガシーシステムで始めるリファクタリングの半歩 / RAKUS Meetup Refactoring
dshikata
0
1.6k
Node.jsのEOLと格闘した2年間の記録
dshikata
1
2.1k
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
Ethics towards AI in product and experience design
skipperchong
2
380
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Chasing Engaging Ingredients in Design
codingconduct
0
320
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
From π to Pie charts
rasagy
1
380
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
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 ご清聴ありがとうございました。