关于IF声明中可变状态的问题

时间:2011-07-22 02:43:57

标签: php

我是PHP的初学者,并且已经阅读了“PHP for the Web:Visual Quickstart Guide 4th Ed。”拉里·乌尔曼(Larry Ullman)对我在书中遇到的问题提出了疑问。

在每一章的最后,他都有一些问题值得审查,我被困在其中一个问题上,不确定我是否有正确的答案或正确的问题。

问题如下:

  

在不知道任何关于$ var的情况下,以下条件是TRUE还是FALSE?为什么呢?

if ($var = 'donut') {...

我很容易说这是假的,因为我们不知道$var是否已在程序中分配了值donut但我不确定。

任何人都可以向我解释这个问题,这样我就可以掌握这个概念并对此充满信心吗?

5 个答案:

答案 0 :(得分:2)

只有一个等号,所以它会返回true。这是为什么:它将$ donut分配给$ var,这使得$ var为真。 :)

如果陈述有2或3个等号,我们就不知道它会返回什么。

答案 1 :(得分:2)

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

示例

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

答案 2 :(得分:1)

此条件将始终评估为TRUE,因为已分配值donut,然后$var的值将返回到if()语句。作业首先发生。

成功分配给变量会导致该变量立即返回。非空字符串是“truthy”值,并按原样返回。

如果它被指定为:

if ($var = "") {}
根据{{​​3}}

,它会评估为FALSE
var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)

<强>附录

只是添加,作为流控制条件内的赋值的实际示例,您几乎每天都可以看到 - 我们通常用于从MySQL结果资源中检索行集的while()循环:

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
}

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

<?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.
}