Рефакторинг PHP

· На чтение уйдёт 2 минуты · (309 слов)

Вот уж чего не ожидал, так не ожидал. Подвернувшаяся работа с 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();
Полезное