PHP принимает строку и проверяет, существует ли эта строка как переменная

У меня интересная ситуация. Я использую форму, которая включена на несколько страниц (для простоты и уменьшения дублирования), и эта форма в некоторых областях заполняется значениями из БД. Однако не все из этих значений всегда будут присутствовать. Например, я мог бы что-то сделать:

<?php echo set_value('first_name', $first_name); ?> 

и это будет отлично работать там, где существуют значения, но $ user не всегда установлен, так как они могут вводить свое имя в первый раз. Да, вы можете сделать isset($first_name) && $first_name внутри оператора if (сокращенный или обычный)

Я пытаюсь написать вспомогательную функцию, чтобы проверить, является ли переменная isset, и если она не является нулевой. Я бы в идеале хотел бы сделать что-то вроде varIsset('first_name') , где first_name – это фактическое имя переменной $ first_name, и функция будет принимать строку, превратить ее в предполагаемую переменную $ first_name и проверить, установлена ​​ли она, а не null. Если он передает требования, верните это значение переменных (в данном случае «тест»). Если он не удовлетворяет требованиям, но он не установлен или имеет значение null, функция возвращает «{blank}».

Я использую CodeIgniter, если это поможет, переключится на Laravel в ближайшем будущем. Любая помощь приветствуется. Вот что я собрал до сих пор, но безрезультатно.

 function varIsset($var = '') { foreach (get_defined_vars() as $val) { if ($val == $var) { if (isset($val) && $val) { echo $val; } break; } } die; } 

Вот пример использования:

 <?php if (varIsset('user_id') == 100) { // do something } ?> 

Solutions Collecting From Web of "PHP принимает строку и проверяет, существует ли эта строка как переменная"

Я бы использовал массивы и сам проверял ключи массива (или инициализировал все мои переменные …), но для вашей функции вы могли бы использовать что-то вроде:

 function varIsset($var) { global $$var; return isset($$var) && !empty($$var); } 

Ознакомьтесь с руководством по переменным переменным . Вам нужно использовать global $$var; чтобы обойти проблему масштаба, так что это немного неприятное решение. См. Рабочий пример здесь .

Изменить: если вам нужно вернуть значение, вы можете сделать что-то вроде:

 function valueVar($var) { global $$var; return (isset($$var) && !empty($$var)) ? $$var : NULL; } 

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

Было бы лучше подойти к контексту, в котором вы хотите искать, например:

 function varIsset($name, array $context) { return !empty($context[$name]); } 

Затем контекст заполняется результатами вашей базы данных до того, как будет выполнен рендеринг. Btw, empty() имеет небольшое оговорку со строковым значением "0" ; в этих случаях это может быть лучший подход к использованию этой логики:

 return isset($context[$name]) && strlen($name); 

Пытаться:

 <?php function varIsset($string){ global $$string; return empty($$string) ? 0 : 1; } $what = 'good'; echo 'what:'.varIsset('what').'; now:'.varIsset('now'); ?>