複製のための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
クラスライブラリ)
のためのコードジェネレータです。