4

我有一个有趣的情况。我正在使用一个包含在多个页面上的表单(为了简单起见并减少重复),并且此表单在某些区域中填充了来自数据库的值。但是,并非所有这些值都将始终存在。例如,我可以做一些事情来达到以下效果:

<?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 并检查它是否已设置且不为空。如果它通过了要求,则返回该变量值(在本例中为“测试”)。如果它没有通过要求,意味着它没有设置或为空,那么该函数将返回'{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
}
?>
4

3 回答 3

2

我会使用数组并自己检查数组键(或初始化我的所有变量......),但对于你的函数,你可以使用类似的东西:

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

查看有关变量变量的手册。您需要使用global $$var;来解决范围问题,所以它是一个有点讨厌的解决方案。在此处查看一个工作示例

编辑:如果您需要返回的值,您可以执行以下操作:

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

但老实说,在它们可能存在或可能不存在时使用这样的变量对我来说似乎有点错误。

于 2014-04-25T00:59:03.813 回答
0

尝试:

<?php
function varIsset($string){
  global $$string;
  return empty($$string) ? 0 : 1;
}
$what = 'good';
echo 'what:'.varIsset('what').'; now:'.varIsset('now');
?>
于 2014-04-25T01:34:03.450 回答
0

引入要搜索的上下文将是一种更好的方法,例如:

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

然后在渲染发生之前使用您的数据库结果填充上下文。顺便说一句,empty()对字符串值有一个小警告"0";在这些情况下,使用此逻辑可能是更好的方法:

return isset($context[$name]) && strlen($name);
于 2014-04-25T01:21:15.810 回答