Блог студии 77

Магический метод Arr:get()

30 ноября 2012

Статья будет интересна тем разработчикам, кто соблюдает правила хорошего тона и не отключает обработку ошибок Warning и Notice.

В php довольно типичной является конструкция:

if(isset($_POST['action'])){
if($_POST['action'] == 'save') {
echo 'Save';
}
}

или второй пример из шаблонов (views):

<input value="<?php if(isset($_POST['title'])) echo $_POST['title'] else echo 'title field' ?>"name="title" />

и его же сокращенная запись с помощью тернарной операции:

<input value="<?php echo isset($_POST['title']) ? $_POST['title'] : 'title field' ?>" name="title" />

Проясним ситуацию c двумя условиями, отсутствие первого условия – isset($_POST['action']) – приведет к тому, что если нет элемента массива $_POST['action'], то получим ошибку-notice вида ErrorException [ Notice ]: Undefined index: action . Несложно догадаться, что написание 2-х условий везде-везде ну очень монотонная работа. Второй же пример вообще встречается по 20 раз на шаблон с большой формой.

В фреймворке Kohana 3 есть отличный набор классов-хелперов, среди которых можно найти метод get() класса Arr.

public static function get($array, $key, $default = NULL)
{
return isset($array[$key]) ? $array[$key] : $default;
}

Заменим с ее помощью оба примера:

if( Arr:get($_POST, 'action') == 'save' ){
echo 'Save';
}

и

<input value="<?php echo Arr::get($_POST, 'title', 'title field') ?>" name="title" />

Красткость кода и его семантическая простота налицо. Пользуйтесь :)

Для объективности скажем, что в Kohana хелпер перекочевал из прародителя Коханы – (фреймворка CodeIgniter)

Ссылка на сам хелпер с прочими полезностями

Магический метод Arr:get()

Другие статьи автора: