Функция extract. Что такое EXTR_SKIP?

Здравствуйте!

В коде движка WordPress часто используется такая конструкция:

В данной статье я объясню для чего используется этот код.

Впервые я встретил этот код, когда изучал пользовательский вывод комментариев в WordPress. Оказывается, что функция extract не имеет отношения именно к WordPress, а является родной функцией языка php ( на котором написан код CMS WordPress). И не смотря на то, что я уже несколько лет пишу код на языке программирования php, функцию extract мне не доводилось использовать в своей работе. Тем не менее, разобравшись с её предназначением – нашел функцию extract очень удобной для применения в некоторых случаях. Так что, друзья, смотреть и изучать чужой код полезно для развития и повышения своего профессионального уровня в области программирования. Особенно для фрилансеров, которые работают самостоятельно и не имеют возможности регулярно обмениваться опытом со своими коллегами, в отличие от сотрудников, которые работают в офисах.

Теперь в ближе к теме. Немного справочной информации.

 

Функция extract

extract – создает переменные из элементов массива

Синтаксис

Параметры:

var_array – ассоциативный массив. Ключи массива будут именами переменных, а их значения соответственно – значениями переменных.

extract_type – способ трактования коллизий

EXTR_OVERWRITE – если одноименная переменная уже существует, то она будет перезаписана;

EXTR_SKIP – если одноименная переменная уже существует, то ее текущее значение не будет перезаписано.

EXTR_PREFIX_ALL – добавить префикс prefix ко всем именам переменных;

EXTR_PREFIX_SAME – если одноименная переменная уже существует, то к её имени будет добавлен префикс prefix, определенный в третьем параметре функции;

EXTR_PREFIX_INVALID – добавить префикс prefix только к некорректным/числовым именам переменных.

EXTR_IF_EXISTS – перезаписать только переменные, которые уже существуют. Эта возможность полезна, например, для извлечения из массива типа $_REQUEST значений только тех переменных, которые у вас уже определены.

EXTR_PREFIX_IF_EXISTS – создать только переменные с префиксами, в случае, если версия данной переменной без префикса уже существует.

EXTR_REFS – Извлечь переменные как ссылки. Это означает, что значения таких переменных будут ссылаться на значения массива var_array.

По умолчанию параметр extract_type имеет значение EXTR_OVERWRITE.

prefix этот параметр имеет значение, только если предыдущий параметр extract_type установлен в EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID или EXTR_PREFIX_IF_EXISTS.

 

Теперь, основываясь на вышеизложенной информации, мы может понять, что выполняет данный код: extract($args, EXTR_SKIP);

Например, пусть массив $args содержит следующие ключи и значения:

Такие параметры передаются в функцию wp_list_comments, код которой описан в файле /wp-includes/comment-template.php.

Реальный массив имеет большее число элементов, но я взял только два ключа для простоты примера.

Теперь после выполнения extract($args, EXTR_SKIP); у нас будут созданы две переменные:

$max_depth и $avatar_size и им будут присвоены значения ‘5’ и ‘32’ соответственно. То есть, данный вызов функции extract эквивалентен коду (но не всегда! – читайте далее):

Может возникнуть вопрос, зачем нам использовать функцию extract, если можно просто создать нужные переменные и присвоить им соответствующие значения из массива; или, вообще, не плодить промежуточные переменные, а получать нужные значения непосредственно из массива (например вот так: $args[‘avatar_size’])?

Удобство функции extract заключается во втором параметре $extract_type. В нашем примере он имеет значение EXTR_SKIP, что означает – не изменять значение тех переменных, которые уже существовали до вызова функции extract.

То есть, в случае, если переменная $max_depth или $avatar_size уже существовала, то данный вызов функции extract не повлияет на значения этих переменных и для создания эквивалентного кода без использования функции extract, в таком случае, нам пришлось бы писать нечто подобное:

И так далее, для всех других значений второго параметра функции extract нужно создавать индивидуальный код.

Вот, собственно, главное удобство функции extract – вы можете создать ряд переменных на основании данных массива, при этом не изобретая каждый раз “велосипед” для различных ситуаций (перезаписывать значения, не перезаписывать, создавать переменные с префиксом или без него и т.п.).

На сегодня – всё. Пока! Профессионального вам роста!

P.S. Кстати, это юбилейная 50-ая статья на моем блоге. До цели №1 осталось написать 20 статей. У меня есть еще более 60 дней на это. Так что, думаю, цель будет достигнута в срок. А вот то, что цель №2 будет достигнута к указанной дате, я уже стал сомневаться. По данным “Яндекс Вебмастер” на данный момент на меня ссылаются всего лишь 25 сайтов. Одна надежда, что апдейт тИЦ будет гораздо позже 1 марта.

Понравилась статья? Не забудьте поделиться с друзьями и коллегами:

Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.

Оставить комментарий

Для размещения кода в комментарии используйте теги <pre> </pre>, например:


Подписаться, не комментируя