PEAR のほとんどはまだ php4 をターゲットにしているため、これを「フレームワーク」として使用できます。drupal と codeignitor もまだ php4 をターゲットにしていると思います (おそらく cakephp も?)。
オブジェクトと php4 の最大の問題は、オブジェクトが値渡しされることです。そのため、参照を使用して、他のほとんどの言語がオブジェクト (php5 を含む) に対して持っている通常のセマンティクスを取得する必要があります。オブジェクトへの参照を常に割り当てるには、十分に注意する必要があります。それ以外の場合は、暗黙的に複製されます。これは退屈で、失敗するとデバッグが非常に困難です。さらに、コードが php5 と互換性がなくなります。例えば。:
オブジェクトの作成:
$foo =& new Foo();
オブジェクトを引数として関数に渡す:
class Bar {
function cuux(&$foo) {
}
}
$bar =& new Bar();
$bar->cuux($foo);
引数は参照であるため、定数を渡すことはできません。したがって、オブジェクトの代わりに NULL を渡す必要がある場合は、最初に NULL をローカル変数に割り当てる必要があります。例えば。:
$bar =& new Bar();
$foo = null;
$bar->cuux($foo);
関数からオブジェクトを返す:
class Bar {
function &doink() {
$foo =& new Foo();
return $foo;
}
}
$bar =& new Bar();
$foo =& $bar->doink();
$foo を変数に割り当てなければならないことに注意してください。これにより、別の関数の結果を直接返すことができなくなります。例えば。これは違法です:
class Bar {
function &doink() {
return $this->foo->doink();
}
}
そのはず:
class Bar {
function &doink() {
$tmp =& $this->foo->doink();
return $tmp;
}
}
これらのアンパサンドの 1 つを逃すと、乾杯します。また、参照がどのように動作するかを十分に理解していることを確認してください。参照は正確には直感的ではありません。