我有一个有趣的情况。我正在使用包含在多个页面上的表单(为简单起见并减少重复),并且在某些区域此表单填充了来自数据库的值。但是,并非所有这些值都会始终存在。例如,我可以做一些效果:
<?php echo set_value('first_name', $first_name); ?>
这在值存在的情况下可以正常工作,但 $user 并不总是设置,因为他们可能是第一次输入他们的名字。是的,您可以在 if 语句(速记或常规)中执行 isset($first_name) && $first_name
我正在尝试编写一个辅助函数来检查变量是否已设置以及它是否不为空。理想情况下,我想做一些类似 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
}
?>
最佳答案
我会使用数组并自己检查数组键(或初始化我所有的变量...),但对于您的函数,您可以使用类似的东西:
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;
}
但老实说,在它们可能存在或可能不存在的情况下使用这样的变量对我来说似乎有点不对。
关于PHP 获取字符串并检查该字符串是否作为变量存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282389/