← All posts tagged PHP

PHP

Блеск и нищета php в его массивах. С одной стороны оны универсальны и позволяют не заморачиваться на структурах данных и создавать их с помощью массивов, но это хорошо для простеньких скриптов, где нет смысла создавать графы объектов. В реальном же мире php программисты настолько привыкают к этим массивам, что они их использует везде, порой вместо создание доменных объектов. То есть простота использования массивов приводит к реальному гавнокоду и отсутствию нормальной ОО модели. Это тоже самое, что например во Flex везде использовать hash map (он же Object), а что ? удобно, быстро... но чортов гавнокод, который не поддержишь не разберешься в нем... Наболело, надо сваливать с php =)

Целый день дебажели одну проблему. Заключается она в том что при определенном запросе приходил невалидный AMF-ответ. Отдебажили весь стек вызовов на бекэнде, то есть все вызовы в AMFPHP и в нашем коде, на всех этапах все гуд, но ответ все равно не валидный. Проблема оказалась в том что в нашем коде использовался Smarty для построения письма по некому шаблону, так вот смарти использует eval() внутри себя. Вот здесь и затаилась проблема. Шаблон был с ошибкой — было обращение к не зарегистрированной переменной, код валился с эксепшеном, который обрабатывали и все выглядело как бы хорошо. Но почему не валидный AMF на выходе?? Оказалось что eval "срал" в stdout, и если он вылетал по ошибки, то за собой не убирал. То есть в начале AMF-ответа был мусор, который туда "насрал" eval, поэтому он получался невалидный. Полечилось хаком — ob_start() и ob_end_clean() перед и после $tamplate -> parse();. Будьте внимательны ;)

PHP

Ну вот в чем сила динамического языка если везде по коду следующие конструкции:
/**
* @param integer $timeout for HTTP connection to Selenium RC in seconds
* @throws InvalidArgumentException
*/
public function setHttpTimeout($timeout)
{
if (!is_int($timeout)) {
throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'integer');
}

$this->httpTimeout = $timeout;
}

Кто-то работал с SimpleXML ? Можно ли в уже созданном SimpleXML-объекте изменить индекс некоторого определенного xml-элемента? То есть какой-то не первый элемент сделать первым...

PHP

Php сосет как минимум при рефакторинге, так как при рефакторинге сигнатур методов, интерфейсов, названий клсассов и т.д. нельзя полагаться на компилятор.... Вот отхватил такой бок, теперь расхлебываю =\