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中,对象都是引用传值,

相关文章
相关标签/搜索