Slide 1

Slide 1 text

新米 PHPerですが、
 php-src を ちょっとだけ読めちゃった件について
 
 2024/01/13
 
 (株)インフィニットループ 
 サーバーサイドエンジニア  kerokero
           


Slide 2

Slide 2 text

Agenda
 1. 自己紹介しつつ  
 
 2. php-src を読んでみたい
 
 3. おわりに


Slide 3

Slide 3 text

どうも、kerokero です。


Slide 4

Slide 4 text

22卒 自称青魔道士系エンジニア 
 (株)インフィニットループ 
 kerokero ・北海道の 札幌 生まれ、札幌 育ち
 ・水産→数学(非情報系)→2022年4月にIL入社   ・最近の趣味は 絵を描く (→↓↘) ことと ストリートファイター6 (MR1400周辺) です
 ・担当領域は サーバーサイド のアプリ・インフラ周辺(Laravel, AWS, k8sなど) です 


Slide 5

Slide 5 text

今回の発表の対象者
 ・ PHP本体のソースコードに興味がある初心者の方
 
 


Slide 6

Slide 6 text

今回の発表の対象者
 ・ PHP本体のソースコードに興味がある初心者の方
 ・ php-srcに興味を持ったことがあるけど難しそうだからと敬遠気味な 人
 
 
 


Slide 7

Slide 7 text

今回の発表の対象者
 ・ PHP本体のソースコードに興味がある初心者の方
 ・ php-srcに興味を持ったことがあるけど難しそうだからと敬遠気味な 人
 ・ 難しそうな話を聞くのは5分間が限界な人      ↑ HOT‼
 
 5分間も集中できるの偉い! 


Slide 8

Slide 8 text

今回の発表の対象者
 ・ PHP本体のソースコードに興味がある初心者の方
 ・ php-srcに興味を持ったことがあるけど難しそうだからと敬遠気味な 人
 ・ 難しそうな話を聞くのは5分間が限界な人      ↑ HOT‼
 
 5分間も集中できるの偉い! 
 1分間だけ🙏
 1


Slide 9

Slide 9 text

では、見ていきましょう!


Slide 10

Slide 10 text

少しPHPが分かったと思った頃に
 こんな経験、ありませんか?
 アルバイトのめぐるちゃん

Slide 11

Slide 11 text

PHP 難しくてよく分からないな~
 <


Slide 12

Slide 12 text

シュバッ!
 え、なになに?
 >
 PHP 難しくてよく分からないな~
 <


Slide 13

Slide 13 text

Composer の実装を見てるんだけど……
 (おっ......?)
 あー、Composerね
 どれどれ、どこが分からんの?
 >
 <


Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

※
 ・PHPのオートロードは spl_autoload_register を使って登録される らしい
 
 ・引数としてautoload関数を与えてあげる とキューの中に追加されていき、定義さ れた順に紐づけられていくみたいです 
 
 ・とはいえ、php-srcの中に踏み込むこと になるのでここでは詳細は触れません 


Slide 16

Slide 16 text

spl_autoload_register ってどうやって動いてるんですか?
 あーね……
 >
 <


Slide 17

Slide 17 text

???


Slide 18

Slide 18 text

…… >

Slide 19

Slide 19 text

https://github.com/php/php-src この辺読むといいかもね
 slackにリンク張っておいたわ
 >

Slide 20

Slide 20 text

https://github.com/php/php-src この辺読むといいかもね
 slackにリンク張っておいたわ
 >

Slide 21

Slide 21 text

Slide 22

Slide 22 text

・ ・

Slide 23

Slide 23 text

・ ・ ・

Slide 24

Slide 24 text

php-srcを読んでみたい

Slide 25

Slide 25 text

php-srcを読んでみたい!!

Slide 26

Slide 26 text

Agenda
 1. 自己紹介しつつ      
 
 2. php-src を読んでみたい
 
 3. おわりに


Slide 27

Slide 27 text

・php-srcを読んでみたい
 ・PHPとはThe PHP Groupによって開発されている 
 ・オープンソースの汎用プログラミング言語 
 および
 ・その公式の処理系
 
 


Slide 28

Slide 28 text

・php-srcを読んでみたい
 ・PHPとはThe PHP Groupによって開発されている 
 ・オープンソースの汎用プログラミング言語 
 および
 ・その公式の処理系
 
 
 ・そして、php-srcというのは「公式の処理系」である方のPHPのことであり、これを読んで理解す るというのはなかなか骨が折れる作業 
 


Slide 29

Slide 29 text

・php-srcを読んでみたい
 ・個人的にphp-srcを読みたいと思った動機は Composerの中身を知りたいというものだった


Slide 30

Slide 30 text

調べてみよう

Slide 31

Slide 31 text

・php-srcを読んでみたい
 ・php-src を読むためにはC言語が読めないといけない


Slide 32

Slide 32 text

・php-srcを読んでみたい
 ・php-src を読むためにはC言語が読めないといけない
 
 
 
 
 
 
 
 
 
 基本的には雰囲気で読んでいけばOKらしい


Slide 33

Slide 33 text

たしかに、なんとなく追えそうな……


Slide 34

Slide 34 text

・php-srcを読んでみたい
 ・一見、コードの流れ自体はなんとか理解できそう……
 
 


Slide 35

Slide 35 text

・php-srcを読んでみたい
 ・一見、コードの流れ自体はなんとか理解できそう……
 
 
 
 
 
 
 
 
 
 
 
 ・大文字で書いてあるマクロ部分がヤバい
   ※小文字の部分がヤバくないとは言ってない 


Slide 36

Slide 36 text

・php-srcを読んでみたい
 ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み
 
 
 
 


Slide 37

Slide 37 text

・php-srcを読んでみたい
 ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み
 
 ・C言語の構文とかお構いなしに、だいたいなんでも書ける
 
 
 
 


Slide 38

Slide 38 text

・php-srcを読んでみたい
 ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み
 
 ・C言語の構文とかお構いなしに、だいたいなんでも書ける
 
 ・マクロの中で変数定義してたりする
 
 
 


Slide 39

Slide 39 text

・php-srcを読んでみたい
 ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み
 
 ・C言語の構文とかお構いなしに、だいたいなんでも書ける
 
 ・マクロの中で変数定義してたりする
 
 ・引数がマクロで書かれてたりする
 
 


Slide 40

Slide 40 text

・php-srcを読んでみたい
 ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み
 
 ・C言語の構文とかお構いなしに、だいたいなんでも書ける
 
 ・マクロの中で変数定義してたりする
 
 ・引数がマクロで書かれてたりする
 
 ・型定義もマクロで書いてあったりする
 


Slide 41

Slide 41 text

・php-srcを読んでみたい
 ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み
 
 ・C言語の構文とかお構いなしに、だいたいなんでも書ける
 
 ・マクロの中で変数定義してたりする
 
 ・引数がマクロで書かれてたりする
 
 ・型定義もマクロで書いてあったりする
 
 ・   < えっ?型定義だけでなく、メモリの割り当てと配置も理          解し ないといけないんですか……? 


Slide 42

Slide 42 text

とりあえず一旦整理

Slide 43

Slide 43 text

・php-srcを読んでみたい
 ・php-srcはほとんどC言語で書いてある
 
 ・まずは雰囲気で読めばOK
 
 
 
 
 


Slide 44

Slide 44 text

・php-srcを読んでみたい
 ・php-srcはほとんどC言語で書いてある
 
 ・まずは雰囲気で読めばOK
 
 ・大量に出てくるマクロを理解する必要がある
 
   ・マクロの処理を追う必要があることを理解しておく
 
 
 
 
 
 


Slide 45

Slide 45 text

・php-srcを読んでみたい
 ・php-srcはほとんどC言語で書いてある
 
 ・まずは雰囲気で読めばOK
 
 ・大量に出てくるマクロを理解する必要がある
 
   ・マクロの処理を追う必要があることを理解しておく
 
 ・php-src特有のメモリ配置に関する知識が必要
 
   ・zend_execute_data, zval など
 
   ・zval構造体を取得する仕組みなど
 


Slide 46

Slide 46 text

PHPが動く話 急いで!!


Slide 47

Slide 47 text

・php-srcを読んでみたい
 ・PHPは以下の流れでだいたい動いてる
 
 
 
 
 
 
 
 
 1. 実行環境が SAPI のエントリポイントを呼び出す 
 2. PHP 処理系に SAPI から入出力用の処理が登録される 
 3. PHP 処理系が SAPI から起動される 
 4. PHP 処理系がリクエストの処理を開始し、スクリプトファイルを開く 
 5. Zend Engine がスクリプトから VM で実行する中間コードを生成する 
 6. Zend Engine が生成された中間コードを実行する 
 7. 実行中に PHP 処理系からの出力処理が必要なら、SAPI で登録された処理を通 して行われる
 8. PHP 処理系がリクエストの処理を終了する

Slide 48

Slide 48 text

よく分からん

Slide 49

Slide 49 text

・php-srcを読んでみたい
 ・すごい簡単にまとめると
 
  ・SAPIのエントリポイント
    ↓
  ・SAPI
    ↓
  ・Zend Engine
    ↓
  ・処理の実行
 
 
 
 
 


Slide 50

Slide 50 text

・php-srcを読んでみたい
 ・SAPIのエントリポイント
 
  ・なんかよく分からんけどSAPIってやつを呼び出している部分
 
 
  ・コマンドラインとかApacheとか
 
 
 
 


Slide 51

Slide 51 text

・php-srcを読んでみたい
 ・SAPI
 
  ・ServerAPIの略
 
 
  ・WebサーバーでPHPを動かすためのAPI
 
  ・PHPを実際に処理してるZendEngineというものを動かすため  のイン ターフェースという理解
 
  ・mod-php, CLI, php-fpmなど
 
 
 


Slide 52

Slide 52 text

・php-srcを読んでみたい
 ・Zend Engine
 
  ・PHPのスクリプトを処理して実行する部分
 
  ・CLIやphp-fpmなんかも、最後はZendEngineを呼ぶ
 
 
 


Slide 53

Slide 53 text

実際の処理 たぶんここまでたどり着いてない


Slide 54

Slide 54 text

・php-srcを読んでみたい
 ・Zend Engineで処理される流れ
 
  ・SAPIから起動される
 
  ・スクリプトの内容を抽象構文木(AST)というものへ変換
   ・スクリプトを構造体にする処理
 
  ・ASTからOpcodeという命令を生成する
 ・zend_compile.c で関数が定義されてます
 
  ・↑で生成されたOpcodeの実行
 
 
 


Slide 55

Slide 55 text

Agenda
 1. 自己とか色々紹介      
 
 2. php-src を読んでみたい
 
 3. おわりに


Slide 56

Slide 56 text

・おわりに
 ・本当に本当に、0が1になった話でした
 
 ・1から100にするためには神記事や過去のカンファレンスを見よう
 
 
 
 
 
 
 


Slide 57

Slide 57 text

結局、
 このスライドでphp-srcが読めるように なった話聞けてなくない??

Slide 58

Slide 58 text

なんと、PHPについて学べる 場所があります!!

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

会場
 札幌オフィス


Slide 61

Slide 61 text

ご清聴ありがとうございました!!