经验总结以及细节问题汇总
按位与计算是否为基数
$var & 1;//$var 为整数奇数 该结果为true,即‘&’符号可以用来判断是否为奇数
有意忽略php关闭标签
这將节约你很多时间,
我们举个例子://一个 super_class.php 文件
//super extra character after the closing tag
index.phprequire_once('super_class.php');//echo an image or pdf, or set the cookies or session data
这样,你將会得到一个 Headers already send error。为什么?因为 “super extra character” 已经被输出了。现在你得开始调试啦。这会花费大量时间寻找 super extra 的位置。因此,养成省略关闭符的习惯:
这回更好.
更改应用创建的文件权限
在linux环境中,权限问题可能会浪费你很多时间。从今往后,无论何时,当你创建一些文件后,确保使用chmod设置正确权限。否则的话,可能文件先是由”php”用户创建,但你用其它的用户登录工作,系统將会拒绝访问或打开文件,你不得不奋力获取root权限,更改文件的权限等等。
1 //Read and write for owner, read for everybody else2 chmod('somedir/somefile', 0644);3 //Everything for owner, read and exceute for others4 chmod('somedir/somefile', 0755);
也就是创建文件的同时,要设置正确的文件权限
使用echo取代print
使用str_replace取代preg_replace,除非你绝对需要
不要使用 short tag
简单字符串用单引号取代双引号
head重定向后记得使用exit
不要在循环中调用函数
isset比strlen快
始中如一的格式化代码
不要删除循环或者if-else的括号
尽量不要用COUNT,能用ISSET用ISSET替代,比如ISSET($a[499])代替COUNT($a)==500
字符串与变量进行判断,字符串在前变量在后,防止少写一个等号,变成赋值操作。如:‘aa’==$a代替$a=='aa'
大数组尽量不要作为参数传递,如果非要传递,可以用传引用传参或者设置静态变量
尽量用===代替==
变量值判断是否是等于某个数字或者大于某个数字等,不要直接int($a)判断,要先判断是否是数字,如使用is_numeric($a)
时刻小心精度丢失的情况
$f = 0.58; echo intval($f * 100); // 输出57 sprintf("%.2f",$f * 100); //输出58.00
Hash比较
在进行hash比较的时候会存在问题。如下:
"0e132456789"=="0e7124511451155" //true"0e123456abc"=="0e1dddada" //false"0e1abc"=="0" //true
在进行比较运算时,如果遇到了0e\d+这种字符串,就会将这种字符串解析为科学计数法。所以上面例子中2个数的值都是0因而就相等了。如果不满足0e\d+这种模式就不会相等。这个题目在攻防平台中的md5 collision就有考到。
十六进制转换
还存在一种十六进制余字符串进行比较运算时的问题。例子如下:
"0x1e240"=="123456" //true"0x1e240"==123456 //true"0x1e240"=="1e240" //false
当其中的一个字符串是0x开头的时候,PHP会将此字符串解析成为十进制然后再进行比较,0x1240解析成为十进制就是123456,所以与int类型和string类型的123456比较都是相等。攻防平台中的起名字真难就是考察的这个特性。
in_array()
in_array()函数的第三个参数大多数情况都要传true,使其等价于全等于判断
尤其你的数组里有可能字符串和整数类型同时存在的场景下!
在PHP手册中,in_array()函数的解释是bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ),如果strict参数没有提供,$strict默认值false,那么in_array就会使用松散比较来判断$needle是否在$haystack中。当strince的值为true时,in_array()会比较needls的类型和haystack中的类型是否相同。
$array=[0,1,2,'3'];var_dump(in_array('abc', $array)); //truevar_dump(in_array('1bc', $array)); //true
可以看到上面的情况返回的都是true,因为’abc’会转换为0,’1bc’转换为1。array_search()与in_array()也是一样的问题。
来源地址:https://blog.csdn.net/weixin_39171666/article/details/130775509
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341