私はPHPで書かれたかなりの量のレガシーコードを持っています。これは特定のフレームワークで書かれたものではなく、たいてい旧式のPHP(つまりインライン)PHPです。しかし、私の新しいコードのほとんどはKohana 3.1.Xフレームワークに書かれています。 Kohanaは、レガシーコードとKohanaファイルの両方を同じWebサイト上に共存させることができますが、KohanaのMVCデザインパターンとURL書き換えをフルに活用したいと考えています。しかし、レガシーコードがビュー自体(レガシーコード)から定義されたグローバル変数にアクセスできず、グローバルスコープステートメントでグローバル変数を参照しようとしているインライン関数を使用できないという問題に遭遇しています。たとえば、次のようにKohanaでPHPレガシーコードをラップするにはどうすればよいですか?
アプリケーション/ビュー/ legacy.php
$gvar = 5;
function getadminsettings(){
global $gvar;
echo $gvar;
}
アプリケーション/クラス/コントローラ/ myctrl.php
...
public function action_legacy() {
// call legacy.php as a view via View::factory()
}
...
私はそんなにレガシーコードを持っているので、それはリファクタリングに非現実的ですこれらのレガシーコードファイルはすべて真のビューになります。これらのファイルをビューとして扱うか、ビューに似ているかのようにアクセスして、コントローラからインラインではなく(実際のMVCデザインパターンに従って)、その後で変数をバインドすることができますこれらのレガシーファイルには?
私はIn PHP, how can I wrap procedural code in a class?を見ましたが、私はKohanaフレームワークを扱っているので、このポストはこのケースでは実際には機能しません。
更新:
のKohanaは、出力バッファを使用しているように見える、従来のファイルで、このようなグローバル変数にアクセスすることができない理由です。 Kohana 3.2でグローバル変数にアクセスするには誰でも成功しましたか?
ためController_Templateを使用しているここと仮定
はい、私は、レガシーコードが定期的に維持され続けますが、私はレガシーコードベースに番号の変更を制限したいと期待しています。 – Matthew
@Matthew:その場合、本格的なリファクタリングが必要だと思います。既存のコードをラップしようとすると、せいぜい脆くなり、最悪の場合には維持するのが難しくなります。 –
私は、View :: factory()メソッドを使用するのではなく、特別なクラスを作成してこれらのスクリプトにアクセスするためにcURL呼び出しを使用するという考えを模索してきましたが、サーバーに負荷を追加したくありません。これがうまくいくと思いますか? – Matthew