Вот уж чего не ожидал, так не ожидал. Подвернувшаяся работа с zabbix в итоге вылилась в огромный рефакторинг кода на php. Прямо-таки каноничная куча мусора начала неспешно обретать, можно сказать, человеческий облик. Для себя вынес — PHP прилично изменился с тех пор, как я на нём писал. Нормальный код в принципе можно писать для PHP 5.3, но некоторые по-настоящему полезные вещи (в частности, finally) появились в 5.5.
Несмотря на то, что код, который мне попал под нож — каноничный код на PHP (спагетти, смешивание XML и PHP, отсутствие не то что классов — методов!!!), вроде бы получается это дело преобразовать в нормальный код. Жаль, не могу показать внутренности, но главный файл стал выглядеть вот так:
try { if (!$builder->isAvailable()) { $builder->outputError(); exit(); } $builder->outputTree(); $builder->close(); } catch (Exception $ex) { echo $ex->getMessage()." at ".$ex->getLine()." line in ".$ex->getFile()." file\n"; }
В 5.5 было бы ещё изящнее, но к сожалению задача писать код совместимый с 5.3. Но вроде бы всё равно неплохо получается, вместо авгиевых конюшен — вот такое.
P.S. За рефакторинг я взялся в момент, когда встречался вот такой код:
if (($tool=="5") or ($tool=="6") or ($tool == '4'))
С одной стороны — тихий ужас, с другой — я видел, когда таких условий было штук 10 подряд. Так что момент выбран подходящий: сейчас как раз грядёт накачка кода этими тулами.
Да, конечно же, если кто не знал, правильный рефакторинг кода
if (($tool=="5") or ($tool=="6") or ($tool == '4')) { print "456\n"; } else if (($tool=="1") or ($tool=="2") or ($tool == '3')) { print "123\n"; }
выглядит примерно так:
class Class123 { public function doIt() { print "123\n"; } } class Class1 extends Class123 {} class Class2 extends Class123 {} class Class3 extends Class123 {} class Class456 { public function doIt() { print "123\n"; } } class Class4 extends Class456 {} class Class5 extends Class456 {} class Class6 extends Class456 {} $o->doIt();