[英]Question Regarding Variable State in IF Statement
我是 PHP 的死初學者,並且一直在閱讀“Web 的 PHP:視覺快速入門指南第 4 版”。 由拉里·厄爾曼(Larry Ullman)撰寫,並有一個關於我在書中遇到的問題的問題。
在每一章的結尾,他有幾個問題需要復習,我被困在其中一個問題上,不確定我是否有正確的答案或正確的思路。
問題如下:
在不了解 $var 的情況下,以下條件是 TRUE 還是 FALSE? 為什么?
if ($var = 'donut') {...
我傾向於說這將是錯誤的,因為我們不知道$var
是否已在程序中分配了值 donut,但我不確定。
誰能幫我解釋一下,這樣我就可以掌握這個概念並對此充滿信心?
只有一個等號,所以它會返回真。 原因如下:它將“甜甜圈”分配給 $var,這使得 $var 為真。 :)
如果語句有 2 或 3 個等號,我們將不知道它會返回什么。
這將是真的,因為 $var 變量被定義為“甜甜圈”,如果 $var 變量為空,那么它應該返回假。
例子
$var = ''; // False
$var = 'something something'; //True
此條件將始終評估為TRUE
,因為分配了值donut
,然后將$var
的值返回給if()
語句。 分配首先發生。
對變量的成功賦值會導致該變量立即返回。 非空字符串是一個“真實”值,並按原樣返回。
如果相反,它被分配為:
if ($var = "") {}
根據PHP 的 boolean 評估規則,它將評估為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)
附錄
補充一下,作為流控制條件中分配的一個實際示例,您可能幾乎每天都會看到——我們通常使用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 equals to (==)'。 = 運算符將右側的值賦給左側的變量。== 運算符檢查右側是否等於左側。
在這里讓事情變得更簡單是一個更好的解釋。
<?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.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.