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