php 基础知识
一、判断代码输出
1 2 3 4 5 6 7 8 9 | $str1 = null; $str2 = false; echo $str1 == $str2 ? '相等' : '不相等' ; $str3 = '' ; $str4 = 0; echo $str3 == $str4 ? '相等' : '不相等' ; $str5 = 0; $str6 = '0' ; echo $str5 === $str6 ? '相等' : '不相等' ; |
输出:
相等
相等
不相等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $a1 = null; $a2 = false; $a3 = 0; $a4 = '' ; $a5 = '0' ; $a6 = 'null' ; $a7 = array (); $a8 = array ( array ()); echo empty ( $a1 ) ? 'true' : 'false' ; echo empty ( $a2 ) ? 'true' : 'false' ; echo empty ( $a3 ) ? 'true' : 'false' ; echo empty ( $a4 ) ? 'true' : 'false' ; echo empty ( $a5 ) ? 'true' : 'false' ; echo empty ( $a6 ) ? 'true' : 'false' ; echo empty ( $a7 ) ? 'true' : 'false' ; echo empty ( $a8 ) ? 'true' : 'false' ; |
输出: true true true true true false true false
1 2 3 4 | $test = 'aaaaaa' ; $abc = & $test ; unset( $test ); echo $abc ; |
输出: 'aaaaa'
1 2 3 4 5 6 7 8 9 | $count = 5; function get_count(){ static $count = 0; return $count ++; } echo $count ; ++ $count ; echo get_count(); echo get_count(); |
输出 5 0 1
php 对bool 转换 字符串的处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | $a =false; echo $a ; // '' echo $a . '' ; // '' echo (string) $a ; // '' echo json_encode( $a ); // false $b =true; echo $b ; // 1 echo $b . '' ; // 1 echo (string) $b ; // 1 echo json_encode( $b ); // true if ( '' ){ echo "is ok" ; } else { echo "no ok" ; } // false 输出 no ok if ( 'false' ){ echo "is ok" ; } else { echo "no ok" ; } // true 输出 no ok |
php 对象引用赋值
<?php $a="Hello"; // $a 分配内存地址 0x00001,并赋值 Hello 。 $b=&$a; // $b 分配内存地址 0x00002,并将该地址指向 0x00001 。 $b="word"; // 为 0x00001 地址赋值 word echo $a,$b; // 输出 word ,word /*******/ $a="Hello"; // $a 分配内存地址 0x00001,并赋值 Hello 。 $b=&$a; // $b 分配内存地址 0x00002,并将该地址指向 0x00001 。 unset($b); // 解除 $b 分配的内存地址 0x00002 与 0x00001 的 绑定关系 $b="word"; // 为 0x00002 地址赋值 word echo $a,$b; // 输出 Hello word ?>
二、算法
1、冒泡排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $arr =[1,6,3,8,9,12,6]; $len = count ( $arr ); for ( $i =0; $i < $len ; $i ++) { for ( $j = $i +1; $j < $len ; $j ++) { if ( $arr [ $i ]> $arr [ $j ]) { $tmp = $arr [ $i ]; $arr [ $i ]= $arr [ $j ]; $arr [ $j ]= $tmp ; } } } var_dump( $arr ); |
2、二分查找
二分查找需要查找的集合对象为有序队列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function binarySearch(Array $arr , $key ) { $len = count ( $arr ); if ( $len ==0) return false; $begin =0; $end = $len -1; //如果查找的值为集合首元素则$begin,$end将= while ( $begin <= $end ) { $mid = floor (( $begin + $end )/2); if ( $arr [ $mid ]== $key ){ return $arr [ $mid ]; } if ( $arr [ $mid ]< $key ){ $begin = $mid +1; } if ( $arr [ $mid ]> $key ){ $end = $mid -1; } } return false; } $arr =[3,4,6,7,8,10,11,55,67]; $result =binarySearch( $arr ,4); var_dump( $result ); |
3、 分割字符串
$str= 'abcdefg'; // 读取字符串中指定位置字符 echo $str[2];// c // explode 第一个参数为空则 Warning: explode(): Empty delimiter // 将字符串转换成字符数组 $arr=[]; for ($i=0; $i <strlen($str) ; $i++) { $arr[$i]=$str[$i]; } foreach ($arr as $key=>$value) { echo $key.':'.$value.' '; }
4、快速排序法:
有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。
参考:
http://developer.51cto.com/art/201403/430986.htm
function quickSort(&$arr,$begin,$end) { if($begin>=$end) return; $k=$arr[$begin]; $x=$begin; $y=$end; while ($x<$y) { while ($x<$y && $arr[$y]>=$k) { $y--; } while ($x<$y && $arr[$x]<=$k) { $x++; } if ( $x<$y ){ $temp=$arr[$x]; $arr[$x]=$arr[$y]; $arr[$y]=$temp; // $arr[$x]; } } $arr[$begin]=$arr[$x]; $arr[$x]=$k; quickSort($arr,$begin,$x-1); quickSort($arr,$x+1,$end); } $arr= Array(3,7,5,4,6,8,2,9,13); quickSort($arr,0,sizeof($arr)-1); print_r($arr); /* Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 [8] => 13 ) */
四、开发常见问题
1、XSS 跟 CSRF 攻击
XSS:跨站脚本(Cross-site scripting)
通过在提交表单中注入脚本,导致站点受影响。
解决方案:
如果只需要纯文本内容,则在内容展示的时候对内容进行HTML编码,解决注入脚本问题。
如果提交的内容本身就是HTML结构,此时安全的做法是 根据提交的内容重新生成HTML树,然后建立HTML接口白名单,过滤掉非法HTML元素,重新生成HTML内容。
CSRF:跨站请求伪造(Cross-site request forgery)
获取用户的cookie信息,模拟用户进行业务数据操作。
理论上是无法杜绝的,只能根据场景去判断。比如操作金额的时候需要用户再次输入支付密码等相关信息。
一只站在树上的鸟儿,从来不会害怕树枝会断裂,因为它相信的不是树枝,而是它自己的翅膀。与其每天担心未来,不如努力做好现在。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
2013-01-31 Rhythmk 一步一步学 JAVA(4):Spring3 MVC 之 Hello Word