我是PHP的初学者,并且已经阅读了“PHP for the Web:Visual Quickstart Guide 4th Ed。”拉里·乌尔曼(Larry Ullman)对我在书中遇到的问题提出了疑问。
在每一章的最后,他都有一些问题值得审查,我被困在其中一个问题上,不确定我是否有正确的答案或正确的问题。
问题如下:
在不知道任何关于$ var的情况下,以下条件是TRUE还是FALSE?为什么呢?
if ($var = 'donut') {...
我很容易说这是假的,因为我们不知道$var
是否已在程序中分配了值donut但我不确定。
任何人都可以向我解释这个问题,这样我就可以掌握这个概念并对此充满信心吗?
答案 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.
}