变量:覆盖vs if / else

时间:2016-05-25 05:09:48

标签: php if-statement

这是一个PHP问题,但可能适用于其他语言。

哪种方法可以更好地处理变量分配?

// Use default value and overwrite
$var_one = 'x';
if ($var_two) {
    $var_one = 'y';
}

// Use complete if/else
if ($var_two) {
    $var_one = 'y';
} else {
    $var_one = 'x';
}

我一直很好奇软件如何在最低级别工作。

5 个答案:

答案 0 :(得分:7)

我会使用第一个,因为它会删除一个进程。它比第二个更干净:

$var_one = 'x';
if ($var_two)
     $var_one = 'y';

或者

$var_one = ($var_two ? 'y' : 'x'); 

上面的代码比我的#1例子更清晰。

答案 1 :(得分:2)

我更喜欢第二个

if ($var_two) {
    $var_one = 'y';
} else {
    $var_one = 'x';
}

我认为它更具可读性且CPU使用率更低,因为每次只执行一次分配。但是在第一个if的时候是真的两个赋值。

答案 2 :(得分:2)

第二个选项实际上稍快一些,因为它只在$var_two求值为true时执行一个变量赋值,而较低级别的跳转操作在两种情况下都相当。

另外,请注意if ($var2)之类的条件是如何评估的,因为很多情况下您可能不希望false表示 <controls:DataGridTemplatedColumn> <controls:DataGridTemplatedColumn.Header> <Button x:Uid="RQty" Height="40" Width="110" Style="{StaticResource RoundButtonTemplate}" Margin="-10,0,0,0"/> </controls:DataGridTemplatedColumn.Header> <controls:DataGridTemplatedColumn.CellTemplate> <DataTemplate> <StackPanel Width="20" Height="30" Tapped="StackPanel_Tapped" > <TextBlock Name="quantity" Foreground="White" Text='{Binding quantity}' VerticalAlignment="Center" Margin="0,5,0,0"></TextBlock> </StackPanel> </DataTemplate> </controls:DataGridTemplatedColumn.CellTemplate> </controls:DataGridTemplatedColumn> 。 PHP手册有一个great page来澄清这一点。

答案 3 :(得分:1)

它依赖于您正在访问的变量。

如果您要访问的变量已预先填充,请使用以下示例

if(isset($_POST['formValue'])) {
   $formValue = $_POST['formValue'];
}
else {
   $formValue = NULL;
}

如果你必须在同一页面中定义变量,那么

$formValue = 'x'; 
if(isset($var_two)) {
   $formValue = 'y';
}

答案 4 :(得分:1)

您定义的方式都有效且良好。另一种方法是ternary operator

在这里,你用另一个变量覆盖指定的变量&#39; y&#39;取决于$var_two

$var_one = 'x';
if ($var_two)
    $var_one = 'y';

使用完整的if / else,您只需根据$var_one$var_two指定一个值。

if ($var_two)
    $var_one = 'y';
else
    $var_one = 'x';

正如我所说,您可以使用ternary operator执行此操作,请参阅示例覆盖。现有变量。

$var_one = x;
$var_one = ($var_two) ? 'y' : $var_one;

再次使用新值赋值变量。

$var_one = ($var_two) ? 'y' : 'x';
  

注意:它取决于我需要相互比较的代码,那里   有两种类型,一种是赋值,另一种是覆盖,我必须   如果复杂程度较低,则更喜欢ternary operator   前进方式if.....else