如何简化ifset $ var else $ var ='';

时间:2013-05-22 03:38:11

标签: php refactoring

如果我想重新填充一个带有$ _POST值的表单(此问题还有其他应用程序,但这是最简单的)我必须始终检查是否设置了$ _POST索引,然后才能使用它的值,或者我会从php获得通知。

例如:

echo '<input type="text" name="somefield" value="';
if(isset($_POST['somefield']))
  { echo $_POST['somefield']; }
echo '">';

对于复杂的形式,这看起来很麻烦,而且很多重复。所以我想,让我们提取一个函数:

function varcheck_isset($vartocheck)
{
  if(isset($vartocheck))
    {return $vartocheck;}
  else
    {return '';}
}

然后再做

echo '<input type="text" name="somefield" value="';
echo varcheck_isset($_POST['somefield']);
echo '">';

使代码更好。

但是当我这样做并且没有设置$ _POST ['somefield']时,它会说

  

注意:未定义的索引:somefield

: - (

任何人都有想法或建议如何使这项工作?


编辑:

这就是我最终做的事情 - 我接受了Organgepill的答案,只是略微修改了一下:

function arraycheck_isset($arraytocheck, $indextocheck)
{
  if(isset($arraytocheck) && is_array($arraytocheck) && array_key_exists($indextocheck, $arraytocheck))
    { return $arraytocheck[$vartocheck];}
  else
    { return '';}
}

以下elclanrs的评论也相当不错。只写:

echo $_POST['field'] ?: '';

我个人更喜欢非速记版本,因为我可能还有需要检查其他东西的情况,除了isset() - 例如正则表达式。这样我每次都通过一个函数保持一致。

2 个答案:

答案 0 :(得分:3)

你可以使用三元运算符,它几乎是if / else

的简写
echo '<input type="text" name="somefield" value="';
echo isset($_POST['somefield']) ? $_POST['somefield'] : '';
echo '">';

答案 1 :(得分:3)

尝试这样的事情:

function postedVal($vartocheck)
{
  if(array_key_exists($vartocheck, $_POST))
    return $_POST["$vartocheck"];
  return '';
}

您的功能始终是第一种情况,因为您正在检查参数是否设置if (isset($_POST[$vartocheck]))