суббота, 12 января 2008 г.

Ликбез

Решил пустить в печать еще один выпуск рубрики Xtreme Coding PHP.

Смотрим на код.

$item['hp']>0?$this->add('total_hp',$item['hp']):'';


Немногие догадаются, что он означает, да и вообще такие операции (забыл как они называются, как-то вычурно) у народа особым спросом не пользуются.

А меж тем это очень мощная конструкция, которая помогает обойти лесом большие программные навороты. Сия операция родом из С++, поэтому работает куда быстрее стандартных if или switch.

Итак. Первым делом идёт операция сравнения $item['hp']>0 которая спрашивает - не больше ли $item['hp'] (т.е. количество НР, которое добавляет предмет к НР игрока при надевании [одевании]) нуля. Т.е. банальное if($item['hp'] > 0).

После чего идёт вопросительный знак. Он означает открывающий контейнер {. После него идёт $this->add('total_hp',$item['hp']), в данном случае означающее прибавление к общему числу НР игрока НР вещи. Иначе говоря, эта конструкция выполняется при результате сравнения True. После этой команды идёт двоеточие, которое означает закрывающий контейнер } и открывающий контейнер else {, после которого выполняется операция False. В нашем случае ничего не выполняется, и поэтому стоят две одинарные кавычки. И, наконец, стандартная точка с запятой, в данном случае означающая закрывающий контейнер }.

Еще раз приведу исходный код, а после - тот же код, но с использованием стандартных операторов.

$item['hp']>0?$this->add('total_hp',$item['hp']):'';


if($item['hp'] > 0) {
$this->add('total_hp',$item['hp']);
}
else {
return false;
}


Или же

if($item['hp'] > 0)
$this->add('total_hp',$item['hp']);
else
return false;


Или же

if($item['hp'] > 0)
$this->add('total_hp',$item['hp']);


Но, тысяча чертей, согласитесь, что первый вариант выглядел куда изящнее, чем эти трёхэтажные катакомбы.

Комментариев нет: