1. 程式人生 > >PHP快速入門總結

PHP快速入門總結

PHP快速開發網頁和後臺資料的熱門語言,核心是LAMP:L指Linux,A指Apache,M指MySQL,P就是Php 。建議使用phpstorm工具開發Php,建議使用PHPstudy工具整合Apache和MySQL。格式:<?php  ?> 參考手冊:http://www.w3school.com.cn/php/php_variables.asp

一 基本資料型別8種

四種標量型別:boolean (布林型邏輯型)、int (整型)、float (浮點型, 也稱作double)、 string (字串)   
兩種複合型別:array (陣列)、object (物件)   
兩種特殊型別:resource (資源)、 null (NULL)

二 運算子7種

算數運算子:+、-、*、/、%、++、-- 加減乘除餘數加加減減
字串運算子: .
賦值運算子:+=、-=、*=、/=、%=、.= 
比較運算子:> 、>= 、< 、<= 、== 等於、!= 不等於、<> 不等於、=== 值或型別全等於、!== 值或型別不等於
邏輯運算子:and 與、or 或、xor 異或、&& 與、|| 或、! 非、1>0?'true':'false' 三元運算
執行運算子:``、shell_exec()
錯誤抑制符:@

三 流程控制

關鍵字:break、continue、exit/die、goto

if (條件) {
  true 時執行的程式碼;
} elseif (條件) {
  true 時執行的程式碼;
} else {
  false 時執行的程式碼;
}
switch (expression)
{
case label1:
  if expression = label1執行
  break;
default:
  沒有符合條件後執行
}
for ($x=0; $x<=10; $x++) {
  echo "列印的數字是:$x <br>";
} 
while (條件為真) {
  var_dump('列印執行的詳細程式碼');
}

四 變數和函式

1.變數:$ 符號開頭,其後是變數的名稱,對大小寫敏感!(全域性變數global $  、 &$)
2.常量:請用define(name,value,nocase) 函式-它的三個引數:(類常量const)
name名稱必選,value值必選,nocase可選-是否對大小寫不敏感 預設是false敏感!
魔術常量:__LINE__  __FILE__  __DIR__  __FUNCTION__  __CLASS__  __METHOD__
3.許多預定義變數都是“超全域性變數”,函式或方法中無需執行global $variable; 就可訪問它們:
$GLOBALS ———管理全部變數的陣列,變數名就是它的鍵名
$_SERVER———$_SERVER['REMOTE_ADDR']客戶端IP地址 $_SERVER['REQUEST_METHOD']get/post方法
$_REQUEST——可以處理_POST/_GET/_COOKIE,不安全
$_POST ————返回陣列print_r($_POST['name']),post最安全
$_GET   ————返回陣列, 亂碼處理:傳送時urlencode()接收時urldecode()
$_FILES ————返回陣列為上傳檔案的名稱型別大小等資訊
$_ENV   ————建議不開啟
$_COOKIE ———敏感資訊要加密
$_SESSION———禁止cookie後仍可用session
4.函式:函式名以字母或下劃線開頭(而非數字)。函式名對大小寫不敏感!
function myName() {
  被執行的函式程式碼;//預設return null;
}
5.自定義函式:
遞迴函式-函式不能成為死迴圈
變數函式-md5(123);$a='md5';echo $a(123);
回撥函式-傳入的引數就是函式名:call_user_func(函式名);call_user_func_array(函式名,引數組);
匿名函式-沒有直接的名稱:$a=function(){};
可變引數函式-沒有引數要自己判斷:func_num_args();func_get_args();func_get_arg(index);

五 陣列

表示式:$arr=array(); //陣列列印 print_r($arr);
靜態索引陣列:$arr=array(1,false,'小明'); //$arr=range(low,high,step);
靜態關聯陣列:$arr=array('name'=>'小明','age'=>8); //$a='ok';$arr=compact('a');
動態陣列建立:$arr=array();$arr[]=1;$arr[]=true;$arr['name']='Lily';
二維陣列建立:$arr=array();$a1=array();$a1[]=123;$arr[]=$a1;
增刪改查:增改查$arr[index]; 刪除unset($arr[index]);
陣列遍歷:foreach、list、each

foreach ($arr as $key=>$val) {
    print_r('鍵:'.$key.'值:'.$val.'<p>');
}

六 面向物件 __construct構造方法 __destruct析構方法

其它包含檔案引用:include "xx.php";//沒找到檔案警告 require "xx.php";//沒找到檔案警告並退出

面向物件三大特徵:封裝、繼承、多型 。 (抽象)

<?php
  class Cat{
        public $name;// 每個封裝物件個體使用-例項變數
        public static $num;//需全域性共享使用-靜態變數
//封裝資料3個訪問控制符:預設 全域性訪問public、本類子類訪問protected、本類訪問private
//可自定義set()get()方法訪問protected private屬性,不建議使用魔術方法__set()、__get()
        public function __construct($name)
        {
            Cat::$num+=1;//Cat::self::靜態訪問的方式
            $this->name=$name;//$this指當前物件 不能訪問靜態變數
            echo '構造方法(可參)例項時就立刻呼叫:'.$this->name.'<p>';//構造方法
        }
        public function __destruct()
        {
            echo "析構方法(無參)釋放資源先進後出:".$this->name.'<p>';//垃圾回收
        }
        public static function getNum()
        {
          return Cat::$num;//靜態方法只能訪問靜態變數
        }
    }
    $cat1=new Cat('小白');
    $cat2=new Cat('小花');
    echo  $cat1->name.$cat2->name.Cat::$num.$cat1->getNum().'<p>';
?>
  class Animal {
      public $name;
      public function eat($name){
          $this->name=$name;
          echo $this->name."在動物園吃東西<p>";
      }
  }
  class Cat extends Animal{
     //繼承用extends單繼承,解決程式碼複用問題,預設不自動呼叫父類構造方法,父類允許有的子類也有,子類可以新增或重寫覆蓋
      public function __construct(){
          Animal::eat('構造方法');//Animal::parent::子類訪問父類的方式
      }
  }
    $cat1=new Cat();
    $cat1->eat('小白貓');
    $cat2=new Cat();
    $cat2->eat('小花貓');
class Test{
    //多型的一種實現是過載,過載函式指多個函式名稱相同,引數個數和型別不同
    //php5預設不支援直接過載函式相同名稱函式,須用魔術方法__call()但不建議使用
    public function tests(){
        echo "錯誤的過載函式引數0<p>";
    }
    public function tests($a){
        echo "錯誤的過載函式引數1<p>";
    }
}
    $t=new Test();
    $t->tests();
    $t->tests(1);
abstract class Animal{
    abstract function eat();//abstract只能一致修飾抽象類(不能例項化)和抽象方法(無函式體)
}
interface IUSB{
    const A=90;//interface可以實現多個介面可以有屬性,常量const須賦值且不被改變不修飾控制符
    function start_();//interface只能修飾介面(不能例項化),public修飾方法(無函式體)
}
class Cat extends Animal implements IUSB{
    function eat(){
        echo "抽象類方法繼承<p>";//抽象類的方法必須全部被繼承(extends繼承單個)
    }
    function start_(){
        echo "介面方法實現<p>";//介面的方法必須全部被實現(implements實現多個","隔開)
    }
}
$c=new Cat();
$c->eat();
$c->start_();
echo IUSB::A;
注意:final修飾的類不能被繼承,final修飾的方法不能被重寫覆蓋,final不能修飾變數。

七 列印日誌和錯誤異常處理

//①列印日誌到檔案  
error_log(date("Y-m-d G:i:s")."時間日誌檔案"."\n",3,"xxx.txt"); 
//②if條件判斷檔案錯誤    
if(!file_exists('xxx.txt')){    
    echo '檔案不存在';    
    exit();    
}else{    
    $f=fopen('xxx.txt','r');    
    fclose($f);    
}    
//③使用die判斷檔案錯誤    
file_exists('xxx.txt') or die('檔案不存在');    
//④自定義錯誤處理器和錯誤觸發器    
function error_function($errno,$errmsg){    
    echo "<font color='red'>錯誤號:".$errno."</font>資訊:".$errmsg;//自定義方法    
}    
set_error_handler('error_function',E_USER_NOTICE);//處理器    
if(!file_exists('xxx.txt')){    
    trigger_error('檔案不存在',E_USER_NOTICE);//觸發器    
}
//⑤捕獲異常
function find($name){
   if($name=="xiaomi"){
   throw new Exception("成功");
   }else{
   throw new Exception("查詢失敗");
   }
}
try{
   find('xiaomi');//捕獲到異常後下面程式碼不繼續執行
}catch(Exception $e){
   echo '捕獲:'.$e->getMessage();
}catch(Exception2 $e2){
   echo '捕獲2:'.$e2->getMessage();
}

八 HTTP響應

http請求常見返回碼:200成功、302重新定向、304無修改取快取、404找不到頁面…

設定header

header('content-type:text/html;charset=utf-8');//中文亂碼處理
header("Location:x.php");//立即跳轉html/php檔案
header("Refresh:3;url=http://localhost/demo/x.php");//間隔3秒後跳轉
header("Expires:-1");//頁面過期時間為之前時間則不使用快取一
header("Cache-Control:no_cache");//no-cache,must-revalidate,no-store http1.1告訴客戶端不使用快取二
header("Pragma:no-cache");//相容http1.0告訴客戶端不使用快取三

cookie和session

<?php
setcookie("name","xx",time()+3600);//儲存1小時cookie
setcookie("password",md5("123"),time());//不儲存cookie
setcookie("age","1",time()-1);//刪除cookie
print_r($_COOKIE);//獲取cookie------------------------
?>

<?php
session_start();
$_SESSION['var1']="中華人民共和國CHN";
echo "<a href='p2.php'>下一頁</a><p>";//客戶端支援cookie
echo "<a href='p2.php?".SID."'>下一頁</a>";//客戶端不支援cookie,1.url中傳遞PHPSESSID 2.url中拼接SID 3.配置檔案session.use_trans_sid = 1
?>
//p2.php
<?php
session_start();
echo "session:".$_SESSION['var1'];//獲取session----------
?>

頁面抓取curl

<?php
//post("https://www.baidu.com/",null,false);//get或post
function post($url, $data,$isPost) {
    //頁面抓取-初使化init方法
    $ch = curl_init();

    //指定URL
    curl_setopt($ch, CURLOPT_URL, $url);
    //設定請求後返回結果
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    if($isPost) {
    //宣告使用POST方式來進行傳送,不是POST不呼叫!!!
        curl_setopt($ch, CURLOPT_POST, 1);
    //使用POST傳送資料字元或陣列,不是POST不呼叫!!!
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }

    //忽略證書
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    //忽略header頭資訊
    curl_setopt($ch, CURLOPT_HEADER, 0);
    //設定超時時間
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);

    //傳送請求
    $output = curl_exec($ch);
    //關閉curl
    curl_close($ch);

    //返回資料
    print_r($output);
}
?>

檔案下載

<?php
/**檔案下載:$file_name檔名 $file_path資料夾路徑
 */
function fileDown($file_path,$file_name){
    $file_name=iconv("utf-8","gb2312",$file_name);//轉碼中文檔名
    $file_path=$_SERVER['DOCUMENT_ROOT'].$file_path.$file_name;//指定虛擬機器絕對路徑
    file_exists($file_path) or die("檔案不存在!");//判斷檔案是否存在
    $file=fopen($file_path,"r");//如果存在開啟檔案 r:讀 w+:寫 a+:加
    $file_size=filesize($file_path);//獲取檔案大小


    header("Content-type:application/octet-stream");//說明是一個檔案流
    header("Content-Length:".$file_size);//說明檔案大小
    header("Content-Disposition:attachment;filename=".$file_name);//說明檔名


    $buffer=1024;
    while(!feof($file)){//!feof()檔案沒有結束
        $filedata=fread($file,$buffer);//fwrite($file,"寫入")
        echo $filedata;//返回資料
    }
    fclose($file);//關閉檔案
}
//file_put_contents($_SERVER['DOCUMENT_ROOT']."/xx.txt","\r\n寫入資料");//寫入檔案
//file_get_contents($_SERVER['DOCUMENT_ROOT']."/xx.txt");//讀取檔案
//if(!copy($_SERVER['DOCUMENT_ROOT']."/xx.txt","d://yy.txt")){
//    echo "複製檔案失敗";
//}else{
//    echo "複製檔案成功";
//}
fileDown("/demo/","a.jpg");//下載 exit()
?>

檔案上傳

<?php
/**檔案上載:$file_path資料夾路徑
 */
header("content-type:text/html;charset=utf-8");
function fileUp($file_path){
    if($_FILES==null||$_FILES["myfile"]["error"]!=0){
        echo "檔案錯誤或檔案過大";
        return;
    }
    $size=$_FILES["myfile"]["size"];
    $tname=$_FILES["myfile"]["tmp_name"];
    $name=$_FILES["myfile"]["name"];
    $file_path=$_SERVER["DOCUMENT_ROOT"].$file_path;
    $out_path=iconv("utf-8","gb2312",$file_path.$name);//轉碼中文檔名
    if(!is_dir($file_path)){
        mkdir($file_path,0777,true);//建立多級檔案目錄
    }
    if(is_uploaded_file($tname)){
        if(move_uploaded_file($tname,$out_path)){
            echo "檔案上傳成功";
        }else{
            echo "檔案上傳失敗";
        }
    }else{
        echo "檔案不支援";
    }

}
fileUp("/file/");//上傳
?>
九 MySQL MySQLi擴充套件
<?php
//  phpinfo();//php配置資訊
    $conn=mysql_connect("localhost","root","root");//mysql方式開啟連線(建議用mysqli or PDO方式)
    if(!$conn){
        die("連線失敗fail".mysql_error());
    }else{
        echo "連線成功success<p>";
    }
    mysql_select_db("mysql",$conn) or die(mysql_error());//選擇一個數據庫
    mysql_query("set names utf8");//操作全部按照utf8碼
    $sq1="select * from user";//查詢表
//    $sq1="insert into user (User,Password) values ('abc',md5('123'))";//增加表
//    $sq1="delete from user where User='abc'";//刪除表
//    $sq1="update user set Password='111' where User='abc'";//修改表
    $res=mysql_query($sq1,$conn);//執行返回資源型別dql語句或bool型別dml語句
    if(mysql_affected_rows($conn)>0){
        echo "操作成功<p>";
    }else{
        echo "沒有變動<p>";
    }
    if(is_bool($res)) return;//如果是bool型別不繼續執行
    while($row=mysql_fetch_row($res)){//mysql_fetch_row索引陣列,mysql_fetch_assoc關聯陣列
    foreach($row as $k=>$v){
        echo $k."=".$v."\t";
    }
        echo "<p>";
    }
    mysql_free_result($res);//必須釋放資源
    mysql_close($conn);//系統會自動關閉連線
?>
<?php
    $conn=new mysqli("localhost","root","root","mysql");//mysqli面向物件方式開啟連線 推薦
    if($conn->connect_error){
        die("連線失敗fail".$conn->connect_error);
    }
    $conn->query("set names utf8");//操作全部按照utf8碼
    $sq1="select * from user";//查詢表
//    $sq1="insert into user (User,Password) values ('abc',md5('123'))";//增加表
//    $sq1="delete from user where User='abc'";//刪除表
//    $sq1="update user set Password='111' where User='abc'";//修改表
    $res=$conn->query($sq1);//執行返回資源型別dql語句或bool型別dml語句
    if($conn->affected_rows>0){
        echo "操作成功<p>";
    }else{
        echo "沒有變動<p>";
    }
    if(is_bool($res)) return;//如果是bool型別不繼續執行
    while($row=$res->fetch_assoc()){//fetch_row索引陣列,fetch_assoc關聯陣列
        foreach($row as $k=>$v){
            echo $k."=".$v."\t";
        }
        echo "<p>";
    }
    $res->free();//必須釋放資源
    $conn->close();//關閉連線
?>

mysqli批量操作、事務控制(原子性、一致性、隔離性、永續性)、預處理技術:

<?php  
header("content-type:text/html;charset=utf-8");  
$conn=new mysqli("localhost","root","root","mysql");//mysqli面向物件方式開啟連線 推薦  
if($conn->connect_error){  
    die("連線失敗fail".$conn->connect_error);  
}  
$conn->autocommit(false);//InnoDB結構型別可使用事務控制  
$conn->query("set names utf8");//操作全部按照utf8碼  
$sq1="select * from user;select * from func";//查詢表  
//    $sq1="insert into user (User,Password) values ('abc',md5('123'))";//增加表  
//    $sq1="delete from user where User='abc'";//刪除表  
//    $sq1="update user set Password='111' where User='abc'";//修改表  
$res=$conn->multi_query($sq1);  
if($conn->affected_rows>0){  
    echo "操作成功<p>";  
}else{  
    echo "沒有變動<p>";  
}  
if($res){  
    if(stristr($sq1,"select *")){//查詢  
        do {  
            $result = $conn->store_result();//先取出一個結果集  
            while ($row = $result->fetch_row()) {//fetch_row索引陣列,fetch_assoc關聯陣列  
                foreach ($row as $k => $v) {  
                    echo $k . "=" . $v . "\t";  
                }  
                echo "<p>";  
            }  
            $result->close();//必須釋放資源  
        }while($conn->more_results()&&$conn->next_result());  
    }  
    $conn->commit();//成功將多個事務提交  
    echo "成功";  
}else{  
    $conn->rollback();//失敗事務全部回滾  
    echo "失敗回滾";  
}  
$conn->close();//關閉連線  
?>  

<?php
$conn=new mysqli("localhost","root","root","mysql");//mysqli面向物件方式開啟連線 推薦
if($conn->connect_error){
    die("連線失敗fail".$conn->connect_error);
}
$conn->query("set names utf8");//操作全部按照utf8碼
$sq1="select host,user from user where select_priv=?";//查詢表
//    $sq1="insert into user (User,Password) values ('abc',md5('123'))";//增加表
//    $sq1="delete from user where User='abc'";//刪除表
//    $sq1="update user set Password='111' where User='abc'";//修改表
$Select_priv="Y";
$stmt=$conn->prepare($sq1);//開啟預處理
$stmt->bind_param("s",$Select_priv);//繫結引數s字元,i數字,d小數
$stmt->bind_result($host,$user);//繫結查詢結果
$stmt->execute();//執行
if($conn->affected_rows>0){
    echo "操作成功<p>";
}else{
    echo "沒有變動<p>";
}
while($stmt->fetch()){
    echo ("$host:$user<p>");
}
$stmt->free_result();//釋放資源
$stmt->close();//關閉預編譯
$conn->close();//關閉連線
?>

十 過濾器

<?php
header("Content-type:text/html;charset=utf-8");
//數值範圍過濾器
$var=30;
$int_options = array(
    "options"=>array(
        "min_range"=>0,   //最小值
        "max_range"=>256  //最大值
    )
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) {
    echo("不是一個合法的整數");
} else {
    echo("是個合法的整數");
}
//自定義函式過濾器
function convertSpace($string){
    return str_replace("_", ".", $string);
}
$string = "www_xx_com";
echo filter_var($string, FILTER_CALLBACK,array("options"=>"convertSpace"));
//表單傳值過濾器
$filters = array(
    "name" => array(
        "filter_has_var"=>FILTER_SANITIZE_STRING),
    "age" => array(
        "filter_has_var"=>FILTER_VALIDATE_INT,
        "options"=>array(
                "min_range"=>1,
                "max_range"=>120)),
    "email"=> FILTER_VALIDATE_EMAIL
);
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"]) {
    echo("年齡必須在 1 到 120 之間。<br>");
}elseif(!$result["email"]){
    echo("E-Mail 不合法<br>");
}else{
    echo("輸入正確");
}
?>