最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP 的比較運(yùn)算與邏輯運(yùn)算詳解

 更新時(shí)間:2016年05月12日 11:38:44   投稿:jingxian  
下面小編就為大家?guī)硪黄狿HP 的比較運(yùn)算與邏輯運(yùn)算詳解。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

1、以下值用 empty() 被判斷為true:

未賦值變量、未聲明變量、0、"0"、""、false、null、空數(shù)組 array() 、對象的魔術(shù)方法 __get() 返回的值

在低于 PHP5.0 的版本中,沒有任何屬性的對象也被 empty 判斷為 true

注意:empty() 只接受變量或變量的索引值或?qū)傩灾担荒苤苯觽魅氤A?,也不能傳入運(yùn)算表達(dá)式,PHP 5.5 之后支持表達(dá)式

2、被 isset() 判斷為 false 的值:未賦值變量、未聲明變量、null、__get() 返回的值,接受的參與 empty()一樣,不能是常量和表達(dá)式.

3、不同類型的數(shù)據(jù)比較

如果有一個(gè)是 boolean 型或者 null, 轉(zhuǎn)換成 boolean 比較,

否則如果有一個(gè)是 number,轉(zhuǎn)換成 number 比較,

否則如果有一個(gè)是 string,轉(zhuǎn)換成 string 比較

object 類型總是大于 array  類型和標(biāo)量類型,array 類型總是大于 標(biāo)量類型

注意這些比較結(jié)果:

//0開頭的數(shù)字字符串轉(zhuǎn)數(shù)字時(shí)不會按八進(jìn)制轉(zhuǎn)換,而是簡單地丟棄把 '0' 丟棄按數(shù)字進(jìn)行比較,

  123=='0123' //true
  "123"<"0124" //true,0開頭的數(shù)字字符串直接按十進(jìn)制數(shù)字比較而非八進(jìn)制

  "012" == 10 // false
== 10 // true
  0x12 == 18 // true
  "0x12" == 18 // true
 

 false < true; //true
 2>true; // false
 2==true; // true 
 null==0; //true
-1<0;//true
-1<null;//false ,-1 轉(zhuǎn) bool 是true

4、類型轉(zhuǎn)換規(guī)則

 empty() 判斷為 true 的值轉(zhuǎn)換為 boolean 型得到 false ,反之,得到 true  ( __get() 返回的值需按具體的值判斷)

被 empty() 判斷為 true 的值轉(zhuǎn)換成 number 得 0,非空的 array 轉(zhuǎn) number 得到1  ( __get() 返回的值需按具體的值判斷)

class Test{
 private $k=1;
 public function __get($propertyName){
  return 123;
 }
}

$obj = new Test();
echo json_encode(empty($obj->k)); //true
echo json_encode(isset($obj->k)); //false
echo json_encode((bool)($obj->k)); //true

幾個(gè)string 轉(zhuǎn) number 的場景: 

echo 'abc'*1 ; //0 
echo '012'*1; //12 乘法:可以轉(zhuǎn)換十六進(jìn)制數(shù),不是數(shù)字開頭則返回 0
echo '0x12.123'*1; //18

echo (float)'0x12' ;//0 
echo (int)'0x12' ; //0 不能處理十六進(jìn)制數(shù)
echo (float)'12abc'; //12 截取左側(cè)字符串
echo (float)'abc'; // 0 不是數(shù)字返回0

is_numeric('0x123'); //true 能識別十六進(jìn)制數(shù)
is_numeric('0x123.123'); //false 識別目標(biāo)是整個(gè)字符串而非截取前面一部分

string 轉(zhuǎn) number 時(shí)截取左側(cè)的數(shù)字字符串進(jìn)行轉(zhuǎn)換,如果沒有則返回 0.

其他數(shù)據(jù)轉(zhuǎn)字符串:

//幾個(gè)轉(zhuǎn)字符串的值(string)0 ; // "0"
(string)true; // "1"
(string)false; // ""
(string)null; // ""
(string)array(); // "Array"

數(shù)組可以直接進(jìn)行字符串拼接操作但不能進(jìn)行數(shù)學(xué)運(yùn)算.

object 類型轉(zhuǎn)換成 boolean 總是 true, object 類型不能轉(zhuǎn)換成 number 和 string ,因此也不能進(jìn)行字符串拼接和數(shù)學(xué)運(yùn)算

標(biāo)量轉(zhuǎn)換成 array 的方式是將數(shù)組第一個(gè)元素設(shè)置成標(biāo)量,返回該數(shù)組。

標(biāo)量轉(zhuǎn)換成 object 得到一個(gè) stdClass 類的實(shí)例,標(biāo)量的值被賦給名為 scalar 的屬性: Object(    [scalar] => 234)

array 轉(zhuǎn) object 得到一個(gè) stdClass 類的實(shí)例,數(shù)組的 key 為實(shí)力的屬性名。

object 轉(zhuǎn) array 有點(diǎn)復(fù)雜:

方法、靜態(tài)屬性、類常量被丟棄

保護(hù)屬性名稱前面被被加上一個(gè) "*"

私有屬性前面被加上類名作為前綴(大小寫與類名完全相同)

這些前綴的前后都加上空字符 \0

例如一個(gè)由 object 轉(zhuǎn)換來的 array 為:

Array(    [*v] => 444    [bf] => 333    [bk] => 99977    [Ak] => 999    [*p] => 888    [a2] => 22)

原對象中有:

public 屬性 a2, protected 屬性 v、p ,這些屬性來自哪個(gè)類無法鑒別(被重寫則取子類的屬性)

來自類 b 的 private 屬性 f、k,(從數(shù)組 key 來看,以bf為例,無法判斷他是屬性名為bf,還是來自類b的私有屬性f)

來自類 A 的 private 屬性 k

無法鑒別 b 和 A 哪個(gè)是子類哪個(gè)是父類(僅從 array 的key來看,也無法推斷出原對象構(gòu)造自哪個(gè)類)

例子:

class A {
 private $A = 'private property, $A of class A'; // This will become '\0A\0A'
 protected $C = 'protected property, $C of class A';
}

class B extends A {
 private $A = 'private property, $A of class B'; // This will become '\0B\0A'
 public $AA = 'public property, $AA of class B'; // This will become 'AA'
 protected $B = 'protected property, $B of class B';
}

$arr = (array) new B();

foreach ($arr as $key => $value) {
 echo '<br />';
 echo $key .',length: '.strlen($key).' value: '.$value;
}

輸出結(jié)果:

BA,length: 4 value: private property, $A of class B
AA,length: 2 value: public property, $AA of class B
*B,length: 4 value: protected property, $B of class B
AA,length: 4 value: private property, $A of class A
*C,length: 4 value: protected property, $C of class A

 5、 邏輯運(yùn)算總是返回 true 或 false (寫多了 javascript 的人要注意),邏輯運(yùn)算符優(yōu)先級從高到低 為 &&、 ||、 and、 or ,邏輯運(yùn)算符的短路效果可以使用語句中,但記住他們不會像 javascript 中那樣返回一個(gè) 不是 boolean 類型的值,在表達(dá)式中使用要注意。

 

$a = 1;
$b=0;
$b and $a = 100;
echo $a; //1
$b || $a = 200;
echo $a; //200

6、switch 的比較不是 "===" 而是 "==" (在 javascript 中是 "===")

7、 在 php4 中,object 之間的比較方式與 array 相同,在 php5 中 , object 類型間的 "==" 比較為 true的前 提是,他們屬于同一個(gè)類的實(shí)例(當(dāng)然還要進(jìn)行屬性的比較,這類似標(biāo)量的"==="比較),object 間的 "===" 比較為 true 的前提是他 們 就是同一個(gè)對象。

在 PHP4 中 ,不包括任何成員變量的對象 被 empty() 判斷為 true

字符串偏移 offset 取字符的 empty() 判定: 取對應(yīng) offset 的字符進(jìn)行判斷,在PHP5.4 以前,使用索引從字符串中取字符時(shí)會先將索引進(jìn)行取整,因此左側(cè)不包含數(shù)字的字符串都被轉(zhuǎn)換成0,PHP5.4之后,不再對非整形格式的字符串索引進(jìn)行取整,因此判斷為 true, 同理,isset() 判定為false. 如:

$str = 'ab0d';
empty($str[0]); //false
empty($str[0.5]); //false 索引被向下取整 為 0
empty($str["0.5"]); //false 索引被向下取整 為 0,PHP5.4之后不取證,判定為 true 
empty($str[2]); //true ,取得的字符為 "0"
empty($str["3"]); //false ,取得的字符為 "d"
empty($str[4]); //true ,索引超出范圍,notice 警告,但 empty() 會忽略警告
empty($str['a']); // false ,左側(cè)不包含數(shù)字字符串索引 PHP5.4之前被處理為 $str[0],PHP5.4之后,直接為判定 true

無論是“不等于”還是”==“ ,不要在 PHP 的跨類型數(shù)據(jù)比較中使用”傳遞性“:

$a == $b; //true

$b == $c; //true

并不能說明 $a == $c 為 true

數(shù)組的比較方法

// 數(shù)組是用標(biāo)準(zhǔn)比較運(yùn)算符這樣比較的
function standard_array_compare($op1, $op2)
{
 if (count($op1) < count($op2)) {
  return -1; // $op1 < $op2
 } elseif (count($op1) > count($op2)) {
  return 1; // $op1 > $op2
 }
 foreach ($op1 as $key => $val) {
  if (!array_key_exists($key, $op2)) {
   return null; // uncomparable
  } elseif ($val < $op2[$key]) {
   return -1;
  } elseif ($val > $op2[$key]) {
   return 1;
  }
 }
 return 0; // $op1 == $op2
}

8、三元運(yùn)算符: 跟其他大多數(shù)編程語言不一樣,PHP 的三元運(yùn)算符是左結(jié)合的!

$arg = 'T'; 
 $vehicle = ( ( $arg == 'B' ) ? 'bus' : 
     ( $arg == 'A' ) ? 'airplane' : 
     ( $arg == 'T' ) ? 'train' : 
     ( $arg == 'C' ) ? 'car' : 
     ( $arg == 'H' ) ? 'horse' : 
     'feet' ); 
 echo $vehicle; //horse

三元運(yùn)算表達(dá)式被劃分為

( $arg == 'B' ) ? 'bus' : ( $arg == 'A' ) 
         ? 'airplane' : ( $arg == 'T' ) 
                ? 'train' : ( $arg == 'C' )
                    ? 'car' : ( $arg == 'H' )
                         ? 'horse' : 'feet' ;

以上這篇PHP 的比較運(yùn)算與邏輯運(yùn)算詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Yii2.0表關(guān)聯(lián)查詢實(shí)例分析

    Yii2.0表關(guān)聯(lián)查詢實(shí)例分析

    這篇文章主要介紹了Yii2.0表關(guān)聯(lián)查詢的方法,結(jié)合實(shí)例形式分析了Yii中關(guān)聯(lián)查詢的實(shí)現(xiàn)方法與相關(guān)使用技巧,需要的朋友可以參考下
    2016-07-07
  • laravel通用化的CURD的實(shí)現(xiàn)

    laravel通用化的CURD的實(shí)現(xiàn)

    這篇文章主要介紹了laravel通用化的CURD的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 使用laravel根據(jù)用戶類型來顯示或隱藏字段

    使用laravel根據(jù)用戶類型來顯示或隱藏字段

    今天小編就為大家分享一篇使用laravel根據(jù)用戶類型來顯示或隱藏字段,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • ThinkPHP中session函數(shù)詳解

    ThinkPHP中session函數(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了ThinkPHP中session函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • PHP環(huán)境搭建的詳細(xì)步驟

    PHP環(huán)境搭建的詳細(xì)步驟

    這篇文章主要為大家介紹了PHP環(huán)境搭建的詳細(xì)步驟,感興趣的小伙伴們可以參考一下
    2016-06-06
  • thinkphp常見路徑用法分析

    thinkphp常見路徑用法分析

    這篇文章主要介紹了thinkphp常見路徑用法,實(shí)例分析了__PUBLIC__、__ROOT__、__APP__、__URL__、__ACTION__及__SELF__等標(biāo)簽常量的用法,需要的朋友可以參考下
    2014-12-12
  • php中看實(shí)例學(xué)正則表達(dá)式

    php中看實(shí)例學(xué)正則表達(dá)式

    php中看實(shí)例學(xué)正則表達(dá)式,下面的文章都是通過實(shí)例說明來教你學(xué)習(xí)正則表達(dá)式,需要的朋友可以參考下。
    2006-12-12
  • 微信支付PHP SDK —— 公眾號支付代碼詳解

    微信支付PHP SDK —— 公眾號支付代碼詳解

    這篇文章主要介紹了微信支付PHP SDK 公眾號支付代碼詳解方法的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • phpstorm激活碼2020附使用詳細(xì)教程

    phpstorm激活碼2020附使用詳細(xì)教程

    這篇文章主要介紹了phpstorm激活碼2020附使用詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 詳解PHP的Sodium加密擴(kuò)展函數(shù)

    詳解PHP的Sodium加密擴(kuò)展函數(shù)

    Sodium 出現(xiàn)的目的也是為了代替Mcrypt這個(gè)原來的加密擴(kuò)展。在 PHP7.2 之后,Mcrypt已經(jīng)被移除,在PHP7.1時(shí)就已經(jīng)被標(biāo)記為過時(shí)。不過,Sodium擴(kuò)展的應(yīng)用也并不是很多,大部分情況下我們都會使用OpenSSL來進(jìn)行加密操作,所以,我們這篇文章只做了解即可。
    2021-06-06

最新評論

汉源县| 宿迁市| 秦安县| 浙江省| 和政县| 乐至县| 当阳市| 淮安市| 洱源县| 沂水县| 白银市| 包头市| 博客| 陆良县| 青州市| 商丘市| 铅山县| 辽源市| 河西区| 鄂托克旗| 西丰县| 禄劝| 景德镇市| 桐城市| 阳江市| 庐江县| 乡宁县| 临澧县| 深圳市| 同心县| 桓台县| 洛阳市| 随州市| 法库县| 吴川市| 济南市| 灵璧县| 香港 | 福州市| 白玉县| 揭阳市|