Intereting Posts
Предварительный просмотр 2 разных блогов на главной странице Репозиторий загрузки файлов пользователей? Шаблоны страниц автоматически отображают содержимое страницы-индекса? Могу ли я использовать загрузчик файлов wp для своего собственного плагина? Выбор цвета в виджетах появляется дважды при добавлении через Customizer Любые руководства по использованию WP SVN с клиентами IDE? Как добавить кнопку сохранения в пользовательский метабокс без сохранения / останова js Dialog? Передавать аргументы классу функции с do_action () Проверить, находится ли ключ в массиве user_meta разбиение на страницы не работает на шаблоне пользовательской таксономии Отключение формы входа и перенаправление пользователей при выходе из системы без заголовков отправлено php warning Каков правильный способ создания пользовательской главной страницы? Как создать настраиваемый плагин маршрутизации страны для WordPress? Получить данные из плагина Список людей в шаблоне автора Более эффективный способ размещения сообщений по категориям

Получить значение переменной на основе константы строки

В моем плагине я определяю константу следующим образом:

define('DEFAULT_NUM', 5);

Я также определяю константу, представляющую имя, по которому я хочу ссылаться на это число:

define('DEFAULT_NUM_NAME', 'numitems');

Мой плагин имеет короткий код, который использует эти значения следующим образом:

 function do_something($atts) { extract( shortcode_atts( array( DEFAULT_NUM_NAME => DEFAULT_NUM ), $atts ) ); 

Я делаю это, поэтому я могу изменять значения переменных в одном месте, а не жестко кодировать их:

 function do_something($atts) { extract( shortcode_atts( array( 'numitems' => 5 ), $atts ) ); 

Функция extract преобразует строку numitems в переменную с именем $numitems . Таким образом, остальная часть моего кода должна выглядеть так:

 if ($numitems == 5) { return 'blah blah'; } 

По сути, я жестко кодирую имя переменной, потому что мне нужно использовать любое имя, которое я определил. Я хотел бы получить значение переменной без необходимости ее использования.

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

Это возможно? Или мой подход неправильный?

(FYI) Это тестовый пример, основанный на фактическом плагине. Это не фактические имена переменных.)

Solutions Collecting From Web of "Получить значение переменной на основе константы строки"

Вы можете это сделать, но не должны:

  1. Храните глобальное пространство имен в чистоте. Каждое имя в глобальном пространстве имен является кандидатом на столкновение. Создание переменной global, константа или функция увеличивает вероятность столкновения, независимо от того, насколько хороши ваши префиксы .

  2. Константы – это самые медленные глобальные типы. Да, это микро-оптимизация, но зачем ее представлять, когда есть лучшие варианты?

  3. Константы не являются гибкими. Представьте, что вы изменили свой обратный вызов по короткому коду, чтобы принять два параметра. Или пять. Или десять. Ваш код станет очень уродливым очень быстро.

альтернативы

Предоставьте значения по умолчанию в отдельной функции:

 function my_plugin_prefix_get_default_shortcode_attributes() { return array ( 'numitems' => 5 ); } 

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

В вашем коротком коде:

 $attribute = shortcode_atts( my_plugin_prefix_get_default_shortcode_attributes(), $atts ); 

Переместите функцию в основной класс плагина или в отдельный класс:

 class My_Plugin { public static function get_default_shortcode_attributes() { return array ( 'numitems' => 5 ); } } 

В вашем коротком коде:

 $attribute = shortcode_atts( My_Plugin::function get_default_shortcode_attributes(), $atts );