php奇葩注意事项
--------------------------------------------
浏览器跨域请求 会先发起 预options请求
然后我们的PHP当他是GET处理 这时会存在重复请求并丢失post数据可能
所以遇到options请求 直接die结束执行
跨域问题
跨域有协议头部+请求模式+域名限制 你抓包对比下看看触发哪个规则
还有如果返回 2个重复 Access-Control-Allow-Origin * 跨域也会出问题
------------------------------------------------
字符串跟数组混淆容易出bug
$v = '90';
@$b = $v['type_name']; #bug产生 if($v['type_name'])执行有这个变量的操作
var_dump($b); #输出'9' 他把$v['type_name']>>$v[(int)'type_name']>>$v[0]
phpv7.3
-----------------------------------------------------
当上传表单大于nginx/php配置 最大限制后 访问将请求保留 丢弃所有post参数
----------------------------------------------------------------------
数组奇葩换算
$arr = [5=>5,'5.1'=>5.1];
$arr[5.1]#输出5 小数自动变整数
$arr['5.1']#输出5.1
$arr['5']#输出5
----------------------------------------------------------------------
默认赋值问题
function skuList(&$nn=0){
}
skuList($nn);
var_dump($nn);
#输出null 并没有触发 空赋值0
-------------------------------------------------------
<?php
$str = 'hello';
echo $str{0}, "\n",$str{1}, "\n";
echo "{$str}dawd-$str{1}";
输出
h
e
hellodawd-hello{1}
$str{1}可以取出单个字符串
"{$str}8421"隔开变量名
---------------------------------------------------
数组创建
<?php
$a = array(
'a',
3 => 'b',
1 => 'c',
'e'=>66,
'd',
0 => '0',
null => 'a',
true => 'b',
false => 'c',
'' => 'f'
);
var_dump($a);
输出结果为:
array(6) {
[0]=>
string(1) "c"
[3]=>
string(1) "b"
[1]=>
string(1) "b"
["e"]=>
int(66)
[4]=>
string(1) "d"
[""]=>
string(1) "f"
}
字符串a已经消失了 被 0替换
字符串d的键 = 取最大的数字键 +1
注:键名将被这样转换:null 转为(空字符串),true 转为 1,false 转为 0。
----------------------------------------------------------------------
通常我们都知道 false值有以下几种情况
null、false、‘’、0、[]、
<?php
$var = '0';
if ($var) {
echo 'true';
} else {
echo 'false';
}
'0'同样是输出false
var_dump(0==='0');
输出false
var_dump(empty($q));#是否为空
var_dump(isset($q));#是否已经创建变量
$q='';//不一样的效果来了
var_dump(empty($q));#是否为空
var_dump(isset($q));#是否已经创建变量
很多时候这两个结果相反 但是如果不注意使用 容易bug
true
false
true
true
-----------------------------------------------------------------------------------
<?php
$RESULT = 11 + 011 + 0x11;
echo "$RESULT";
通常我们会以为 011 = 11 其实错误了
注:十进制加八进制加十六进制数,11 + 9 + 17 = 37
------------------------------------------------------------------------------
<?php
if ('2' == '02') {
echo 'true';
} else {
echo 'false';
}
PHP有毒,,自动化转 居然都不判断类型就 最大化识别匹配
注:php数值字符串作为整数进行比较。
----------------------------------------------------------
"222";
null;
php允许无用语句
--------------------------------------------------------
define('EEE',[1,2,3]);
报错
备注:只有(布尔值、整数、浮点数和字符串)可以包含在常量中 php7中已支持 但是依旧不支持对象和function
----------------------------------------------------------------
php小数有精度问题
var_dump( 100*9.12); = 9.11999999999
需要用bc开头高精度函数解决
-------------------------------------------
部分代码有jit问题
静态变量缓存了结果函数
会导致 完全不运行 xx2缓存()
循环
xx()>xx1>xx2缓存()
循环
-------------------------------------
PHP怪癖与陷阱
本文深入探讨PHP开发中易忽视的怪癖与潜在陷阱,包括跨域请求处理、字符串与数组混淆、上传表单限制、数组键名换算等,揭示PHP在不同场景下的行为特性,帮助开发者避免常见错误。
637

被折叠的 条评论
为什么被折叠?



