一、判断代码输出

  1. $str1 = null;
  2. $str2 = false;
  3. echo $str1==$str2 ? '相等' : '不相等';
  4. $str3 = '';
  5. $str4 = 0;
  6. echo $str3==$str4 ? '相等' : '不相等';
  7. $str5 = 0;
  8. $str6 = '0';
  9. echo $str5===$str6 ? '相等' : '不相等'; 

输出:
相等
相等
不相等

  1. $a1 = null;
  2. $a2 = false;
  3. $a3 = 0;
  4. $a4 = '';
  5. $a5 = '0';
  6. $a6 = 'null';
  7. $a7 = array();
  8. $a8 = array(array());
  9. echo empty($a1) ? 'true' : 'false';
  10. echo empty($a2) ? 'true' : 'false';
  11. echo empty($a3) ? 'true' : 'false';
  12. echo empty($a4) ? 'true' : 'false';
  13. echo empty($a5) ? 'true' : 'false';
  14. echo empty($a6) ? 'true' : 'false';
  15. echo empty($a7) ? 'true' : 'false';
  16. echo empty($a8) ? 'true' : 'false';

  输出: true  true   true true true  false true false

  1. $test = 'aaaaaa';
  2. $abc = & $test;
  3. unset($test);
  4. echo $abc;

  输出: 'aaaaa'

  1. $count = 5;
  2. function get_count(){
  3. static $count = 0;
  4. return $count++;
  5. }
  6. echo $count;
  7. ++$count;
  8. echo get_count();
  9. echo get_count();

  输出 5  0 1

php 对bool 转换 字符串的处理

  1. $a=false;
  2. echo $a; // ''
  3. echo $a.'';// ''
  4. echo (string)$a; // ''
  5. echo json_encode($a); // false
  6.  
  7. $b=true;
  8. echo $b; // 1
  9. echo $b.'';// 1
  10. echo (string)$b; // 1
  11. echo json_encode($b); // true
  12.  
  13. if(''){
  14. echo "is ok";
  15. }else{
  16. echo "no ok";
  17. }
  18. // false 输出 no ok
  19.  
  20. if('false'){
  21. echo "is ok";
  22. }else{
  23. echo "no ok";
  24. }
  25. // true 输出 no ok

  php 对象引用赋值

  1. <?php
  2. $a="Hello"; // $a 分配内存地址 0x00001,并赋值 Hello 。
  3. $b=&$a; // $b 分配内存地址 0x00002,并将该地址指向 0x00001 。
  4. $b="word"; // 为 0x00001 地址赋值 word
  5. echo $a,$b; // 输出 word ,word
  6.  
  7. /*******/
  8.  
  9. $a="Hello"; // $a 分配内存地址 0x00001,并赋值 Hello 。
  10. $b=&$a; // $b 分配内存地址 0x00002,并将该地址指向 0x00001 。
  11. unset($b); // 解除 $b 分配的内存地址 0x00002 与 0x00001 的 绑定关系
  12. $b="word"; // 为 0x00002 地址赋值 word
  13. echo $a,$b; // 输出 Hello word
  14. ?>

二、算法

1、冒泡排序

  1. $arr=[1,6,3,8,9,12,6];
  2. $len=count($arr);
  3.  
  4. for($i=0;$i<$len;$i++)
  5. {
  6. for($j=$i+1;$j<$len;$j++)
  7. {
  8.  
  9. if($arr[$i]>$arr[$j])
  10. {
  11. $tmp=$arr[$i];
  12. $arr[$i]=$arr[$j];
  13. $arr[$j]=$tmp;
  14.  
  15. }
  16.  
  17. }
  18. }
  19.  
  20. var_dump($arr);

  2、二分查找

二分查找需要查找的集合对象为有序队列。

  1. function binarySearch(Array $arr,$key)
  2. {
  3. $len=count($arr);
  4. if($len==0)
  5. return false;
  6. $begin=0;
  7. $end=$len-1;
  8.  
  9. //如果查找的值为集合首元素则$begin,$end将=
  10. while ( $begin <= $end) {
  11.  
  12. $mid=floor(($begin+$end)/2);
  13. if($arr[$mid]==$key){
  14. return $arr[$mid];
  15. }
  16. if($arr[$mid]<$key){
  17. $begin=$mid +1;
  18. }
  19. if($arr[$mid]>$key){
  20. $end=$mid-1;
  21. }
  22. }
  23. return false;
  24. }
  25. $arr=[3,4,6,7,8,10,11,55,67];
  26. $result=binarySearch($arr,4);
  27. var_dump($result);

  3、 分割字符串

  1. $str= 'abcdefg';
  2. // 读取字符串中指定位置字符
  3. echo $str[2];// c
  4. // explode 第一个参数为空则 Warning: explode(): Empty delimiter
  5.  
  6. // 将字符串转换成字符数组
  7. $arr=[];
  8. for ($i=0; $i <strlen($str) ; $i++) {
  9. $arr[$i]=$str[$i];
  10. }
  11. foreach ($arr as $key=>$value) {
  12. echo $key.':'.$value.'
  13. ';
  14. }

4、快速排序法:

有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。

参考:

http://developer.51cto.com/art/201403/430986.htm

  1. function quickSort(&$arr,$begin,$end)
  2. {
  3.  
  4. if($begin>=$end)
  5. return;
  6.  
  7. $k=$arr[$begin];
  8. $x=$begin;
  9. $y=$end;
  10.  
  11. while ($x<$y)
  12. {
  13. while ($x<$y && $arr[$y]>=$k)
  14. {
  15. $y--;
  16. }
  17.  
  18. while ($x<$y && $arr[$x]<=$k) {
  19. $x++;
  20. }
  21.  
  22. if ( $x<$y ){
  23. $temp=$arr[$x];
  24. $arr[$x]=$arr[$y];
  25. $arr[$y]=$temp; // $arr[$x];
  26. }
  27. }
  28.  
  29. $arr[$begin]=$arr[$x];
  30. $arr[$x]=$k;
  31.  
  32. quickSort($arr,$begin,$x-1);
  33. quickSort($arr,$x+1,$end);
  34.  
  35. }
  36.  
  37. $arr= Array(3,7,5,4,6,8,2,9,13);
  38.  
  39. quickSort($arr,0,sizeof($arr)-1);
  40. print_r($arr);
  41. /*
  42. Array
  43. (
  44. [0] => 2
  45. [1] => 3
  46. [2] => 4
  47. [3] => 5
  48. [4] => 6
  49. [5] => 7
  50. [6] => 8
  51. [7] => 9
  52. [8] => 13
  53. )
  54.  
  55. */

四、开发常见问题

1、XSS 跟 CSRF 攻击

XSS:跨站脚本(Cross-site scripting)
通过在提交表单中注入脚本,导致站点受影响。
解决方案:
如果只需要纯文本内容,则在内容展示的时候对内容进行HTML编码,解决注入脚本问题。
如果提交的内容本身就是HTML结构,此时安全的做法是 根据提交的内容重新生成HTML树,然后建立HTML接口白名单,过滤掉非法HTML元素,重新生成HTML内容。

CSRF:跨站请求伪造(Cross-site request forgery)
获取用户的cookie信息,模拟用户进行业务数据操作。
理论上是无法杜绝的,只能根据场景去判断。比如操作金额的时候需要用户再次输入支付密码等相关信息。

php 基础知识的更多相关文章

  1. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  2. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  3. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  4. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  10. APP测试入门篇之APP基础知识(001)

    前言        最近两月比较多的事情混杂在一起,静不下心来写点东西,月初想发表一遍接口测试的总结,或者APP测试相关的内容,一晃就月底了,总结提炼一时半会也整不完.放几个早年总结内部培训PPT出来 ...

随机推荐

  1. AngularJS快速入门指南11:事件

    AngularJS拥有自己的HTML事件指令. ng-click指令 ng-click指令定义了AngularJS的click事件. <div ng-app="" ng-co ...

  2. paip.操作符重载的缺失 Java 的一个大缺点

    paip.操作符重载的缺失 Java 的一个大缺点 #----操作符重载的作用 1.提升用户体验 操作符重载..可以让代码更加自然.... 2.轻松实现代码代码移植 例如   java代码会直接移植到 ...

  3. SpringMVC 架构

    SpringMVC 架构 1. 前言 SpringMVC是目前java世界中最为广泛应用的web框架,最然从学习SpringMVC的第一个程序--helloworld至今,已有好几个年头.其间伴随着项 ...

  4. AutoMapper完成Dto与Model的转换

    在实际的软件开发项目中,我们的“业务逻辑”常常需要我们对同样的数据进行各种变换. 例如,一个Web应用通过前端收集用户的输入成为Dto,然后将Dto转换成领域模型并持久化到数据库中.相反,当用户请求数 ...

  5. AngularJS中实现日志服务

    本篇体验使用AngularJS自定义一个记录日志的服务. 在AngularJS中,服务的一些写法是这样的: var app = angular.module('app',[]); app.provid ...

  6. 你的项目真的需要Session吗?

    在web开发中,Session这个东西一直都很重要,至少伴随我10年之久, 前一段时间发生一个性能问题,因为Redis session 问题,后来想想 其实我的项目session 是不需要的. 先看看 ...

  7. 动态变化的OO设计

    今天看到个题目:对象会动态的变化. 游戏精灵,有人和神仙,但是随着人的不断积分,会升级为神仙:神仙也可能会因为积分的减少而降级为人.这种情况怎么画出个类图来. 这是第一版的设计,正常思维.人和神仙都是 ...

  8. c/c++ 输入输出缓冲区

    关于缓冲区的详细介绍,请参考 C++编程对缓冲区的理解 CPP的输入输出流和缓冲区 c++输出缓冲区刷新   (1)c++中cin.cout,cerr和c的stdin.stdout.stderr都是同 ...

  9. MySQL 错误

    (1) Ignoring query to other database D:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -Uroot 原因是 ...

  10. arulesSequences包做序列模式的关联分析

    实验数据: 实验文件: ? 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 02 ...