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
4 Signs Your Business is Dying
shpigford
187
23k
ラッコキーワード サービス紹介資料
rakko
1
5M
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
430
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Mobile First: as difficult as doing things right
swwweet
225
10k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
530
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
550
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
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 ご清聴ありがとうございました。