zoukankan      html  css  js  c++  java
  • php 基础知识

    一、判断代码输出

      

        $str1 = null;
        $str2 = false;
        echo $str1==$str2 ? '相等' : '不相等';
        $str3 = '';
        $str4 = 0;
        echo $str3==$str4 ? '相等' : '不相等';
        $str5 = 0;
        $str6 = '0';
        echo $str5===$str6 ? '相等' : '不相等'; 

    输出:
    相等
    相等
    不相等

    $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

     $test = 'aaaaaa';
        $abc = & $test;
        unset($test);
        echo $abc;
    

      输出: 'aaaaa'

     $count = 5;
        function get_count(){
            static $count = 0;
            return $count++;
        }
        echo $count;
        ++$count;
        echo get_count();
        echo get_count();
    

      输出 5  0 1

        php 对bool 转换 字符串的处理

      $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、冒泡排序

    $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、二分查找

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

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

  • 相关阅读:
    1092 最好吃的月饼 (20 分)
    pat 乙级 1093 字符串A+B (20 分)
    pat乙级 1091 N-自守数 (15 分)
    查询GC日志、动态年龄计算
    四大特性以及事务的隔离级别
    R语言学习
    利用python进行数据分析3_Pandas的数据结构
    python_109_切片补充和list函数
    爬虫_python3_requests
    利用python进行数据分析1_numpy的基本操作,建模基础
  • 原文地址:https://www.cnblogs.com/rhythmK/p/5172406.html
Copyright © 2011-2022 走看看