这是一个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';
}
我一直很好奇软件如何在最低级别工作。
答案 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
。