Смотрим на код.
$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']);
Но, тысяча чертей, согласитесь, что первый вариант выглядел куда изящнее, чем эти трёхэтажные катакомбы.
Комментариев нет:
Отправить комментарий