广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >经验总结以及细节问题汇总
  • 678
分享到

经验总结以及细节问题汇总

php开发语言经验分享 2023-09-11 15:09:51 678人浏览 安东尼
摘要

按位与计算是否为基数 $var & 1;//$var 为整数奇数 该结果为true,即‘&’符号可以用来判断是否为奇数 有意忽略PHP关闭标签 //super extra character after the closing tag

按位与计算是否为基数

$var & 1;//$var 为整数奇数 该结果为true,即‘&’符号可以用来判断是否为奇数

有意忽略PHP关闭标签

phpecho 'Hello';  //Now dont close this tag

这將节约你很多时间,

我们举个例子://一个 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

--结束END--

本文标题: 经验总结以及细节问题汇总

本文链接: https://www.lsjlt.com/news/403307.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作