簡體   English   中英

關於 IF 語句中變量 State 的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM