2

重要な変更を加える必要のあるPHPコードをいくつか継承しました。PHPを使用すると、オブジェクトをシリアル化し、シリアル化されたテキストをフォームデータとしてページ間で渡すことができることを知っています。私が継承したコードでは、彼らはまさにそれを行っていますが、これはいくつかの保守性の問題を引き起こしています。このアプローチを取るのは良い考えでさえあるのだろうかと思います。

例えば ​​...

ユーザーがPageA.phpを開くと、以下が作成されます。

$expensiveObj = new ExpensiveClass($id);

次に$expensiveObj、がシリアル化され、結果のテキストが次のようにdivに格納されます。

<div id="expensiveObj"><?php echo strtr(base64_encode(serialize($expensiveObj)), '+/=', '-_,');?></div>

PageA.phpがロードされると、 PageB.phpに対してajax呼び出しが行われます。divの内容は、post変数としてPageB.phpに渡されます。PageB.php内で、次のコードがオブジェクトのシリアル化を解除します。

$expensiveObj = unserialize(base64_decode(strtr($_POST['expensiveObj'], '-_,', '+/=')));  

のフィールドとメソッド$expensiveObjにPHPがアクセスできるようになりました。私が直面している問題は

  • はPageB.phpでクラスのインスタンスとして$expensiveObj識別されていないため、IDEはのフィールドと関数が使用可能であることを認識しません。オートコンプリートを実行したり、IDE内で使用可能な関数を検索したりすることはできません。さらに、IDEは潜在的な問題をキャッチできません。他の開発者はVIで独占的に働いていたので、彼は決して気にしませんでした。ExpensiveClassExpensiveClass

  • PageB.phpはリファクタリングする必要があります。このページ内でビュー、ビジネス、およびコントローラーロジックがすべて発生しているため、いくつかのクラスを作成したいのですが、クラスに渡す方法がわからないという問題が発生しています$expensiveObj

私の質問は、オブジェクトをクラスに渡す方法はありますか?そして、渡されたpost変数が実際にのインスタンスであることをIDEに通知する方法はありますExpensiveClassか?

最後に、この方法でオブジェクトを渡すことも良い考えですか、それともより大きなリファクターを検討する必要がありますか?

4

1 に答える 1

2

オブジェクトをHTMLに直接保存することは、クライアントが簡単に変更できるため、決して良い考えではありません。PHPでは、指定されたパラメータに従って、すべてのリクエストで新しいオブジェクトを作成するのが一般的です。を使用してオブジェクトを初期化している$idので、リクエスト間でこのIDを渡すことができます。セッションへのデータの保存もベストプラクティスではありません。セッションは、ログインしたユーザーなど、セッション固有のデータに使用する必要があります。

オブジェクトの作成に非常に費用がかかる場合は、memcacheなどのキャッシュ、外部ライブラリを使用するか、ファイルシステムやデータベースにJSONでデータを保存するなどの独自のライブラリを作成することができます。

于 2012-12-05T22:06:31.293 に答える