У меня интересная ситуация. Я использую форму, которая включена на несколько страниц (для простоты и уменьшения дублирования), и эта форма в некоторых областях заполняется значениями из БД. Однако не все из этих значений всегда будут присутствовать. Например, я мог бы что-то сделать:
<?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 } ?>
Я бы использовал массивы и сам проверял ключи массива (или инициализировал все мои переменные …), но для вашей функции вы могли бы использовать что-то вроде:
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'); ?>