日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

细说php入门学习

發布時間:2023/12/10 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 细说php入门学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. php基本語法
  • 2. 變量
  • 3. 數據類型
    • (1). 整型 interger
    • (2). 浮點型 float
    • (3). 布爾型 boolean
    • (4) 字符串 string
    • (5). 數組 array
    • (7). 對象 boject
    • (8). 資源 resource
    • (9). 空null
  • 4. 常見函數以及基本語法
    • (1). 三種常見函數
    • (2). 四種常見輸出
    • (3). 自動類型轉換
    • (4) .強制類型轉換
    • (5) . 常量
    • (7). 運算符
  • 5.流程控制
    • (1) 分支結構 if / switch
    • (2). 循環結構
        • 1.while循環結構
        • 2.doWhile 循環
        • 4.for循環
        • 5.混合寫法:
        • 6.多重循環
        • 7.流程控制符
  • 6. 函數function
    • (1).函數命名規范
    • (2) . 函數返回值
    • (3). 參數
    • (4). 變量作用域
    • (5). 靜態變量
    • (6). 自定義函數
  • 7. 數組 array
    • (1).定義格式:
    • (2).遍歷數組
    • (3). 指針函數
    • (4). 預定義數組
  • 8. 正則
  • 9. 時間
  • 10. 錯誤
    • (1) 錯誤的三種領域
    • (2).錯誤級別
    • (3). 屏蔽錯誤
    • (4). 自定義報錯
    • (5). 邏輯錯誤
  • 11. 文件
    • (1) 文件屬性: 常見分類
    • (2) 文件分類
    • (3). 文件路徑
    • (4)文件-目錄-操作
    • (5) . 文件加載
    • (6) 遞歸函數
    • (7) 文件內容 文件操作
    • (8) 接收上傳內的文件
    • (9) 驗證
    • (10) 高頻率 uuid 設置唯一的id
    • (11) 文件下載
  • 12 .面向對象
    • (1) 對象
    • (2) 偽對象 $this
    • (3) 連貫操作 OOP
    • (4)魔術方法
    • (5) PDO 操作數據庫 ( 數據庫抽象層 )

1. php基本語法

  • php 服務器語言

    • 服務器: Apache服務器
    • PHP文件: 存放wamp/www目錄
  • 訪問方式

    • 只能通過瀏覽器訪問,訪問地址**: lcoalhost**

    • 代表訪問本地服務器

  • PHP是什么?

    • 超文本預處理器

    • 一句話: 一種用來開發動態網站的服務器腳本語言

  • PHP文件

    • 格式: ***.php
  • 定界符

    • <?php php代碼 ?>
  • 注釋

    • // 單行

    • #單行

    • /* 多行 */

  • 設置編碼

    • header( 'content-type: text/html; charset-編碼 ')
  • PHP基本語法

    • 每一條PHP命令均已分號結尾.發表該php命令結束其中,最后一條命令可以省略分號,推薦加上分號

    • php報錯 不是當前行 就是上一行

  • 2. 變量

  • 含義: 變量理解為數學中的未知數

  • 聲明變量:

    • 格式: $變量名=值

    • 內存: 一旦申明一個變量,就會占用一定的內存
      + 當程序結束,沒有人在引用變量時,就會被刪除

      + 注意點: 若變量沒有值,則被稱之為未定義變量,該變量會報錯.
  • 變量命名規范

    • 有數字,字母和下劃線組成
    • 不能以數字開頭
    • 支持中文., 但不推薦
    • 變量名要有意義
  • 可變變量

    • 將一個變量的值,作為另一個變量名來使用
    $name = '山雞'; $山雞 = '烏雞'; $烏雞 = '嗚嗚嗚'; echo $$$name;則會輸出 : 嗚嗚嗚
  • 引用變量值:

  • 傳值

    $a = 100; $b = $a; $b = 200; echo $a,$b 這時,$a=100 $b=200; 傳的是值所以$a不改變
  • 傳址 &

    $a = 100; $b = &$a; $b = 200; echo $a,$b 這時,$a=200 $b=200; 傳的是址所以$a改變
  • 3. 數據類型

    1. 標量類型
    int整型
    float浮點型
    bool布爾型
    string字符串
    2. 復合類型
    array數組
    boject對象
    3. 特殊類型
    resource資源
    nul
    判斷是否為某種類型
    is_string ( 變量)判斷是否為字符串
    is_numeric( 變量)判斷是否為數字字符串
    is_scalar( 變量)判斷是否為標量
    is_int( 變量 )判斷是否為整型
    is_float(變量)判斷是否為浮點型
    is_array( 變量)判斷是否為數組
    is_object( 變量)判斷是否為對象
    is_resource( 變量)判斷是否為資源

    (1). 整型 interger

    最大整型: PHP_INT_MAX 超過最大整型轉為浮點型.

    進制基數前綴
    二進制0-10b
    八進制0-70
    十進制0-9
    十六進制0-9 a-f0x

    進制轉換:

  • 任意進制—> 十進制:
    基數 * 進制 ^ 次方

  • 十進制—> 轉任意進制
    將十進制除以 任意進制, 結果到倒取余


  • (2). 浮點型 float

    浮點型:

    • 小數

    • 科學計數法 2e3 2e4 …3*10 的3次方…

    • 浮點數不適合做運算

    • 有效位數: 從前向后,第一個非0數字開頭, 向后保留14位.

    (3). 布爾型 boolean

  • 布爾型 bool 的值:

    • true 對,肯定.是,1,可以…

    • false 錯,否認,否,0,不可以…

    • 作用: 當運算不能直接表達, 一般會使用bool來表達狀態

  • 有 七種 值與false等價:
    false
    0
    0.0
    ‘’ , ‘0’
    null
    空數組
    未定義的變量

    (4) 字符串 string

  • 格式:

  • 單雙引號 : 單雙引號的共同特性: ( 單雙引號可以互插,不能自插. )
    單引號:

    • 不解析變量

    • 不解析轉義字符,但解析轉義轉義字符.

      + 轉義符: \ + 常見轉義: \n 換行 \r 回車 \t 制表符 Tab + 轉義 轉義字符+ \' 普通單引號+ \" 普通雙引號+ \\ 普通斜杠+ \$ 普通$符,不再有變量聲明的意義了

      ?

  • 雙引號:
    • 解析變量 變量最好用{}包起來
    • 解析轉義字符
      ?
  • heredoc結構

    $a = <<<xxoo輸出多行文字或者什么的時候的是可以利用heredoc排版<table><caption></caption><tr></tr></table> xxoo;
  • (5). 數組 array

  • 定義: 容器,可以容納任意數據

  • 聲明:

  • 格式1: $變量名[ ] : 值
  • 格式2: $變量名 = [ 值1, 值2 , …]
  • 格式3: $變量名 = array(值1,值2,…)
  • 組成:

  • 數組是由鍵和值 組成

  • 數組的鍵: int 或者 string

    ? 鍵的別名: 偏移量 下標 索引

  • 數組的值: 任意類型的值

  • 操作數組:

    • 讀取: 通過鍵來讀取數組的值
    • 修改: 通過已有的鍵 來修改數組的值
    • 新增: 通過沒有的鍵 來新增數組的值
    • 刪除: 通過unset( )函數來刪除值
  • (7). 對象 boject

  • 一切皆對象

  • 簡單獲取一個對象

    $obj = new stdclass;

    var_dump($obj);

  • (8). 資源 resource

  • 任何文件都是資源

  • 簡單獲取一個資源

    fopen( 文件路徑, 文件打開方式 r 只讀 w寫入)

  • (9). 空null

  • 什么都沒有過,占有內存,但內存中沒有具體內容
  • 常用與占位
  • echo 不能輸出null
  • 以下有三種情況直接null
  • 直接賦值 null
  • 未定義的變量
  • 被刪除的變量 nuset
  • 4. 常見函數以及基本語法

    (1). 三種常見函數

    在PHP中: 如果只是為了輸出一句話
    ? <?php echo 內容 ?> 簡化為 <?= 內容 ?>

    三種常見函數功能返回值
    empty(變量 )判斷一個變量是否為空( 只要與false等價,都為空)空 => true // 非空 => false
    isset(變量 )判斷一個變量是否設置,
    (只有null 和 未定義變量是沒有設置過的)
    設置 => true // 未設置=> false
    unset(變量 )刪除變量, 從而釋放內存返回值: 無

    內存 注意點:

  • 每定義一個變量,系統就會分配一個內存給變量
  • 當內存沒有被任何變量引用時,就會自動釋放
  • 函數: 一個函數沒有返回值時, 強行接收, 則只會接收到null
  • (2). 四種常見輸出

  • echo

    • 支持intfloat, string, resource 的輸出
    • 屬于 語法結構, 不是函數
  • print 或 print( )

    • 支持int,float,string,resource的輸出

    • print 語法結構

    • print( ) 函數

      ? 返回值: int

  • print_r( );

    • 除了bool 和null 不能輸出,其余都可以輸出
    • 函數,返回值:bool
    • 輸出理論無限制,實際受限于內存
  • var_dump

    • 支持 任意類型
    • 函數,返回值:無
    • 輸出有上限
  • 小結:

    ? print_r 適合大批量數據輸出

    ? var_dump 僅僅用于測試, 信息全面(文件地址,行高,數據類型,值,長度)

    (3). 自動類型轉換

    • 弱類型語言: 支持隱式轉換

    • 強類型語言: 不支持隱式轉換

    • 隱式轉換: 偷偷將數據類型 進行轉換

    • PHP 屬于 弱類型語言

    (4) .強制類型轉換

  • 臨時轉換

    只是暫時將變量類型轉為其他類型,但本聲不變.

    運算符強制轉換
    (bool)$str布爾型
    (int)$str整型
    (float)$str浮點數
    (string)$str字符串
    (array)$str數組
    (object)$str對象
    函數強制轉換
    intval($str)整型
    floatval($str)浮點型
    boolval($str)浮點型
    strval($str)字符串
  • 永久轉換

    settype ( 變量 , 類型 )

  • (5) . 常量

  • 經常不變化的量,即為常量.

  • 注意點:

  • 嚴格區分大小寫,推薦大寫
  • 常量不能重新賦值
  • 常量不能重新定義
  • 格式: const 常量名 = 常量值

  • 格式: define ( 常量名, 常量值 , bool ) bool值確認是否區分大小寫.

  • 預定義常量

    預定義常量功能
    PHP_INT_MAX最大整型數
    M_PI圓周率
    PHP_OS當前PHP所在系統
    PHP_VERSION當前PHP版本
  • 魔術常量

    預定義常量
    __DIR__獲取當前文件的所在目錄
    __FILE__獲取當前文件的盤符路徑
    __LINE__獲取當前行號
  • (7). 運算符

  • 算數運算符

  • + - * / % 加減乘除取余.

  • 余數 % 除了求余之外,還有2種特殊功能

  • 余數的正負: 取決于 第一位的正負

  • 取余的范圍: %x 結果: [ 0 ,x )

    結果范圍 x ~ y0 ~ y-x %(y-x+1)+x------------------x ~ y 結果: %(y-x+1) + x 求奇偶數 余數為0 即為偶數余數為1 即為奇數結束范圍: 0~1%2 1. 求任意數字的 個位數 0 ~ 9$a = 123;var_dump( $a % 10 ); 101次方2. 求任意數字的 最后兩位 00 ~ 99$a = 123;var_dump( $a % 100 ); 102次方3. 求任意數字的 最后n為 %10的n次方
  • 自增\自減

    • ? ++ 變量a 自己給自己+1
      a++ 先返回a 在給a+1
      ++a 先給a+1 在返回a

    • ? – 變量自己給自己-1
      a-- 同上
      –a 同上

  • 字符串拼接

    • 拼接符 . 小數點

    • 主要用于:

      • 字符串.變量
      • 變量.字符串
      • 變量.變量
    • 單引號的速度 比 雙引號的塊

    • 為了整個項目的運行速度考慮:

    • ? 如果變量較少,推薦用單引號,變量用拼接

    • ? 如果變量較多,使用雙引號,變量用{} 包起來

  • 賦值運算符

    賦值運算符含義
    =將 = 右邊的 賦給 左邊的
    +=a += b ==> a = a + b
    -=同上
    *=同上
    /=同上
    %=a .= b ==> a = a . b
  • 比較運算符

    比較運算符含義 注意點: 所有的比較結果: 都是bool值
    > >=大于 大于等于
    < <=小于 小于等于
    ==判斷兩邊的值是否相等
    ===全等: 判斷兩邊的值是否相等 且 數據類型相等
    !=判斷兩邊的值 是否不等
    !==不全等: 只有全等時為false, 其余都是true
  • 邏輯運算符

    邏輯運算符含義: 注意: 所有的邏輯運算符結果都是: bool值
    邏輯與 &&兩邊為真即為真, 一邊為假即為假
    邏輯或一邊為真即為真, 兩邊為假即為假
    邏輯非 !真即是假, 假即是真
  • 三元運算符

    三元運算符
    ++ – ! …等一元運算符
    + - * / % …等二元運算符
    條件表達式 ? true環境 : false環境三元運算符:僅僅適合 做一些簡單判斷
  • 5.流程控制

    (一). 順序結構 : 代碼從上往下依次執行

    (二). 分支結構 : 通過 if /switch 進行分支選擇

    (三). 循環結構 : 將一些功能 不斷重復去執行

    (1) 分支結構 if / switch

    分支結構: 具有跳過某一段代碼的功能

    if 分支結構

    分支寫法1: if ( 條件表達式 ) true環境1 //不用加{} 條件僅僅只能影響緊跟在if后面的一條命令分支寫法2: if ( 條件表達式 ){true環境 } //條件僅僅能影響后面 {} 內的所有代碼.分支寫法3: if ( 條件表達式 ){true環境 }else{false環境 } // 條件為真時,則進入true環境,否則進入false環境分支寫法4: if ( 條件表達式1 ){true環境1 }elseif( 條件表達式2 ){true環境2 }elseif( 條件表達式3 ){true環境3 }... // 從多個表達式中,選擇一個滿足( 符合先來后到的原則 )分支寫法5: 巢狀分支. if ( 條件表達式1 ){if ( 條件表達式2 ){if ( 條件表達式3 ){...}} }

    switch分支結構

    switch( 標志 ){case '標志1': 代碼塊; break;case '標志2': 代碼塊; break;case '標志3': 代碼塊; break;case '標志4': 代碼塊; break;....default 代碼塊; }//不寫break 則匹配到符合條件 后的所有case都會執行寫上break 則只會執行符合條件的一條代碼.如果沒有找到標志, 則會執行 default

    (2). 循環結構

    1.while循環結構

    ? while( 條件表達式 ){
    ? 代碼塊
    ? }

    • 如果條件為真 -> 則執行1次 代碼塊 -> 再回到條件表達式 -> 再次判斷條件 真 -> 再執行1次代碼塊 …
    • 當條件為假 -> 立馬結束循環 -> 準備執行循環外的代碼
    $i=0; while($i<10){echo $i;$i++; } //輸出 123456789

    2.doWhile 循環

    while 和dowhile的區別

    • while 先條件判斷,在決定是否執行代碼塊
    • dowhile 先執行一次代碼塊,在條件判斷,然后決定是否執行代碼塊
    doWhile循環 do{代碼塊1 }while( 條件2 )執行順序 1 2 12 12 注意點: 如論條件是否成立至少會執行一次代碼塊

    4.for循環

    ?for循環

  • 格式: for( 初始值1; 循環條件2; 循環增量3){
    ? 代碼塊4
    ? }

  • 執行順序
    1 243 243 243
    當條件2 為假時,則結束循環

  • 初始位置和增量位置 可以不寫值

  • for($i=0; $i<10; $i++){echo $i; } //輸出 0123456789

    5.混合寫法:

    以下所有寫法,都是在html代碼塊中寫的. 1.forHTML 混合寫法<?php for( ): ?>html原生代碼<?php endfor ?> -------------------------------------- 2.ifHTML 混合寫法<?php if( ): ?>html原生代碼<?php endif(): ?> --------------------------------------<?php if( ): ?>html代碼 true<?php else( ): ?>html代碼 false<?php endif ?> ----------------------------------<?php if( ): ?>html原生代碼 true<?php elseif( ): ?>html原聲代碼 true<?php elseif( ): ?>html原生代碼 true...<?php endif ?>

    6.多重循環

    多重循環: 在循環中 嵌套循環

    7.流程控制符

  • break

    立馬結束分支/循環,準備執行分支/循環外的代碼

  • continue

    立馬結束當前一輪的循環,準備進行下一輪循環.

  • for 碰到 cotinue,立馬進入增量3
  • while 碰到 continue,立馬進入條件判斷
  • die /exit

    立馬結束程序,die之前的代碼依舊執行

  • die ( 內容 )
  • exit ( 內容 ) 在結束程序之前,在輸出一次內容
  • 6. 函數function

  • 作用 : 用函數封裝一些功能, 重復利用

  • 函數分類:

    • 系統函數: 數學,字符串,數組,其他函數等
    • 自定義函數: 根據用戶需求來封裝函數
  • 自定義函數: ( 聲明 )

    • 格式:

      function 函數名 ( 參數 ){

      ? 代碼塊

      }

    • 組成:

      • 關鍵字: function
      • 函數名 : 要有意義 ( 動詞+ 名詞)
      • ( ): 聲明函數時的參數, 稱之為形式參數, 簡稱形參
      • { }: 函數體代碼塊, 函數功能具體代碼
    • 特性:

      函數不調用不執行

      函數一旦調用,name函數執行之后,會返回到調用函數的地方

    • 小結:

      功能相似, 位置相同 ,用 循環

      功能相似, 位置不同, 用函數

    • 調用函數:

      函數名( )

      函數名 ( 實參 )

  • (1).函數命名規范

  • 命名規范

  • 由數字,字母和下劃線組成
  • 不能以數字開頭
  • 不區分大小寫
  • 命名形式

    • 駝峰命名法

      從第二個單詞開始,首字母大寫

      function addUserName( ){ }

    • 帕斯卡命名法

      每個單詞首字母都大小 ( 大駝峰 )

      function AddUserName( ){ }

    • 下劃線命名法

      function add_user_name( ){ }

  • 函數名不能重名

    function var_dump(){ }

    函數名不能重名包括系統函數和自定義的函數.

  • 函數名要有意義

    看到函數名 就大致能猜出是什么意思

    多個單詞組成的函數名: 動詞 + 名詞

    ? getName( )

    ? sendMsg( )

    ? setInfo( )

  • (2) . 函數返回值

  • 關鍵字: return

  • 無return: 當函數的代碼塊全部執行, 會自動返回到調用函數的地方,沒有返回值(自然結束) 若強行接收返回值,則得到null

    有return : 當函數的代碼塊執行到return時,則立馬返回到函數調用的地方,返回return值(提前結束)

  • 返回值的類型

    可以返回任意類型

  • 如何返回多個值

    將多個值存入一個數組中,最終返回數組幾個.

    在外面通過數組一個一個取出

    function demo3(){$a = 10;$b = 10.5;$c = [$a, $b];return $c; }
  • (3). 參數

  • 形參: 在聲明函數時給的參數 parameter

  • 實參: 在調用函數時給的參數 argument

  • 參數個數差異會有何種不同

  • 實參個數 = 形參個數 完美

  • 實參個數 > 形參個數

    多余的實參被拋棄,

    形參已按照先來后到的原則進行接收

  • 實參個數 < 形參個數

    多余的形參: 1.被當成未定義的變量 會報錯

    ? 2.采用默認值

  • 實參個數不確定時???

    計算器: 多個數字進行累加

    形參 一個都不要寫

    通過幾個函數來處理所有的實參

    函數功能
    func_get_args( )以數組的形式接受所有的實參
    func_get_arg( n )值接受下標為n 的實參
    func_num_args( )獲取實參的總個數
    function demo4(){$sum = 0;$total = func_num_args();for ($i=0; $i < $total; $i++) { $sum = $sum + func_get_arg($i);}echo $sum; }
  • (4). 變量作用域

    變量作用域: 變量只能在指定的區域 起作用

  • 全局變量: 在函數外部定義的變量

  • 局部變量: 在函數內部定義的變量

    注意:
    ? 默認情況下:
    ? ①. 全局變量 不能在局部環境中使用
    ? ②. 局部變量 不能在全局環境中使用

    ? 特殊情況下:
    ? ①. $GLOBALS[ 變量名 ]
    ? 可以在任意環境中使用, 該變量名 只能是全局環境中的變量

    ? ⑤. global 變量
    ? 該變量可以在函數外部直接使用

  • $a = 10; //全局變量 function demo1(){global $b;$b = 20; //局部變量echo $GLOBALS['a']; //通過 $GLOBALS[ 全局變量名 ] 即可在局部環境中使用 全局變量 } demo1();// 在全局環境中, 可以輸出 global修飾的 局部變量 echo $b;

    (5). 靜態變量

  • 關鍵字 : static
  • 定義: 在函數結束時,不會被刪除,當下一次在調用次函數時,可以獲取上一次靜態變量值.
  • 僅限于函數內部使用
  • function demo2(){static $b = 50;echo $b.' ';$b++; }demo2(); 50 demo2(); 51 demo2(); 52...

    (六). 函數技巧

    變量技巧可變變量: 將一個變量的值 作為另一個變量名 來使用引用變量 函數技巧可變函數: 將一個變量的值 作為函數名 來使用引用函數: 通過 &符 將內存地址賦予 // 引用函數例: function demo3(&$x){$x++;echo 'x = '.$x.'<br>'; }$b = 20; demo3($b); echo 'b = '.$b.'<br>';

    (6). 自定義函數

    小技巧:
    做任何功能, 考慮以下幾點

    1. 函數名 2. 參數 幾個形參形參要不要默認值 3. 核心功能如果 核心需要 參數配合, 其余數值配合, 可以先做 模擬數據 4. 補充缺什么參數, 補什么參數缺什么值, 補什么值

    7. 數組 array

    (1).定義格式:

    array(=> 值key => value,key => value,...key => value, )
  • 鍵: 只有int 或 string .

    如果設置鍵為 float ,bool等其他類型,則會強制轉為int 或string.

    鍵的別名: 下標 偏移量 索引, index offset

  • 值: 任何類型

  • 分類

    索引數組: 鍵為 int

    關聯數組 : 鍵為 string

  • 格式:

    $數組名[鍵] = 值

    $數組名 = [ 鍵1=> 值1, 鍵2 => 值2 ,…]

    $數組名 = array( 鍵1=> 值1, 鍵2 => 值2 ,…)

  • 小結

  • true = 1 = 1.x //等價 false = 0 = 0.0 = '0' = 0.x null = '' = 未定義變量非法下標:數組對象
  • 多維數組

    在數組中, 值設為數組,即為多維數組

  • (2).遍歷數組

  • 基本遍歷方法: for while doWhile

  • 指針遍歷方式: foreach

  • 指針遍歷: 不需要考慮初始值, 不需要考慮增量, 不需要考慮條件

    只能接受當前一輪的鍵 , 每一次循環, 都只能接收一個鍵或值

    擅長遍歷 非索引,非規律數字的數組 foreach( 數組名 as=>){代碼塊 }若只需要值, 不需要用鍵, 可以簡化寫法 foreach( 數組名 as){代碼塊 }
  • ?

    (3). 指針函數

    函數名功能
    current( )獲取當前指針所指向的值
    key( )獲取當前指針所指向的鍵
    next( )將指針 下移一位
    prev( )將指針 上移一位
    reset( )將指針重置到第一位
    end( )將指針重置到最后第一位
    each( )獲取當前指針的鍵和值, 且下移一位

    一旦超出范圍, 是無法通過next 或 prev 返回數組中

    next 和 prev 相對性的 移動指針

    解決方案: 通過 reset 或 end 回到數組中

    (4). 預定義數組

    php系統預先定義好的"數組".

    預定義數組名功能
    $GLOBALS獲取全局環境中所有可用的變量 (超全局變量)
    $_GET接收所有以get方式傳遞過來的值
    $_POST接收所有以post方式傳遞過來的值
    $_FILES用于接收上傳的文件
    $_COOKIE存儲瀏覽器端的cookie
    $_SESSION存儲服務器端的session
    $_REQUEST接收get, post 和cookie 的值
    $_SERVER存儲服務器相關的信息. 例如: 服務器名, 地址, 參數, 協議, IP …
    $_SERVER的數組中
    下標描述
    HTTP_HOST主機名
    HTTP_USER_AGENT終端, 瀏覽器信息
    REMOTE_ADDR客戶端IP
    SERVER_ADDR服務器IP
    SCRIPT_FILENAME腳本地址( 盤符 )
    SCRIPT_NAME腳本地址( 網址 )
    REQUEST_METHOD請求方式
    REQUEST_URI請求地址 (帶參數)
    QUERY_STRING請求參數

    字符串可以當索引數組來用.

    0123456 $a = 'abcdefg';訪問 字符c echo $a[2]; echo $a[6];超出范圍, 返回 空字符串 衍生: 遍歷字符串時, 得到 空字符串, 則證明字符串已經遍歷完了 echo $a[999]; var_dump($a[999]);

    8. 正則

  • 正則表達式 含義 : 用某種模式去匹配字符串的一個公式
  • 功能:由正規字符查詢 替換操作
  • 組成: 有正規字符和一些特殊字符構成
  • /^[0-9]+abc$/ 1.定界符 / 2.開始標志 ^ 3.[0-9]原子 4.元字符 5.abc原子
  • 可見原子:

    unicode編碼表中用鍵盤輸出后肉眼可見的字符

  • 標點;“‘ _ ? . 等等
  • 英文字母數字 a-z,A-Z,0-9
  • 漢字、日文、阿拉伯文等其他語言文字
  • Σ θ ∈ ≌ 等數理化公式符號
  • 其他可見字符
  • 不可見原子:

    unicode編碼表中用鍵盤輸出后肉眼不可見的字符

  • 換行, 回車,制表符,空格. 與其他不可見元素
  • 元字符

  • | 元字符:

  • 原子的篩選方式
    |匹配兩個或者多個分支選擇
    []匹配方括號中任意一個原子
    [^]除了括號內的不可匹配,[]外匹配任意一個原子
    2. 原子歸類
    .匹配除了換行符之外的任意字符
    \d匹配任意一個十進制數字 [0-9]
    \D匹配任意一個非十進制數字 [ ^0-9]
    \s匹配一個不可見原子 [\n\t\r]
    \S匹配一個可見原子 [ ^\n\t\r]
    \w匹配任意一個數字字母或下劃線 [0-9a-zA-Z]
    \W匹配任意一個非數字字母或下劃線 [ ^ 0-9a-zA-Z]
    3. 量詞{n} 表示其前面的一個原子恰好出現n次
    {n,} 表示其前面的一個原子最少出現n次
    {n,m} 表示其前面的一個原子最少出現n次,最多出現M次.
    * 匹配0次,1次,或者多次其前面的原子 {0, }
    + 匹配1次或者多次其前面的原子 {1, }
    ? 匹配0次或者1次 其前面的原子 {0,1}
    4. 邊界控制, 模式單元, 模式選擇符
    ^ 匹配字符串開始位置
    $ 匹配字符串結尾位置
    () 匹配其中的整體為一個原子
    ( | ) 匹配其中的兩個或更多的選擇之一, 分隔多選一模式
    5. 模式修正符 在定界符的后面
    貪婪匹配 U 匹配結果存在歧義時,取其長 例: .*/U
    懶惰匹配 U 匹配結果存在歧義時,取其短 .*?/U
    忽略空白 X 匹配結果忽略空白
    大小寫匹配 i 匹配結果不區分大小寫
  • 單次匹配函數

    preg_match( 正則, 對象, 結果) 結果是一個數組 返回每個匹配到的原子 返回值時1或者0
    ? 參數:
    ? 正則: 根據需求設計正則
    ? 對象: 將對象匹配正則
    ? 結果: 以數組形式接收 匹配的結果, 可省略

    返回值: 成功的匹配的次數
    成功: 1次
    失敗: 0次

    常用于: 判斷是否匹配成功

  • 匹配全部函數

    • preg_match_all( 正則, 對象 [,結果])
    • 返回值: 匹配的次數
      ? 成功: >= 1
      ? 失敗: = 0
      ?
  • : 只獲取字符串中的所有漢字 \x{4e00} ~ \x{9fa5} $preg = '/[\x{4e00}-\x{9fa5}]/u'; $total = preg_match_all($preg, $str, $result );
  • 正則替換函數

    • preg_replace( 正則, 替換值, 對象 )
    • 常用于敏感字等…
  • : $str = 'MMP, 你是不是腦殘啊, 腦子是不是不好使啊, MMP';敏感詞庫 $keywords = ['MMP', '腦殘']; 替換敏感字 占用了幾位就幾個星星 foreach($keywords as $v){1. 統計占幾位$num = preg_match_all('/./u', $v);2.* 重復 num次$star = str_repeat('*', $num);3. 替換敏感詞$str = preg_replace("/{$v}/", $star, $str); }echo $str;
  • 正則函數 過濾 ---- 向后引用

    preg_grep( 正則, 數組 )

    1. 過濾不符合正則規定的格式 ? 2. **一般與向后引用一起使用**? 3. **向后引用**: \1 后面\1 與 前面第一個( )匹配的值 一模一樣? \num 后面\num 與 前面第num個( )匹配的值 一模一樣

    條件: 在使用\1 或 \2 或 \num 之前, 前面得要有 ( ) 小括號

    注意: 在字符串中進行使用, 可以用 $1 或 $2 或 $num 來代替

  • ( ) 單元模式

  • 將( )內的內容當做一個整體, 作為一個大原子

    ( 這個大原子里面可能有好幾個原子 但是看做一個原子了哦~~~)

  • ( ) 內的內容送進 子模式組

  • 注意點: **被小括號包起來后** ,**被匹配的值 會進入到接收結果的數組中.** 也就是**子模式組**: $time = '2019-01-23';$preg = '/(\d{4}) - (\d{2}) - (\d{2}) /x';preg_match($preg, $time, $result);var_dump($result);取消子模式:(?: 正則) 僅僅保留 當成一個整體的作用, 不再具備送進子模式組的功能例: $time = '2019-01-23';$preg = '/(?:\d{4}) - (\d{2}) - (\d{2}) /x';preg_match($preg, $time, $result);var_dump($result);

    9. 時間

    屬性名功能
    date_default_timezone_set ( ‘PRC’ );設置時區為中國
    date_default_timezone_get ( UTC );獲取格林威治時間,所謂的世界標準時間 (默認UTC)
    time ( )獲取時間戳 從1970年-現在的秒數
    格式化時間 data(格式 [, 時間戳] )非字母 隨便寫, 都是原樣輸出-------
    字母嚴格區分大小寫(大多數的字母都具有特殊意義)
    Y year4位年份 2019
    y year2位年份 19
    m month月份 01-12
    d day天 01-31
    H hour24小時 00~23
    h hour12小時 01~12
    a am/pm上午/下午
    A Am/Pm上午/下午
    i minute分鐘 00~59
    s second秒 00-59
    microtime ******微秒 獲取的是一個時間戳
    z今天是今年的第幾天
    W本周是今年的第幾周
    t本月一共多少天
    mktime( 時,分,秒,月,日,年 )自定義時間 返回值:時間戳
    strtotime( )字符串轉為時間戳 返回值: 時間戳
    strtotime可以將字符串轉為時間戳 配合data格式化時間 將其轉為直觀的年月日時間
    now本地現在的時間
    yesterday前一天
    tomorrow明天
    last year前一年
    next year明年
    last minute上一分鐘
    last week上一周
    5 day5天后
    -5 day5天前
    10 second10秒之后
    最多支持到2038年

    10. 錯誤

    (1) 錯誤的三種領域

  • 語法錯誤 最常見,也最容易修復

    若文件中,有任意一行代碼發生錯誤語法,name整個文件一行代碼都不會執行

  • 運行時錯誤 在代碼的解析過程中,不合理,則報錯.運行時錯誤

    比較常見 , 相對容易修復

    ? 有些運行時錯誤,會終止程序的運行

    ? 有些運行時錯誤,不會終止程序的運行

  • 邏輯錯誤

    最麻煩的錯誤, 不會提示錯誤 也不會終止程序.

  • (2).錯誤級別

    • error 1 致命錯誤
    • wrning 2 警告錯誤,不會終止程序
    • norice 8 提示錯誤,不會終止程序

    (3). 屏蔽錯誤

    在開發測試中建議全部打開查看錯誤,在正是上線中,建議全部屏蔽提高用戶體驗度

  • 屏蔽方式1:

    @ : 錯誤抑制符

    ? 那邊變量報錯,就在那里加@ 僅限于小代碼塊范圍使用

  • 屏蔽方式2: 店長推薦 使用函數來屏蔽

  • error_reporting(0);關閉錯誤報告
    error_reporting(1);顯示錯誤報告
    error_reporting(E_ALL);顯示所有的錯誤報告
    error_reporting(E_ERROR);只顯示 error 錯誤報告
    error_reporting(E_WARNING);只顯示 warning 錯誤報告
    error_reporting(E_NOTICE);只顯示 notice 錯誤報告
    error_reporting(E_ALL ^E_WARNING);除了 warning 不報, 其余都報
    error_reporting(E_ALL & ~E_WARNING);除了 warning 不報, 其余都報
    error_reporting(E_ALL ^E_NOTICE);除了 warning 不報, 其余都報
    error_reporting(E_ALL & ~E_NOTICE);除了 notice 不報, 其余都報
  • 屏蔽方式3:

    通過 ini_set() 臨時改變"配置文件"

    ini_set('error_reporting', E_NOTICE); ini_set('error_reporting', 8); echo ini_get('error_reporting');
  • 屏蔽方式4:

    前面的3個屏蔽方式, 僅僅限于本文件的錯誤屏蔽, 不能屏蔽其他文件的錯誤

    方式4: 通過直接 修改配置文件, 來屏蔽錯誤提示 (影響到整個服務器)

    1 配置文件地址: wamp/bin/apache/apachex.x.x/bin/php.ini
    2 修改配置1: error_reporting = 常量
    3 修改配置2: display_errors = On 開啟錯誤提示 Off/關閉錯誤提示
    4 注意: 在修改任意配置, 需要重啟服務器, 才能起作用

  • (4). 自定義報錯

  • trigger_error(報錯信息, 錯誤類型)
    ? E_USER_ERROR
    ? E_USER_WARNING
    ? E_USER_NOTICE
  • 錯誤日志
    error_log(s1, s2, s3)
    • s1: 報錯信息
    • s2: 消息類型 3: 將錯誤信息寫入目標文件
    • s3: 目標文件
  • : $a = 10; $b = 0;if($b == 0){$msg = '第二位參數不能為0 ';$type = E_USER_WARNING;$now = date('Y-m-d H:i:s');$timezone = date_default_timezone_get();$file = __FILE__;$line = __LINE__;// 在 txt文檔中, 換行是通過 \r\n 來實現的$message = "[ {$now} {$timezone} ] PHP {$msg} in {$file} on line {$line} \r\n \r\n";error_log($message, 3, './logs.txt');trigger_error($msg, $type); }else{echo $a / $b; } echo '<hr>';

    (5). 邏輯錯誤

    縮小錯誤范圍:
    ? 1. 斷點法: 通過 die 來終止程序, 并輸出之前的相關變量, 來判斷是否有問題
    ? 2. 注釋法: 通過 注釋 來屏蔽局部程序

    11. 文件

    (1) 文件屬性: 常見分類

    ? 1.file文件

    ? 2.dir文件夾 目錄.

    (2) 文件分類

    文件函數功能返回值
    filetype( ’ 文件地址 ’ )獲取文件類型常見以file與dir居多,文件不存在時,返回false
    filesize( ’ 文件地址 ’ )獲取文件大小文件的大小, 僅支持文件,不支持文件夾
    file_exists( ’ 文件地址 ’ )判斷文件是否存在返回值 bool型
    is_readable( )判斷文件是否可讀返回值 bool型
    is_writeable( )判斷文件是否可寫返回值 bool型
    filectime( )獲取文件創建時間可以設置date函數 設置返回的時間戳的格式
    filemtime( )獲取文件修改時間可以設置date函數 設置返回的時間戳的格式
    fileatime( )獲取文件訪問時間可以設置date函數 設置返回的時間戳的格式

    (3). 文件路徑

    ? 1.文件分隔符

    ? window: 支持 / 也支持 \

    ? Linux: 僅支持 /

    ? 2.文件函數

    ?

    文件函數功能
    DIRECTORY_SEPARATOR獲取當前系統支持的分隔符( 常量 )
    dirname( )獲取指定路徑的目錄
    basename( )獲取指定路徑的文件名

    (4)文件-目錄-操作

    函數名功能
    openddir( )打開目錄,返回資源
    readdir( )讀取目錄資源,讀取完畢,返回false
    closedir( )關閉資源
    mkdir(目錄地址,0777所有權限, true開啟遞歸創建 )創建空目錄
    rmdir( 目錄地址 )刪除空目錄
    is_file( )判斷是否為文件
    is_dir( )判斷是否為目錄
    copy(復制誰,復制到那里去 )復制文件
    touch( 文件地址 )創建空文件
    unlink( 文件地址 )刪除文件
    rename( 剪切誰, 剪切到哪里去 )剪切 / 重命名
  • 打開目錄( 文件夾 ) : 每一個目錄都有 . 和 …
  • ? . 當前目錄

    ? … 上一級目錄

    ? 一般情況下,很少用,只有直接操作命令時,才會用得上,或者操作上下級目錄時.

  • 刪除目錄只能刪除空目錄
  • (5) . 文件加載

    屬性名功能
    include ’ 文件地址 ’文件加載 ( 加載地址出錯 不會終止程序運行)
    include ( ’ 文件地址 ’ )為了避免 文件重復加載 通過include_once 來加載
    include_once ’ 文件地址 ’沒有加載文件之前,無法使用文件中的變量
    include_once( ’ 文件地址 ’ )支持相對路徑 盤符路徑, 不支持網址路徑
    require ‘文件地址’文件加載 ( 加載地址出錯,立馬終止程序運行) 支持相對路徑 盤符路徑, 不支持網址路徑
    require ( ’ 文件地址 ’ )同上~~~~
    require_once ’ 文件地址 ’
    require_once( ’ 文件地址 ’ )
  • 為了避免重復加載 使用 _ once 來加載

  • 在沒有加載文件之前,無法使用文件中的變量

  • 重復加載文件,就相當于將demo里面的代碼復制一份

  • 多次加載加載的文件之間沒有關聯

  • include加載地址出錯,立馬終止程序運行

    require加載地址出錯,不會終止程序運行

  • (6) 遞歸函數

    1. 在函數內部調用自己 2. 在執行后,最終會返回到最初的地方 3. 滿足以上兩點為遞歸函數

    (7) 文件內容 文件操作

  • 向文件賦予內容

    file_put_contents(文件路徑,內容)

    例: file_put_contents(’./demo.txt’, ‘how are you?’);

  • 向文件獲取內容

    file_get_contents(文件路徑)

    file_get_contents(’./demo.txt’);

  • 面試題 請用一行代碼獲取百度首頁

    file_get_contents(‘https://www.baidu.com’)

  • 打開文件

    fopen('文件路徑','打開方式')r 讀 read文件指針指向開頭若文件不存在則報錯w 寫 write會刪除原由的所有內容若文件不存在,則自動創建a 寫 追加 append文件指針指向末尾若文件不存在則自動創建+ 增強模式需要配合以上三種模式形成r+ W+ a+ 將具備讀和寫的功能$handle = fopen('./demo.txt','r'); 返回值為資源
  • 讀取文件資源

    fread(資源,字節) 讀取文件資源(指針形式) echo fread($handle,1); echo fread($handle,2); 會接著上一次讀到的地方讀下去 echo fread($handle,filesize('./demo.txt')); 讀完所有
  • 向文件資源寫入內容

    指針指向最前 清除所有內容并寫入

    fwrite(資源,內容) 想文件寫入內容 $content = '我今天要在這里寫點東西'; fwrite($handle, $content);
  • 追加內容,配合a方式

    指針指向末尾,從最后寫入追加內容

    fwrite(資源,內容) 追加模式 fwrite($handle, "I need a Mr.wang");
  • 增強模式

    同時具備讀寫功能

    fwrite($handle,'刺激刺激,裝完逼就跑');
  • 關閉文件資源

    fclose(資源) 關閉資源 fclose($handle);
  • (8) 接收上傳內的文件

    接收上傳的文件(三道坎)

  • 前端form, 設置MAX_FILE_SIZE 上傳大小

  • post協議(post_max_size), wamp限制: 8M以內

    一旦超過,$_FLIES ,則接收不到上傳的文件

  • 服務器限制(upload_max_filesize):2M以內

    一旦超過, error = 1 錯誤號

  • 如果需要更大的上傳限制,則修改配置文件php.ini

  • (9) 驗證

  • 判斷error
  • 判斷是否從post協議傳輸
  • 判斷文件類型
  • 設置新的文件名(唯一性)
  • 設置存儲目錄
  • 移動文件
  • 1. 判斷error$key = key($_FILES);if( empty($key) ){echo '您上傳的文件過大, 換個小點的'; die;}$error = $_FILES[$key]['error'];if($error != 0){switch ($error) {case 1: echo '您上傳的文件過大, 換個小點的'; break;case 2: echo '您上傳的文件過大, 換個小點的'; break;case 3: echo '請檢查您的網絡'; break;case 4: echo '請上傳您的文件'; break;case 6: echo '服務器繁忙, 請稍后再試'; break;case 7: echo '服務器繁忙, 請稍后再試'; break;}die;}2. 判斷是否是從post協議傳輸// is_uploaded_file( 臨時文件路徑 )$tmp = $_FILES[$key]['tmp_name'];if( !is_uploaded_file($tmp)){echo '非法上傳';}3. 判斷文件類型$type = $_FILES[$key]['type'];echo strtok($type, '/');echo strstr($type, '/');echo strstr($type, '/', true);echo strchr($type, '/');echo strchr($type, '/', true);// echo strrchr($type, '/');// $preg = '/ .* \/ /Ux';// preg_match($preg, $type, $result);// var_dump(rtrim($result[0],'/'));$type = strtok($_FILES[$key]['type'], '/');$allowType = ['image'];if ( !in_array($type, $allowType) ) {echo '您上傳的格式有誤'; die;}4. 設置新的文件名 (唯一性)// 格式: 20190128xxxxxxxxxxxxxxxxxx.jpg// echo uniqid(); // 基于1微秒 產生一個唯一ID, 適合低頻率$time = date('Ymd');$suffix = strrchr( $_FILES[$key]['name'] , '.');$newFile = $time.uniqid().$suffix;// echo $newFile;5. 設置存儲目錄// upload/2019/01/28/$savePath = 'upload/'.date('/Y/m/d/');if ( !file_exists($savePath) ) {mkdir($savePath, 0777, true);}6. 移動文件// move_uploaded_file( 臨時文件, 新目錄+新文件名)if ( move_uploaded_file($tmp, $savePath.$newFile)) {echo '上傳成功'; die;}echo '上傳失敗'; die

    (10) 高頻率 uuid 設置唯一的id

    UUID的好處: 能夠保證獨立性,程序可以在不同的數據庫間遷移,效果不受影響,保生成的ID不僅是表獨立的 而且是庫獨立的,這點在數據庫切分時 尤為重要.

    function UUID(){$uuid = '';if (function_exists('uuid_create') === true){$uuid = uuid_create(1);}else{$data = openssl_random_pseudo_bytes(16);$data[6] = chr(ord($data[6]) & 0x0f | 0x40); $data[8] = chr(ord($data[8]) & 0x3f | 0x80); $uuid = vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));}return $uuid; }for ($i=0; $i < 10000000; $i++) { echo UUID().'<br>'; }

    (11) 文件下載

    準備好前端html傳輸需要在的名字

    //前端做好html a鏈接 鏈接php文件,傳參get 名字想要下載的文件名1. 接收需要下載的名字$name = $_GET['name'];2. 準備下載路徑$path = './download/'.$name;3.準備下載之后的名字(唯一性)$suffix = strrchr($name, '.');產生32位 隨機16進制字符,以保證唯一性$filename = str_shuffle(str_shuffle(MD5(mt_rand().uniqid()))).$suffix;header('content-Disposition:attachment; filename="'.$filename.'"');4. 讀取下載內容readfile($path);

    12 .面向對象

    (1) 對象

  • 對象概念

    • 類: 抽象化 在定義功能
    • 對象: 實例化, 在調用功能
  • 類和對象的關系

    • 類 就是對象的抽象化
    • 對象 就是累的實例化
  • 定義類

    class 類名 {成員屬性(有什么)成員方法(會什么) }
  • 創建對象

    對象變量 = new 類名

  • 操作屬性 或 方法

    • 條件限制: 必須要有對象才能操作

      • 對象->屬性
      • 對象->方法名( )
      class plane{public $name = '波音747';public function fly(){echo '我會飛 <br>';} }$a = new plane;echo $a->name; //輸出 波音747 $a->fly();
  • (2) 偽對象 $this

  • 偽對象 $this

    • 不需要聲明,直接代表當前對象
    • 只能在 類內 使用
    • 一般用于類內操作屬性 或 方法
  • 偽對象使用方法 ---------- (以下內容與方法是在寫 類的內部的!!! )

    • 方法1: var_dump($GLOBALS['name']);

    • 方法2:

      $b=new plane; var_dump($b);if($b == $GLOBALS['a']){echo 'Yes'; }else{echo 'No'; }
    • 方法3 :

      • echo $this->變量名(不用寫$);
      • $this->類內部的方法名();
  • (3) 連貫操作 OOP

    對象-> 方法1()->方法2()->方法3()

    注意點; 在使用連貫操作的時候, 需要前面一個方法 返回一個對象. 用以調用后面的方法

    所以要在方法1,方法2,…中return $this 只有這樣才能夠讓后面的方法能夠調用

    個人總結: 1. 調用方法 強行接收 會收到**null**,

    ? 2.在方法內**ruturn $this;可以返回當前對象(整個類)**

    例:

    class Person{public $name = '老王';public $age = 18;public function step1(){echo '黑虎掏心 <br>';var_dump($this);return $this;}public function step2(){echo '白虎掏陰 <br>';}}$a = new Person;$a->step1()->step2()->step3();//return $this 之后后面的方法才能在對象中調用方法

    (4)魔術方法

    魔術方法定義: 在觸發特定的條件時, 自動調用魔術方法

  • 構造方法 public function __construc(){...}

    • 觸發條件: 實例化時,自動調用 (也就是new一個對象的時候自動調用)
    • 常用于: 初始化
    • 不需要返回值
      • 實例化時: 變量 會接收 對象
      • 調用時: 變量 接收 返回值
    • 位置: 寫在屬性的最后面, 方法的最前面
    • 在沒有 構造方法時, 實例化的瞬間, 自動執行同類名的方法
      • 就是 方法名與 類名相同的情況下,在new實例化的瞬間會被執行.
      • 必須寫在 屬性的后面, 方法的最前面
    class Person{public $name;public function __construct(){echo '這是一個構造方法 <br>';return 123;}public function skill(){echo '嘿嘿嘿';}} $a = new Person; // 實例化對象, 自動調用構造方法;
  • 析構方法 public function __destruct( ) { ... }

    • 觸發條件: 在對象被銷毀時,自動調用
    • 屬于被銷毀的幾種情況
      • 程序自然結束時
      • 對象被覆蓋時
      • 對象被刪除時
    • 不能有參數
    • 位置: 寫在方法的最后面
    • 例: 磊哥上課例子. 面試題…挺難的
    class Person{public function __construct(){static $a = 10;echo $a;$a++;}public function demo(){echo '老王客串一下';}public function __destruct(){static $b = 50;echo $b;$b++;}}$x = new Person;$x = new Person;$x->demo();
  • (5) PDO 操作數據庫 ( 數據庫抽象層 )

  • 鏈接數據庫

    new PDO ( DNS, USER , PWD)

    • 參數
      • DSN :數據庫:host=主機IP地址;dbname=庫名;charset=編碼
      • USER: 用戶名
      • PWD: 密碼
  • 準備sql語句

    例: $sql = ' select * from user';

  • 執行sql語句

    • PDO->query( sql語句 ) =====> 返回值: PDOStatement對象

      例: $res = $pdo->query(xql語句)

    • 通過 PDOStatement 獲取數據

      • PDOStatement -> fetch ( 參數 ) 獲取一條數據
      • PDOStatement -> fetchAll ( 參數 ) 獲取所有數據
        • ? 參數 : PDO::FETCH_ASSOC 關聯
        • ? PDO::FETCH_NUM 索引
        • ? PDO::FETCH_BOTH 混合 (默認)
    $row = $res->fetchAll(PDO::FETCH_ASSOC);
  • 總結

    以上是生活随笔為你收集整理的细说php入门学习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲一区二区黄片 | 中文字幕在线1 | 国产丰满美女做爰 | 深夜福利在线免费观看 | 国产一页 | 久久久精品久久 | 男人午夜免费视频 | 中文字幕精品久久久 | 精品一区二区无码 | 思思久久久 | 国产一国产二 | 日韩av网站在线 | 久久男人的天堂 | 欧美日韩在线视频免费 | 日本一区二区免费电影 | 日本阿v视频在线观看 | 中文视频在线 | 日韩精品一区二区在线播放 | 欧美乱论 | 99re免费视频精品全部 | 日本黄视频网站 | 中文字幕第8页 | 狂野欧美 | 色婷婷久久久亚洲一区二区三区 | 福利二区三区 | 中文字幕巨乳 | 午夜写真片福利电影网 | 成年人在线网站 | 欧洲精品一区二区三区 | 牛牛影视一区二区 | 欧美精品 日韩 | 欧美三级午夜理伦三级中视频 | 欧美精品一级 | 日日操天天操 | 久久综合成人 | 双性人bbww欧美双性 | 国产婷婷色一区二区在线观看 | 影音先锋成人资源站 | 美女久久久久 | 成人午夜淫片免费观看 | 欧美一区二区三区激情视频 | 成年人网站免费观看 | 欧洲视频在线观看 | 国产成人午夜视频 | 欧美日韩一区二区区 | 久久久久亚洲日日精品 | 天天综合永久 | 日韩精品视频在线观看免费 | 欧美色图88| 四虎国产成人精品免费一女五男 | 9i精品福利一区二区三区 | 动漫美女被到爽 | 国内三级在线 | 国产欧美一区二区精品忘忧草 | 超碰69 | 天天综合永久入口 | 香蕉视频A | 日韩在线电影一区二区 | 国产精品久久国产愉拍 | 久久久精品国产 | 奇米成人| 成人污污视频在线观看 | 亚洲av无码日韩精品影片 | 国产欧美日韩综合精品一区二区 | 久久影音先锋 | 亚洲第一看片 | 午夜成人影片 | 免费欧美一级片 | 色哟哟中文字幕 | 欧美国产在线视频 | 男人都懂的网址 | 成人福利视频 | 星铁乱淫h侵犯h文 | 欧美精品网站 | 亚洲女优在线 | 欧美 日韩 国产 成人 在线 91 | 原创真实夫妻啪啪av | 亚洲偷 | 毛片av免费看 | 国产激情在线视频 | 少女与动物高清版在线观看 | 日韩成人高清在线 | 午夜美女福利视频 | 双性受孕h堵精大肚生子 | 日韩成人av毛片 | 最新中文av| 欧美日韩精品一区二区三区蜜桃 | 很黄很污的视频网站 | 日韩精品美女 | 天堂网视频在线 | 日韩欧美天堂 | 国产视频手机在线 | 亚洲美女中文字幕 | 日本成人精品在线 | 欧美综合一区二区三区 | 日韩av电影中文字幕 | 国产人妻aⅴ色偷 | 国产噜噜噜 | 动漫3d精品一区二区三区乱码 |