Php 关于IF语句中变量状态的问题

Php 关于IF语句中变量状态的问题,php,Php,我是一个PHP初学者,一直在阅读Larry Ullman的《PHP for the Web:可视化快速入门指南第四版》,我对书中遇到的一些问题有疑问 在每一章的结尾,他都有几个问题要复习,我被其中一个问题困住了,不确定我是否有正确的答案或正确的思路 问题如下: 在不了解$var的情况下,以下条件是真还是假?为什么? 我倾向于说这是错误的,因为我们不知道$var是否已经在程序中分配了值donut,但我不确定 有谁能帮我解释一下,这样我就能掌握这个概念并对它充满信心了?只有一个等号,所以它会返回真值

我是一个PHP初学者,一直在阅读Larry Ullman的《PHP for the Web:可视化快速入门指南第四版》,我对书中遇到的一些问题有疑问

在每一章的结尾,他都有几个问题要复习,我被其中一个问题困住了,不确定我是否有正确的答案或正确的思路

问题如下:

在不了解$var的情况下,以下条件是真还是假?为什么?

我倾向于说这是错误的,因为我们不知道
$var
是否已经在程序中分配了值donut,但我不确定


有谁能帮我解释一下,这样我就能掌握这个概念并对它充满信心了?

只有一个等号,所以它会返回真值。原因如下:将“甜甜圈”赋值给$var使$var为真。:)


如果语句有2或3个等号,我们就不知道它将返回什么。

这将是真的,因为$var变量被定义为“donut”,如果$var变量为空,那么它应该返回false

示例

$var = ''; // False
$var = 'something something'; //True

此条件的计算结果始终为
TRUE
,因为赋值为
donut
,然后
$var
的值返回到
if()
语句。作业首先发生

对变量的成功赋值会导致立即返回该变量。一个非空字符串是一个“truthy”值,并以此返回

如果相反,它被指定为:

if ($var = "") {}
它将根据以下公式计算为
FALSE


附录

作为流控制条件中赋值的一个实际示例,您可能几乎每天都会看到-
while()
循环,我们通常使用该循环从MySQL结果资源检索行集:

while ($row = mysql_fetch_assoc($result)) {
  // executes this inner block as long as $row doesn't 
  // recieve a FALSE assignment from mysql_fetch_assoc()
  // reaching the end of its rowset
}

这将是真的,因为
$var='donut'
是一个赋值,而不是'is等于(=)'。=运算符将右侧的值分配给左侧的变量。==运算符检查右侧是否等于左侧

为了使事情更简单,这里有一个更好的解释

<?php
// To assign a value to a variable you do this
$var = 'donut';

// To evalute the value of a variable you do this.
if($var == 'donut') { }
// Notice the existence of double equals here.

// If you have code like this:
$var = 'donut holes';
if ($var = 'donut') {
  // This is true because any value you assign with ONE equals is always TRUE
  print $var; // Will output 'donut' because you reassigned it.
}

提示:仔细观察操作员。*facepalm*语言设计师应该拿起一本关于他们自己语言的入门书,仔细看看作者试图为读者准备的问题列表。好的,这是我在阅读了这里的所有帖子后得出的答案:“此语句将返回true,因为$var被赋值为donut,赋值发生在语句求值之前,因此将为布尔true,因为它有一个值。“这是正确的吗?我的印象是,无论您将什么赋值给变量,只要赋值成功,该表达式将始终返回true。”。当我到家时,我必须试着看看是否
echo($var=FALSE)?”真’:‘假’
回显TRUE或FALSE。我想我是因为我不知道可以在if语句的条件下为变量赋值。但是你解释它的方式有助于澄清问题。@Mark Tomlin它将是
FALSE
。这就是为什么熟悉的循环
而($row=mysql\u fetch\u array())
的工作方式谢谢你,你真的帮我把事情弄清楚了。我所关注的是一个事实,一个变量可以在if语句中赋值。
while ($row = mysql_fetch_assoc($result)) {
  // executes this inner block as long as $row doesn't 
  // recieve a FALSE assignment from mysql_fetch_assoc()
  // reaching the end of its rowset
}
<?php
// To assign a value to a variable you do this
$var = 'donut';

// To evalute the value of a variable you do this.
if($var == 'donut') { }
// Notice the existence of double equals here.

// If you have code like this:
$var = 'donut holes';
if ($var = 'donut') {
  // This is true because any value you assign with ONE equals is always TRUE
  print $var; // Will output 'donut' because you reassigned it.
}