Php 如果(这个=那个)-这里到底发生了什么?

Php 如果(这个=那个)-这里到底发生了什么?,php,if-statement,conditional,Php,If Statement,Conditional,很难问这个问题,答案将有助于清理我的代码一点。基本上,在PHP中,如果我使用: if (this = that) 发生了什么事?它是在检查变量是否被正确分配,还是在检查“that”的真实性,同时也将其分配给“this” 我这样问是因为如果答案是前者会更容易,因为它需要额外的一行来分配它,然后运行条件,然后使用它的返回。我知道在一行文字上弹琴是微不足道的,但在整个脚本上它可以加起来。谢谢你的帮助 澄清一下:我想基本上写出以下内容: $this = something; if ($this)

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

if (this = that)
发生了什么事?它是在检查变量是否被正确分配,还是在检查“that”的真实性,同时也将其分配给“this”

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

澄清一下:我想基本上写出以下内容:

$this = something;
if ($this)
  do things with $this
把它写成

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

所有这些都假设$this没有事先设置。

它检查
这个
iirc的“真实性”,赋值发生在赋值之前,然后它检查赋值的“真实性”。

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

您将把
的值赋值给
this
,然后检查
this
是否为true。

是,它首先赋值,然后检查它是否为true

与遍历MySQL表时类似:

while ($row = mysql_get_row($query)) {
  ...
}
当它不再工作时(弹出一个
false
),循环中断。它在一行中分配和检查有效性。

一些演示代码
$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

我想说的是,它分配和检查值,完全基于此代码

while($row = mysql_fetch_assoc($query))
{
    // Query actions
}
我们都知道循环,直到没有更多的结果需要处理
mysql\u fetch\u assoc
在没有结果保留时返回
false
,但仍然分配了值,因此,它不会检查是否分配了值,而是检查分配的值。

if(this=that)

步骤1->

这个=那个//将数据从那个复制到这个

步骤2->

如果复制成功,那么代码就会变成这样

if(1)//true

如果复制失败,则代码如下

如果(0)//false

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

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

$foo = 'bar';
if ('bar') ...
莱纳斯

不管它是否有效,我不喜欢测试方法中的赋值。我认为很容易忽视这个任务,因为它是未来bug的潜在(并且很容易避免)来源。。。我认为这种常用的编码模式“有点马虎”

在几乎所有的“现代”语言中,您可以一步创建和分配局部变量。。。我觉得它简洁明了,不言自明,而且可读性很强

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.");
}
正如你所知道的,我绝对不是“结构化编程”这句老话的粉丝,那就是每个函数/方法/脚本都应该有一个退出点。相反,我认为,每当我们遇到一种情况,意味着我们不能继续在这里,我们应该离开,以最直接的路线可能。这只是个人喜好。你可以对任何方法进行有效的论证

一句忠告:无论你做什么,坚持做负责增强代码的程序员(几年后,当你继续前进)会很快适应“你的风格”。他们可能不喜欢,但这并不重要,只要他们理解。简洁和明确之间总是有一个平衡点。。。没有“正确”的样式。。。只是从长远来看,有些风格似乎比其他风格更有效

吻它吧,我的儿子,booger说得简洁


干杯。Keith。

你可以测试:)你会记得,这样。它也应该是:如果(这个==那个)是的,我真的需要设置一个XAMMP或什么的,因为当你必须上传到你的服务器时,测试这些东西是非常痛苦的。@Jamie,他在一个if语句中特别询问了赋值的问题,所以我认为他是认真的。@xanadont我同意,虽然你可以看到发生了什么,但99.9%的时间你看到
如果(this=that)
这是一个打字错误,而不是故意的。IDE实际上强调它是一个可能的错误。因此,如果另一个开发人员拿起您的代码,这将作为一个错误跳出。至少你应该留下一条评论,说这不是一个错误,当你这么做的时候,你可以用“标准”的方式在
上面的行中赋值,如果
@prodigitalson是我最喜欢的非单词sexcellent之一,这就是我想听到的,同样感谢下面的所有答案。作业怎么会失败?$str='hi'$str=打印(数组);