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

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

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 );