變價值真實性和相同運算元
在 PHP 中,變數值具有關聯的真實性,因此即使非布林值也將等於 true
或 false
。這允許在條件塊中使用任何變數,例如
if ($var == true) { /* explicit version */ }
if ($var) { /* $var == true is implicit */ }
以下是不同型別的變數值的一些基本規則:
- 字串具有非零長度等同於
true
包括僅含有 whitepace 如' '
字串。 - 空字串
''
等於false
。
$var = '';
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
$var = ' ';
$var_is_true = ($var == true); // true
$var_is_false = ($var == false); // false
- **** 如果它們非零,則整數等於
true
,而零等於false
。
$var = -1;
$var_is_true = ($var == true); // true
$var = 99;
$var_is_true = ($var == true); // true
$var = 0;
$var_is_true = ($var == true); // false
null
相當於false
$var = null;
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
- 空字串
''
和字串零'0'
等於false
。
$var = '';
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
$var = '0';
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
- 浮點值等於
true
(如果它們非零),而零值等於false
。NAN
(PHP 的非數字)等於true
,即NAN == true
是true
。這是因為NAN
是非零浮點值。- 零值包括 IEEE 754 定義的+0 和 -0.PHP 在其雙精度浮點中不區分+0 和 -0,即
floatval('0') == floatval('-0')
是true
。- 事實上,
floatval('0') === floatval('-0')
。 - 此外,
floatval('0') == false
和floatval('-0') == false
。
- 事實上,
$var = NAN;
$var_is_true = ($var == true); // true
$var_is_false = ($var == false); // false
$var = floatval('-0');
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
$var = floatval('0') == floatval('-0');
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
身份運算子
在比較運算子的 PHP 文件中 ,有一個相同的運算子 ===
。此運算子可用於檢查變數是否與參考值相同 :
$var = null;
$var_is_null = $var === null; // true
$var_is_true = $var === true; // false
$var_is_false = $var === false; // false
它有一個相應的不相同的運算子 !==
:
$var = null;
$var_is_null = $var !== null; // false
$var_is_true = $var !== true; // true
$var_is_false = $var !== false; // true
相同的運算子可以用作 is_null()
等語言函式的替代。
使用案例與 strpos()
strpos($haystack, $needle)
語言函式用於定位 $needle
中 $needle
發生的索引,或者它是否發生。strpos()
功能區分大小寫; 如果你不需要不區分大小寫,那麼你可以使用 stripos($haystack, $needle)
strpos
&stripos
函式還包含第三個引數 offset
(int),如果指定,搜尋將從字串的開頭開始計算這個字元數。與 strrpos 和 strripos 不同,偏移量不能為負
該函式可以返回:
- 如果在
$haystack
發現了$needle
,那麼該怎麼辦? - 如果
$needle
位於$haystack
的開頭以外的某處,則指定索引的非零整數; - 和值
false
如果$needle
是不是在$haystack
發現任何地方。
因為 0
和 false
在 PHP 中都具有真實性,但是代表了 strpos()
的不同情況,重要的是要區分它們並使用相同的運算子 ===
來準確檢視 false
而不僅僅是一個等於 false
的值。
$idx = substr($haystack, $needle);
if ($idx === false)
{
// logic for when $needle not found in $haystack
}
else
{
// logic for when $needle found in $haystack
}
或者,使用不相同的運算子:
$idx = substr($haystack, $needle);
if ($idx !== false)
{
// logic for when $needle found in $haystack
}
else
{
// logic for when $needle not found in $haystack
}