複製のためのC++ライクなテンプレート
GIJOEさんは、記事の中でポリモフィズムのためにXOOPS_TRUST_PATH[1]を利用することを提案しました。それは良いアイデアです。 Nuke PageController の組み合わせは、'複製可能'のためのいくつかの弱点を持っています。それに関するエクセレントなコードを書くことはなかなか難しいといえます。GIJOEさんはそのような問題を解決しようとしています。

私は以前、私の会社に関するイントラネット・ウェブ・プログラムで同様のメカニズムを実現する面白いコードを見かけました。私はそれの詳細を書くことができませんが、おおむね以下のようなものでした
:

define_class('myData', 'tableA');
$instance = new myDataHandler();

function
define_class($className, $tableName)
{
  
//
  // Define class
  //
  
$code = "class {T}_Handler {" ...

  
$code = str_replace("{T}", $className);
  
$code = str_replace("{table}", $tableName);

  eval(
$code);
}


これはeval()による簡単なC++テンプレートメカニズムです。実行コードが直接関数に書かれているので、これはほとんど安全です。 私は、それからヒントを得て、extools[2]ClassTemplateを開発しました。

eval()は、XOOPSにおいて'複製可能'メカニズムのためによく使用されます。 C++ライクなテンプレートメカニズムはeval()の使用のための統一手順ということになります。それは設計を気楽にしてくれるかもしれません。しかし、eval()はしばしばセキュリティーホールを作ります。 このような使用方法をするときがきたら、十分注意してください。

---
[1] XOOPS_TRUST_PATHはウェブブラウザがアクセスすることができない安全なディレクトリです。
[2] extools exFrame(XOOPSクラスライブラリ)のためのコードジェネレータです。
|