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信息,模拟用户进行业务数据操作。
理论上是无法杜绝的,只能根据场景去判断。比如操作金额的时候需要用户再次输入支付密码等相关信息。

posted @   Rhythmk  阅读(335)  评论(5编辑  收藏  举报
编辑推荐:
· 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
Rhythmk 个人笔记
点击右上角即可分享
微信分享提示