Вы не можете заставить __toString () снова принимать параметры.Подпись метода должна быть поверхностной.(Я согласен, что это излишнее осуждение, и почему они не просто выбросили E_DEPRECATED вместо генерации фатальной несовместимости, не очень разумно.)
Единственный обходной путь - использование func_get_args()
вместо реальных параметров:
class EmptyString {
function __toString() {
print_r(func_get_args());
return "";
}
}
Это заставит 5.3 вызвать неявную __toString для "$so";
, но все же разрешить ручное $so->__toString(_WITH, "params");
.
Эта схема не допускает простоты значений параметров по умолчанию:курс.А поскольку ваша цель - заставить работать устаревшее приложение, этого недостаточно.Вам необходимо реализовать этот обходной путь в базовом классе, а также адаптировать существующие методы __toString в __oldString и вызывать их в режиме Compat.Немного переписать не получится.
Без каких-либо сложных методов-оболочек ваш конкретный пример кода адаптировался:
public function __toString()
{
$format = func_get_arg(0) or $format = 'Y-m-d';
return date($format, $this->_stamp);
}