大多数 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;
}
}
错过其中一个 & 符号,你就完蛋了。另外,请确保您对引用的行为方式有很好的理解——它们并不完全直观。