Page 1
コードを自在に操るための
PHP文法入門
Introduction to PHP syntax for mastering code manipulation
pixiv Inc.
USAMI Kenta
PHPCon Kansai
2023-02-08 At Grand Front Osaka
公開日:
by USAMI Kenta@tadsan
に大阪府大阪市北区のグランフロント大阪で開催された『PHPカンファレンス関西2024』でレギュラートーク(40分)として発表しました。
コードを自在に操るための
PHP文法入門
Introduction to PHP syntax for mastering code manipulation
pixiv Inc.
USAMI Kenta
PHPCon Kansai
2023-02-08 At Grand Front Osaka
お前誰よ
emacs-php
PHPカンファレンス関西2017
PHPカンファレンス関西2018
今回のお題
世はまさに
静的解析時代!
静的解析
プログラムの性質を
プログラムを実行せずに
検査する技術の総称
2010年〜
PhpStormリリース
2018年〜
PHPStanの普及
PHPStanの特徴
PHPを正確に
理解したいと思った ことはありますか?
PHPを正確に
理解したいと思った ことはありますか?
正確じゃない理解
#とは
ソースコードを
リファクタリングする
ことを考えましょう
例えば:
クラス名を変更したい
パッケージ全部ではなく 1クラスだけ移動したい
Hakone\Runner
↓
Olympic\Athlete
シェル芸で一発
$ find . -type f -name "*.php" -exec gsed -I \
's/Hakone\\\\Runner/Olympic\\\\Athlete/g' {} +
シェル芸で一発
$ find . -type f -name "*.php" -exec gsed -I \
's/Hakone\\\\Runner/Olympic\\\\Athlete/g' {} +
完
…そう簡単には
いきませんよね?
なぜ単純に置換してはいけないのか
PHP名前空間の
クラス名解決
<?php
namespace Foo;
$now = new Date();
// Fatal error: Uncaught Error: Class "Foo\DateTime" not found
クラス名の絶対参照
<?php
namespace Foo;
$now = new \Date();
// No errors.
クラスのインポート
<?php
namespace Foo;
use Date;
$now = new Date();
// No errors.
もっと簡単に
PhpStorm最高!
PhpStorm最高!
2024年、全PHPerは
リファクタリングの
全フローをPhpStorm に委ねるしかないのか?
そうではない
(もちろんPhpStormも
優れた製品だが)
ということで
Rectorを使おう
Rectorとは
Rectorの特徴
こうぶんき
構文木ってなんだ
プログラムは
どうやって動くの?
ソースコード
字句解析(tokenize)
構文解析(parsing)
if条件式
if文 ==比較式
echo文
トークン列
PHPはじまったな
if文はじまったな
条件式はじまったな
こいつの前後は==比較だな
条件式終了のお知らせ
ここからブロックだな
echoだな
文字列だな
; で echo \(^o^)/ オワタ
} で if文 \(^o^)/ オワタ
PHP-Parser
構文木 (4.x)
構文解析(parsing)
if条件式
if文 ==比較式
echo文
構文木 (4.x)
構文木 (5.x)
構文木 (syntax tree)
expression
= 式
Statement
= 文
PHP構文での echoとprintの
違いは?
式 vs 文
式と文と式文
PHP-Parser 4.x → 5.0
PHP7 vs 8: トークナイズの違い
token_get_all()の違い
PHP 7.xで動いてたコード
PHP 8.xで動くコード
スライドここまで
隣の世界でも
構文解析時代の到来
