php 基礎知識

1、判斷代碼輸出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 falsejson

 $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 轉換 字符串的處理cookie

  $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 對象引用賦值ui

<?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
?>

 

 

2、算法編碼

一、冒泡排序spa

$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);

  二、二分查找code

    二分查找須要查找的集合對象爲有序隊列。

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);

  三、 分割字符串

$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.'
     ';
}

 四、快速排序法:

     有沒有既不浪費空間又能夠快一點的排序算法呢?那就是「快速排序」啦!光聽這個名字是否是就以爲很高端呢。

   參考:

        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
)

*/

 4、開發常見問題

一、XSS 跟 CSRF 攻擊

XSS:跨站腳本(Cross-site scripting)
經過在提交表單中注入腳本,致使站點受影響。
解決方案:
若是隻須要純文本內容,則在內容展現的時候對內容進行HTML編碼,解決注入腳本問題。
若是提交的內容自己就是HTML結構,此時安全的作法是 根據提交的內容從新生成HTML樹,而後創建HTML接口白名單,過濾掉非法HTML元素,從新生成HTML內容。


CSRF:跨站請求僞造(Cross-site request forgery) 獲取用戶的cookie信息,模擬用戶進行業務數據操做。 理論上是沒法杜絕的,只能根據場景去判斷。好比操做金額的時候須要用戶再次輸入支付密碼等相關信息。

相關文章
相關標籤/搜索