php 不恒等,php运算符 == 怎么使用以及与 === 恒等的区别是什么?
PHP編程語言中有許多運算符來幫助我們處理相關的字符和數組,在某些情況下,PHP會把類數值數據(如含有數字的字符串等)轉換成數值處理,== 運算符就是其中之一。在使用PHP運算符==對兩個字符串進行松散比較時,PHP會把類數值的字符串轉換為數值進行比較。<?php
var_dump('01' == 1);
?>
以上代碼輸出結果為:bool(true)
所以,在使用對字符串進行比較時,建議使用PHP運算符==對字符串進行嚴格的檢查,或使用strcmp()等函數,從而避免可能產生的問題。
除此之外,常用的in_array()函數也存在弱類型的問題,見如下代碼:<?php
var_dump(in_array('01', array('1')));
?>
以上代碼輸出結果為:bool(true)
相信用過該函數進行安全性檢查的PHP編程人員都知道這會產生怎么樣的安全問題了吧?幸好in_array()函數為我們提供了第三個參數,把它設為 true 就可以打開in_array()函數的強制類型檢查機制,如下代碼所示:<?php
var_dump(in_array('01', array('1'), true));
?>
輸出結果為:bool(false)
由于PHP是一種弱類型的語言,也就是說數據類型這個概念在PHP中被弱化。因而如果在編程時過分忽略數據類型(也是大部份PHP程序員的通病),會產生一些問題,甚至導致安全漏洞。在PHP運算符==的介紹最后,還是那句說得很煩很煩的話,對外來數據進行嚴格檢查和過濾。
恒等計算符,和比較運算符號“==”的區別是 “==”不會檢查條件式的表達式的類型,恒等計算符會同時檢查表達式的值與類型。
這主要和php是無類型語言有關,比如 NULL,FALSE,array(),””,0,”0″這幾個值如果用==他們是相等的,但是你如果判斷出某個值真正的返回值呢,就可以用 ===
$a = 0;
$b = FALSE;
$a === FALSE 不成立,但 $b === FALSE成立,如果是==, $a == FALSE 和 $b == FALSE都成立
===運算符還是很有用的,php有些內置函數成功會返回某個值,失敗會返回false,假如成功了但返回的是””或者0之類的空值你怎么判斷成功或者失敗呢?這是就可以用 === ,它可以區分變量類型。
$a == $b 等于 TRUE,如果 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它們的類型也相同。(PHP 4 引進)
$a != $b 不等 TRUE,如果 $a 不等于 $b。
$a <> $b 不等 TRUE,如果 $a 不等于 $b。
$a !== $b 非全等 TRUE,如果 $a 不等于 $b,或者它們的類型不同。(PHP 4 引進)
$a < $b 小與 TRUE,如果 $a 嚴格小于 $b。
$a > $b 大于 TRUE,如果 $a 嚴格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。
如果比較一個整數和字符串,則字符串會被轉換為整數。如果比較兩個數字字符串,則作為整數比較。此規則也適用于 switch語句。<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("1" == "1e0"); // 1 == 1 -> true
switch ("a") {
case 0:
echo "0";
break;
case "a": // never reached because "a" is already matched with 0
echo "a";
break;
}
?>
總結
以上是生活随笔為你收集整理的php 不恒等,php运算符 == 怎么使用以及与 === 恒等的区别是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机组成原理强制类型转换规则,计算机组
- 下一篇: java 恒等于_JavaScript中