PHP/コードをファイルスコープにする

PHP/コードをファイルスコープにする

モダンにちゃんと書いていけば名前空間を使ったりクラス化関数化して処理をまとめてスコープを最小限に留めることでメンテナンス性が向上する。

10年前のレガシーコードHTMLの間にPHPコードとかSQLとかが無茶苦茶に挿入されているやつ、や日々量産されるゴミのようなPHPコード(WordPress含む)の中には、変数関数、スコープなんて知りません依存関係なんてわかりませんみたいなコードが多い。

そういう場合に自分が不幸にも任されたソースコードをなんとかリファクタリングしてく手段としてとりあえず自分が任されたファイルだけに影響範囲を閉じ込めるにはどうすればよいかということで・・・

結果として

<?php function hoge(){ ?>
legacy code
<?php $abc = 123; ?>
<?= $abc ?>
<?php $piyo = function(){ echo 'innerpiyo'; }; ?>
<?php $piyo(); ?>
<?php } ?>
<?php hoge(); ?>

このようになる。全体を関数でラップして、内部で作る関数は無名関数で変数内に格納することで外部に漏れないようにする。

前提として Legacy code の include 系の挙動をまとめておく必要がある。

まずこの状態にすることでベタ書きのグローバル変数の部分でエラーが出るので、それを適宜 hoge 関数の引数として引き込んでいく。 このようなダメなコードは必要以上に多い変数にアクセス出来る状態になっているのでここで本当に必要なものだけに整理できる。

さらにこのようなダメコードは共通化とかいう概念が1ミリも無いのが普通なので関数にまとめる。 まとめるにしてもまとめた関数を置く場所すら設計されていないのがダメコードでは常なのでとりあえず自分自身の内部においていて外に漏らさないようにしておく。

php/make_file_scope.txt · 最終更新: 2016-12-01 17:11 by ore