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分)として発表しました。
PHPCon Kansai 2023-02-08 At Grand Front Osaka
お前誰よ
世はまさに静的解析時代!
静的解析プログラムの性質をプログラムを実行せずに検査する技術の総称
2010年~PhpStormリリース
2018年~PHPStanの普及
実行時の状態をかなり正確に推測できる
利用することもできる
PHPを正確に理解したいと思ったことはありますか?
PHPを正確に理解したいと思ったことはありますか?
正確じゃない理解
#とは
ソースコードをリファクタリングすることを考えましょう
例えば:クラス名を変更したい
パッケージ全部ではなく1クラスだけ移動したい
$ 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
クラス名の絶対参照
// No errors.
クラスのインポート
<?php namespace Foo;use Date;$now = new Date();
// No errors.
2024年、全PHPerはリファクタリングの全フローをPhpStormに委ねるしかないのか?
(もちろんPhpStormも優れた製品だが)
Rectorとは
対応できる (PHPやPHPUnitのバージョンアップなど)
型情報にアクセスできるため、(コードに適切な型がついているという前提において)かなり信頼性の高いリファクタリングが可能
制御には対応していない (ほかのフォーマットツールや同作者のECSを併用)
プログラムはどうやって動くの?
if文if条件式==比較式
echo文
PHPはじまったな
if文はじまったな
条件式はじまったな
こいつの前後は==比較だな
条件式終了のお知らせ
ここからブロックだな
echoだな
文字列だな
; で echo \(^o^)/ オワタ
} で if文 \(^o^)/ オワタ
if文if条件式==比較式
echo文
構文木 (syntax tree)
けるので、トップレベル(一番外側)は配列 [] になっている
expression
= 式
Statement
= 文
PHP構文でのechoとprintの違いは?
式 vs 文
式と文と式文
PHP-Parser 4.x → 5.0
PHP7 vs 8: トークナイズの違い
隣の世界でも構文解析時代の到来
