避免由于未定义的变量错误而重复变量

时间:2018-07-15 11:12:09

标签: php variables optimization

我正在尝试完成个人资料设置的进度,该进度显示了用户完成个人资料设置的百分比。如果用户填写了一个字段,则他收到+15或+5,但是,如果用户未填写该字段,他将收到+0。

我做的代码真的很糟糕,重复多次,我想知道您是否知道更干净的方法。

if (!empty($user->avatar)) {
  $avatar = 15;
} else { $avatar = 0; }
if (!empty($user->copertina)) {
  $copertina = 15;
} else { $copertina = 0; }
// dati personali
if (!empty($user->name)) {
  $name= 5;
} else { $name = 0; }
if (!empty($user->last_name)) {
  $last_name = 5;
} else { $last_name = 0; }

[...]

if (!empty($user->biografia)) {
  $biografia = 5;
} else { $biografia = 0; }

$personal = $avatar+$copertina+$name+$last_name+$sesso+$nascita;
$gaming = $steam+$battlenet+$xbox+$playstation+$switch+$uplay+$origin+$ds;
$social = $twitter+$facebook+$biografia;

$punti = $personal+$gaming+$social;

如何删除所有其他{$ variable = 0}

2 个答案:

答案 0 :(得分:0)

您不能真正做到,因为您希望值是一个数字,而不是“未定义”。您可以像在此答案stackoverflow.com/questions/9651793/…中将变量初始化为0。

如果要对空变量进行类型比较,请检查php.net/types.comparisons。我只是将变量初始化为0,然后删除所有其他变量。

OR ...

修改$ user对象以将所有这些变量放在一个数组中($ key:$ value)。然后,您可以将数组全部初始化为0,然后对其进行修改。添加新的配置文件值很容易,而添加数组值则很快。

答案 1 :(得分:0)

此代码段:

if (!empty($user->avatar)) {
 $avatar = 15;
} 
else {
 $avatar = 0;
}

在语义上等效于:

$avatar = (bool)$user->avatar * 15;

说明:

  1. 非空字段转换为true,空字符串或null转换为false

  2. 因为我们进行乘法,所以php的true / false值将转换为1/0

  3. 因此,乘法之后,您将得到15 * 115 * 0-取决于是否使用了字段。