Большая часть PEAR все еще нацелена на php4, так что вы можете использовать это в качестве «фреймворка». Я полагаю, что drupal и codeignitor по-прежнему нацелены на php4 (возможно, на cakephp?).
Самая большая проблема с объектами и php4 заключается в том, что объекты передаются по значению, поэтому вам нужно использовать ссылки, чтобы получить обычную семантику, которую большинство других языков имеют для объектов (включая php5). Вы должны быть очень осторожны, чтобы всегда назначать ссылку на объекты. В противном случае он будет неявно клонирован. Это утомительно и очень трудно отлаживать, если вы запутались. Кроме того, это сделает ваш код несовместимым с php5. Eg.:
Создание объекта:
$foo =& new Foo();
Передача объекта в качестве аргумента функции:
class Bar {
function cuux(&$foo) {
}
}
$bar =& new Bar();
$bar->cuux($foo);
Поскольку аргументы являются ссылками, вы не можете передать константу. Так что если вы должны передать NULL вместо объекта, вы должны сначала присвоить NULL локальной переменной. Eg.:
$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;
}
}
Мисс только один из этих амперсандов, и вы тост. Также убедитесь, что вы хорошо понимаете, как ведут себя ссылки - они не совсем интуитивно понятны.