Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 变量:覆盖vs if/else_Php_If Statement - Fatal编程技术网

Php 变量:覆盖vs if/else

Php 变量:覆盖vs if/else,php,if-statement,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'; } 我总是对软件如何在最低级别工作感到好奇。我会使用第一个,因为它会

这是一个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';
}

我总是对软件如何在最低级别工作感到好奇。

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

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


上面的代码甚至比我的#1示例更简洁。

这取决于您访问的变量

如果您要访问的变量是预先填充的,则使用下面的示例

if(isset($_POST['formValue'])) {
   $formValue = $_POST['formValue'];
}
else {
   $formValue = NULL;
}
若必须在同一页中定义变量,则

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

我更喜欢第二个

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

我认为它可读性更好,CPU消耗更低,因为每次只执行一个分配。但在第一个选项中,当if为true时,执行两个赋值。

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


另一方面,请注意如何评估像
if($var2)
这样的条件,因为有许多情况下,您可能不希望表示
false
。PHP手册对这一点有一个明确的解释。

您定义的两种方法都是有效和良好的,另外一种方法是
三元运算符

这里,根据
$var\u two

$var_one = 'x';
if ($var_two)
    $var_one = 'y';
使用complete if/else,这里您只需根据
$var\u two
$var\u one
分配一个值

if ($var_two)
    $var_one = 'y';
else
    $var_one = 'x';
正如我所说,您可以使用
三元运算符
来实现这一点,请参见示例覆盖。现有变量

$var_one = x;
$var_one = ($var_two) ? 'y' : $var_one;
同样,赋值带有新值的变量

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

注意:这取决于我需要相互比较的代码 有两种类型,一种是赋值,另一种是重写,我必须 如果复杂度较低,则首选
三元运算符
前进方向
if…..else


有几种方法可以做到。第一个也是我的方式。还有
$var_one=($var_two?'y':'x')一行比一行更好吗?给作家?读者?编译程序?主要是基于观点question@SamiKuhmonen是的,好问题;我主要考虑的是这里的表现。但是,如果性能上的优势可以忽略不计,以至于可读性才是真正的优势,那么我很想看看大家都喜欢什么。啊,在看了更长的时间后,我发现了一个重复:我应该提到,尽管这里有相当多的意见,我的意思是问我的两个代码示例中,哪一个对编译器的性能基本上更好。第一个示例如何删除进程?就性能而言,第二个进程会删除一个进程,因为第一个进程有一个额外的步骤。正如我所知,第二个进程需要运行另一个块(else部分)。删除一个编码块是一个我们可以阻止执行的过程that@MajidAbbasi无法同时执行
if
else
块中的部分。第一个块可以有2个赋值和一个布尔条件检查,而第二个块可以有1个赋值和一个布尔条件检查。@SpencerWieczorek您能解释更多吗?如果我们删除了else部分,我们没有删除任何进程?提前感谢您的大力支持notes@MajidAbbasi不,因为没有
else
的代码段首先进行赋值,而另一个代码段则不进行赋值。同意我认为
isset
在这里使用是好的,您认为哪一个更好?这取决于我需要相互比较的代码,有两种类型,一种是赋值,另一种是重写,如果复杂性较低,我必须选择
三元运算符
,或者是直接方法
如果…..
$var_one = ($var_two) ? 'y' : 'x';