sunday-labの日本語訳版です。英語版のXOOPS Cube関連記事を翻訳作業中...

2007年4月16日月曜日

MyTextSanitizer will be changed

xoopscube.org は、 2.1 にアップグレードされました。初めのうちは、 xoopscube.org は、問題を全く持っていないように思われました。しかし、 xoopscube.org は、 Legacy の 3 つのバグを持っていました。従って、我々は、それらを固定しなければなりませんでした。それらのうちの 1 つは、 MyTextSanitizer です。最新の Legacy において、 MyTextSanitizer は、 Legacy_TextFilter インタフェースへのシンプルなアダプタです。MyTextSanitizer は、 XOOPS2 における悪いクラスのうちの 1 つとして知られています。

Legacy において、 MyTextSanitizer の全てのメソッドは、 $text を取得することに参照パラメータ(&)を使うことを止めるでしょう。なぜなら、 XOOPS2 は、それにバグを持っているからです。いくらかのケースにおいて、 MyTextSanitizer は、参照変数を見失い、そして、参照が切れたときに生成される新しい変数を返します。いくらかのモジュールは、正常動作にこの偶発的バグを必要とします。Legacy が参照を保持し続けるようにこのバグを修正済であったので、いくらかのモジュールは、 xoopscube.org においてトラブルに遭遇しました。Legacy の MyTextSanitizer が X2 バグをエミュレートすることは困難であり、ナンセンスです。そこで私達は参照パラメータを使用中止することを決断しました。

しかし、 MyTextSanitizer は、参照であるその戻り値の型は変更しません。なぜなら、多くのモジュールは、次のコードを持っているためです;

$text =& $myts->xxxxx($text);

戻り値の型を変えることは、多くのモジュールが PHP Notice を上げることを意味します。従って、我々は、それをしないでしょう。あなたがモジュールを 2.1 のためにのみ開発するならば、あなたは、 MyTextSanitizer の代わりに $root->mTextFilter を使うべきです。XCube_TextFilter のサブクラスである Legacy_TextFilter は、スクラッチから作られ、そして、よく整理されたインタフェースを持ちます。

これを変えることは、問題を2~3のモジュールにもたらすかもしれません。MyTextSanitzer は、 C スタイルをとりました。従って、それらが次のコードを持っているならば、それらは、正しく Legacy 上で動かないでしょう;

$myts->xxxxx($text);
print $text;

開発者はこれを次のように変更しなければなりません;

$text =& $myts->xxxxx($text);

RC2 はいくつかのバグが修正された後でリリースされるでしょう。詳しくは、このスレッドを読んでください。

0 件のコメント: