如果(这=那) - 这里究竟发生了什么?

时间:2011-04-28 03:45:52

标签: php if-statement conditional

很难要求搜索这个问题,答案有助于清理我的代码。基本上,在PHP中,如果我使用:

if (this = that)

发生了什么事?是检查变量是否被正确分配,还是检查“那个”的真相,另外还将它分配给“这个?”

我问,因为如果答案是前者会更容易,因为它需要额外的一行来分配它,然后运行条件,然后再使用它的返回。我知道抓住一条线是微不足道的,但是在整个脚本上它可以加起来。谢谢你的帮助。

TO CLARIFY:我想基本上写下以下内容:

$this = something;
if ($this)
  do things with $this

将其写为

if ($this = $myFunctionCall)
  do things with $this;

假设$ this未事先设定。

10 个答案:

答案 0 :(得分:7)

它正在分配,然后检查分配的值的“真实性”。

答案 1 :(得分:2)

它检查this iirc的“真实性”,分配在评估之前发生

答案 2 :(得分:2)

莱纳斯,

无论它是否有效,我都不是测试中的分配方法的粉丝。我认为忽略ASSIGNMENT太容易了,它是未来错误的一个潜在(并且容易避免)的来源......我认为这种常用的编码范式“有点草率”。

在几乎所有“现代”语言中,您可以一步创建并分配一个局部变量......我发现它简洁,自我解释,并且可读性很强。

var stuff = getStuff();
if (stuff == null) {
  Message("Sorry, no stuff found.");
  return;
}

var thing, widget, stuff, foo;

.... then many lines later ...
if ((stuff=getStuff())) {
  // do things with stuff
} else {
  // no stuff
  Message("Sorry, no stuff found.");
}

正如你所知,我也不是旧的“结构化编程”格言的粉丝,每个函数/方法/脚本应该有一个退出点。相反,我相信无论什么时候我们不能继续这样做,我们都应该尽可能以最直接的方式离开。这只是个人喜好。你可以为任何方法提出有效的论据。

建议的一句话:无论你做什么,都要做到这一点一致!程序员(在赛道上几年,当你继续前进的话)负责增强你的代码将会抓住 - 快到足以“你的风格”。他们可能不喜欢它,但这并不重要,只要他们了解它。简洁和明确之间始终存在着权衡......没有“正确”的风格......从长远来看,只有一些风格似乎比其他风格更好。

亲我的儿子,为了简洁而嘘声。

干杯。基思。

答案 3 :(得分:1)

首先将$ this设置为$ that,然后如果$ this == true,将执行if语句的内容。

答案 4 :(得分:1)

您将that的值分配给this并检查this是否评估为真。

答案 5 :(得分:1)

是的,它先分配然后检查是否属实。

与遍历MySQL表时类似:

while ($row = mysql_get_row($query)) {
  ...
}

当它不再起作用时(弹出false),循环中断。它在一行中分配和检查有效性。

答案 6 :(得分:1)

我想说它分配以及检查值,纯粹基于此代码

while($row = mysql_fetch_assoc($query))
{
    // Query actions
}

我们都知道循环,直到没有更多的结果要处理。如果没有结果,mysql_fetch_assoc会返回false,但仍会分配该值,因此,它不会检查该值是否已分配,而是已分配的

答案 7 :(得分:1)

赋值操作($foo = 'bar')是表达式,其中值被赋值给变量。 表达式作为一个整体返回一个值。返回的值是已分配的值。

因此,if ($foo = 'bar')与:

同义
$foo = 'bar';
if ('bar') ...

答案 8 :(得分:0)

一些演示代码     

$false = false;
$true = true;
$someVar = true;

function someFunk() {
  return false;
}

if ($someVar = $false) {
  echo "True \n";
} else {
  echo "False \n";
}

if ($someVar = $true) {
  echo "True \n";
} else {
  echo "False \n";
}


if ($someVar = someFunk()) {
  echo "True \n";
} else {
  echo "False \n";
}

此输出

False 
True 
False

http://codepad.org/8JxX8MYP

答案 9 :(得分:0)

if(this = that)

step 1->
此=那; //将数据从那里复制到此

step 2->
如果复制成功,那么代码就像这样

if(1)// true

如果复制失败,那么代码就像这样

if(0)// false