检查函数调用中是否设置了变量

时间:2013-09-14 20:46:16

标签: php object isset

我有一点问题:

<?=$this->bs_forms->text_input('last_name','Name', $user->last_name);?>

如果最后一个变量$ user,不存在我当前得到一些PHP错误。我的解决方案是:

<?=$this->bs_forms->text_input('last_name','Last Name', (isset($user))? $user->last_name : NULL);?>

但这看起来有点黑客。有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

//Ultimate    
         (isset($user))? $user->last_name : NULL)
//Best

答案 1 :(得分:0)

您可以使用PHP的错误抑制修饰符:

<?=$this->bs_forms->text_input('last_name','Name', @$user->last_name);?>

答案 2 :(得分:0)

还有其他方法,但它们并不比其他任何方式“更好”。 PHP给你一个错误信息,你提出的解决方案实际上并没有解决问题,它只是添加了一些代码来避免触发它。

PHP试图告诉你的实际错误是你已经陷入了这样一种情况:你试图执行一行代码而不知道你传递给它的那些东西的状态。简而言之:PHP抱怨$user未定义,因为您实际上没有为$user定义任何值。

这里有几种解决方案,具有相同的有效性(并且所有基本上都是做同样基本事情的不同方式):

  • 除非定义了$user,否则请确保不会调用此位代码。我希望你实际上有几条相似的行,所以你可能希望将所有这些划分为两个更大的“if $user已定义”和“if $user未定义”部分。
  • 加载一组“默认值”以传入,除非定义$user,否则不要覆盖这些默认值
  • 确保始终定义$user,但如果真实$user不存在,请使用默认值加载。{/ li>

答案 3 :(得分:0)

  

(isset($用户))? $ user-&gt; last_name:NULL)

这里可能出现错误 - “试图获取非对象的属性”

最佳方式:

(isset($user->last_name))? $user->last_name : NULL)

PS。使用@ - 不良做法