string 轉number 時截取左邊的數字字串進行轉換,如果沒有則回傳0,
陣列可以直接進行字串拼接操作但不能進行數學運算. object 類型轉換成 boolean 總是 true, object 類型不能轉換成 number 和 string ,因此也不能進行字串拼接和數學運算 標量轉換成 array 的方式是將陣列第一個元素設定成標量,傳回該陣列。 標量轉換成 object 得到一個 stdClass 類別的實例,標量的值被賦給名為 scalar 的屬性: Object( [scalar] => 234) array 轉 object 得到一個 stdClass 類別的實例,而陣列的 key 就是實力的屬性名稱。 object 轉 array 有點複雜: 方法、靜態屬性、類別常數被丟棄 保護屬性名稱前面被加上一個 "*" 私有屬性前面被加上類別名稱(大小寫與類別名稱完全相同) 例如一個由 object 轉換來的 array 為: Array( [*v] => 444 [bf] => 333 [bk] => 99977 [Ak] => 999 [*p] => 888 [a2] => 22) 原對像有: public 屬性 a2, protected 屬性 v、p ,這些屬性來自哪個類別無法鑑別(被重寫則取子類別的屬性) 來自類別 b 的 private 屬性 f、k,(從陣列 key 來看,以bf為例,無法判斷他是屬性名為bf,還是來自類別b的私有屬性f) 來自類別 A 的 private 屬性 k 無法鑑別 b 和 A 哪個是子類別哪個是父類別(僅從 array 的key來看,也無法推斷出原始物件建構自哪個類別) 5、 邏輯運算總是回傳true 或false (寫多了javascript 的人要注意),邏輯運算子優先權從高到低為&&、 ||、 and、 or ,邏輯運算子的短路效果可以使用語句中,但記住他們不會像javascript 那樣傳回一個不是boolean 類型的值,在表達式中使用要注意。
6、switch 的比較不是"===" 而是"==" (在javascript 中是"===") 7、 在php4 中,object 之間的比較方式與array 相同,在php5 中, object 類型間的"==" 比較為true的前提是,他們屬於同一個類別的實例(當然還要進行屬性的比較,這類似標量的"==="比較),object 間的"===" 比較為true 的前提是他們就是同一個物件。 在 PHP4 中 ,不包含任何成員變數的物件 被 empty() 判斷為 true 字串偏移offset 取字元的empty() 判定: 取對應offset 的字元進行判斷,在PHP5.4 以前,使用索引從字串中取字元時會先將索引進行取整,因此左側不包含數字的字串都被轉換成0,PHP5.4之後,不再對非整形格式的字串索引進行取整,因此判斷為true, 同理,isset() 判定為false. 如:
複製程式碼
無論是「不等於」或」==「 ,不要在 PHP 的跨型別資料比較中使用」傳遞性「: $a == $b; //true $b == $c; //true 並不能說明 $a == $c 為 true 陣列的比較方法
8、三元運算子?: ,跟其他大多數程式語言不一樣,PHP 的三元運算子是左結合的!
三元運算表達式被分割為 ( $arg == 'B' ) ? 'bus' : ( $arg == 'A' ) ? 'airplane' : ( $arg == 'T' ) ? 'train' : ( $arg == 'C' ) ? 'car' : ( $arg == 'H' ) ? 'horse' : 'feet' ; |