php要當心的坑

php要當心的坑主要有php

  • 弱類型
  • 浮點不精確
  • 引用的理解

弱類型

php90%的坑都在弱類型,1是弱類型相關的轉換規則,你得記住,2最麻煩的,在很是普遍的範圍,都能進行類型按需轉換,是你得識別出可能自動轉換的地方,防止出bug,得時刻提防html

主要有這麼幾點要掌握bash

  • 何時轉換?在程序須要的時候,會自動轉換,這個就很難搞, 要時刻提防
  • 轉換成什麼類型?if('11' == 1.0)好比這個鬆散比較背後的轉換規則 ,你知道是吧str轉換成float仍是把float轉換成str?這個須要知道
  • 轉換規則,知道從哪轉到哪後,咱們還要知道 數據 從類型A轉換成類型B 產生的結果
  • 另外就是php手冊總結的,幾個函數isset empty is_null的處理結果,和鬆散比較表

按需轉換概念

在函數的參數 或者運算須要某個類型的變量時,若是給的不是,那就會自動轉換,要是不能轉,那就,報錯函數

鬆散比較轉換規則

看我總結的圖 ui

記住三條解決12個狀況spa

  • 凡有一放是bool 就轉換爲bool
  • 凡有null,跟bool同樣,只是要==false
  • 凡是遇到array(str int float)所有false

剩下3個.net

  • int+float 按float比
  • str遇到int和float都轉換成對方類型,轉換規則是,若是是合法數值類型,就直接轉數值,開頭有數字就開頭的數字,開頭字母那就是0

互相轉換規則

看我總結的圖 3d

用的比較多的狀況是 其餘往str和bool轉,這倆尤爲要搞清楚code

手冊附錄

PHP 類型比較表cdn

怎麼樣達標

  1. 手冊那幾個表 背下來
  2. 轉換規則,背下來
  3. 鬆散比較自動轉換方向 背下來
  4. 可以準確識別和警戒會自動轉換的地方

浮點不精確

這個相對簡單,就是你要知道浮點計算會出問題,而後大概緣由是什麼?怎麼解決?

浮點不精確

上代碼

<?php
echo floor((0.7+0.1)*10); //7
echo PHP_EOL;
echo intval(0.58*100); //57
echo PHP_EOL;
echo ((0.7+0.1)== 0.8)?'相等':'不相等';//不相等
echo PHP_EOL;
echo (1.23456789123456789==1.23456789123456780)?'相等':'不相等';//相等
echo PHP_EOL;
echo '---use bc-----';
echo (bcadd(0.7,0.1,1)== 0.8)?'相等':'不相等';//相等
複製代碼

緣由

由於數字在內部是二進制 具體看這個 PHP浮點數的一個常見問題的解答

怎麼破

  1. 先轉換爲int在計算
  2. 用bc函數

引用

先看這個 我晚點補齊 php中引用&的真正理解-變量引用、函數引用、對象引用

foreach &問題

先看一個經典的題目

<?php
$arr = [1,2,3];
foreach($arr as &$v){
	echo $v.',';
}
echo PHP_EOL;
foreach($arr as $v){
	echo $v.',';
}
複製代碼

結果輸出

1,2,3,
1,2,2,
複製代碼

爲啥?這篇圖文並茂解答PHP foreach引用&

obj引用

php中,對象都是引用傳值,

相關文章
相關標籤/搜索