0

我有一个小问题:

<?=$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

4 回答 4

1
//Ultimate    
         (isset($user))? $user->last_name : NULL)
//Best
于 2013-09-14T20:58:23.583 回答
0

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

<?=$this->bs_forms->text_input('last_name','Name', @$user->last_name);?>
于 2013-09-14T21:07:36.240 回答
0

还有其他方法可以做到这一点,但它们并不比彼此“更好”。PHP 正在给您一条错误消息,而您提出的解决方案实际上并没有解决问题,它只是添加了一些代码以避免触发它。

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

这里有几个同样有效的解决方案(本质上都是做同样基本事情的不同方式):

  • $user确保除非已定义,否则不会调用这段代码。我希望您实际上有几行类似的行,因此您可能希望将所有这些划分为两个较大的“如果$user已定义”和“如果$user未定义”部分。
  • 加载要传入的“默认值”数组,除非$user已定义,否则不要覆盖这些默认值
  • 确保$user始终定义,但如果实际$user不存在,则使用默认值加载它。
于 2013-09-14T21:09:44.280 回答
0

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

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

最好的办法:

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

PS。使用@ - 不好的做法

于 2013-09-14T21:12:06.323 回答