我有一个有趣的情况。我正在使用包含在多个页面上的表单(为了简单起见并减少重复),并且在某些区域中使用来自DB的值填充此表单。但是,并非所有这些值都将始终存在。例如,我可能正在做一些事情:
<?php echo set_value('first_name', $first_name); ?>
这可以在值存在的情况下正常工作,但$ user并不总是设置,因为他们可能是第一次输入他们的名字。是的,您可以在if语句(简写或常规)
中进行isset($first_name) && $first_name
我正在尝试编写一个辅助函数来检查变量是否设置以及它是否为空。我最好喜欢做varIsset('first_name')
之类的事情,其中first_name是一个实际的变量名$ first_name,函数将接受字符串,将其转换为预期的变量$ first_name并检查它是否设置和不是空的。如果它通过了要求,则返回变量值(在这种情况下&#39; test&#39;)。如果它没有通过要求,但没有设置或为空,那么该函数将返回&#39; {blank}&#39;。
如果有帮助,我正在使用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
}
?>
答案 0 :(得分:2)
我会使用数组并自己检查数组键(或初始化我的所有变量......),但对于你的函数,你可以使用类似的东西:
function varIsset($var)
{
global $$var;
return isset($$var) && !empty($$var);
}
查看variable variables上的手册。你需要使用global $$var;
来解决范围问题,所以这是一个讨厌的解决方案。查看有效的example here。
编辑:如果您需要返回的值,则可以执行以下操作:
function valueVar($var)
{
global $$var;
return (isset($$var) && !empty($$var)) ? $$var : NULL;
}
但说实话,在他们可能存在或可能不存在的情况下使用这样的变量对我来说似乎有点不对。
答案 1 :(得分:0)
引入您想要搜索的上下文是一种更好的方法,例如:
function varIsset($name, array $context)
{
return !empty($context[$name]);
}
然后在渲染发生之前使用数据库结果填充上下文。顺便说一下,empty()
有一个小警告,字符串值为"0"
;在这些情况下,使用这种逻辑可能是更好的方法:
return isset($context[$name]) && strlen($name);
答案 2 :(得分:0)
尝试:
<?php
function varIsset($string){
global $$string;
return empty($$string) ? 0 : 1;
}
$what = 'good';
echo 'what:'.varIsset('what').'; now:'.varIsset('now');
?>