後端 - Lession 01 PHP 基礎

夢幻現實發表於2019-07-21

Lession 01 php 基礎

1. php 基礎

  1. phpinfo():輸出版本號

    1. echo:輸出文字
    2. php.ini:php的配置檔案

2. php 變數

  1. 命名變數必須用 $ 開頭

  2. 嚴格區分大小寫

  3. 不能以特殊字元和數字開頭(可以用下劃線)

  4. unset:銷燬變數

  5. isset():判斷變數是否存在 isset(var1, var2)

  6. 普通變數的作用域:函式 內部作用域外部作用域 是不相關的

    <?php
       // 變數的作用域
       $test = 'hello';
    
       function test () {
           echo $test;     // 報錯, 變數未定義
       }
    
       test();

    2.1 靜態變數:

    • static 可以定義靜態變數
    • 只會初始化一次,會儲存上一次的值
    <?php 
    
        // 靜態變數
        function total() {
           static $num = 2;
           $num *= 2;
           echo $num;
       }
    
       total();
       total();
       total();

    2.2 超全域性變數:

    • $GLOBALS:用於在 PHP 指令碼中的任意位置訪問全域性變數
    • $_SERVER:儲存關於報頭、路徑和指令碼位置的資訊
    • $_REQUEST:接收 HTML 表單提交的資料
    • $_POST:接收 post 請求資料
    • $_GET:接收 get 請求資料
    • $_FILES:接收 檔案 資料
    • $_ENV:是一個包含伺服器端環境變數的陣列
    • $_COOKIE:獲取 請求所帶的 COOKIE
    • $_SESSION:獲取 請求所帶的 SESSION

3. php 單引號 和 雙引號區別

  1. 單引號不識別變數,雙引號識別變數

  2. 單引號不會轉義特殊字元, 雙引號可以

    <?php 
    
        // 單雙引號區別
        $name = '張三';
        $age = 18;
        $sex = 'man';
    
        echo "$name";   // 張三
        echo '$name';   // $name
    
        // 結論:單引號不解析變數,雙引號解析變數
    
        echo "\n";      // 換行
        echo '\n';      // \n
    
        // 結論:單引號不會轉義特殊字元, 雙引號可以
    ?>
    1. 變數和字串,用一個點 . 拼接起來
  3. 雙引號可以將變數和字串拼接起來 "{$name}好好學習" -> "張三好好學習"

    1. 雙引號 套 單引號 套 變數,輸出外面帶單引號的變數 "'$name'" -> '張三'
  4. 單引號效率比雙引號高


4. 資料型別

1. 標量
    1.  整型:1   2  
    2.  浮點型:1.2    1.3
    3.  布林型別:true    false
    4.  字串:單雙引號引起來的都是字串
2. 混合型別(重點)
    1. 陣列:array
    2. 物件:object
3. 特殊型別
    1. 空:null
    2. 資源:resource

5. 資料型別轉換

  1. 檢測資料型別:gettype()
  2. 型別轉換
    1. intval():轉換為整數,integer
    2. floatval():轉換為小數,double
    3. strval():轉換為字串,string
    4. boolval():轉換為布林值,boolean
  3. 判斷資料型別的常用函式
    1. is_array()
    2. is_string()
    3. is_bool()
    4. is_float()
    5. is_object()
    6. is_int()
    7. is_numeric():數字字串會轉換成數字,然後再判斷,但不能混合非數字字元
    8. is_resource():判斷是否是資源
    9. is_null()
    10. is_scalar():判斷是否是標量

6. 常量

  1. 定義常量:define('abc', 'abc');

  2. 常量注意點:

    * 常量可以直接用大寫字母和下劃線定義,不必加`$`符號
    • 賦值只能為標量

    • 賦值只能為標量
      * 常量不能寫到字串中

  3. 判斷常量是否被定義:defined('常量名')

    1. 系統常量:

    2. __FILE__:找你的檔案

    3. __LINE__:獲取程式碼所在的行數

    4. __DIR__:找到當前檔案的目錄

    5. PHP_OS:獲取系統資訊

    6. PHP_VERSION:獲取版本資訊

    7. __FUNCTION:獲取當前函式名

    8. M_PI:圓周率

    9. 瞭解:

      • __MHTHOD__:獲取當前成員方法名

      • __NAMESPACE__:獲取當前名稱空間的名字
      • __TRAIT__:獲取當前 TRAIT 名字(多繼承)
      • __CLASS__:獲取當前類名


7. 運算子

與其他語言差不多


8. 為 false 的幾種情況(條件判斷)

  1. 字串和數字:
    • ''0'0'0.000
    • 字串 '0.000' 為真
  2. 陣列:[] (與 js 不同)

9. 流程判斷

與其他語言基本相同

擴充:

​ 1. 隨機數:mt_rand(1, 10);


10. 迴圈

與其他語言一樣,迴圈內的變數不是區域性變數


11.1 函式

定義:function name() {}

​ 1. 函式分為類庫函式 和 自定義函式

​ 2. 類庫函式不可再自定義

​ 3. 行參可設定預設值,與 es6 類似

​ 4. 沒設定預設引數時,實參少了會報錯

​ 5. 函式不區分大小寫

<?php 

    function Name($name = '劉程', $sex = '男') {
        echo '我是:'.$name.' . 性別:'.$sex;
        return true;
    }
    
    $temp = name('liucheng');       // 我是:liucheng . 性別:男
    echo '<br />'.$temp;            // 返回值 true
  1. 變數和作用域看標題2 變數
  2. 行參的型別約束(重要)

11.2 函式的 行參 和 返回值


11.2.1 行參約束型別

​行參約束型別後,函式會將傳入的資料轉換為對應的資料,若無法轉換,將報錯。

<?php

// 約束函式行參的型別
function test(string $name, int $num) {
    echo gettype($name).'<br />';
    echo gettype($num).'<br />';
}

test('liucheng', 20);
test(520, 20);
// test(520, "a");     // 報錯, 'a' 不是整數

11.2.2 返回值的約束型別

變數括號後面加一個 `:string` , 約束其返回值為 string ,不是 string 就會報錯
<?php

// 約束函式返回值
function test(string $name, int $num):string {
    
    return $name.$num;
}

print_r(test('liucheng', 20).'<br>');

print_r(test(520, 20).'<br>');
echo test(520, "a").'<br>';     

11.2.3 函式的可變引數

​ 不用設定行參,即可獲取傳入的引數

  1. func_get_args() : 獲取傳入的引數,組成陣列。
  2. func_get_arg(n) : 獲取對應下標位置的引數
<?php

// 可變引數
function test() {
    $temp = func_get_args();
    echo func_get_arg(1).'<br>';
    return $temp;
}

print_r(test('liucheng', 20));      // 輸出:Array ( [0] => liucheng [1] => 20 )

12. 常用函式


12.1 數學函式

  1. 隨機數
    • rand
    • mt_rand:效能比 rand 好 4 倍
  2. 小數
    • floor:向下取整
    • ceil:向上取整
    • round:四捨五入取整
  3. 其他
    • abs:絕對值
    • pi:圓周率
    • M_PI:常量, 與 pi() 函式返回值相同
    • pow:指數表示式
    • max:最大值
    • min:最小值

12.2 字串內建函式


  1. 大小寫轉換
    • strtolower:大寫轉小寫
    • strtoupper:小寫轉大寫
    • lcfirst:首字母小寫
    • ucfirst:首字母大寫
    • ucwords:每個單詞首字母大寫
  2. 空白處理
    • trim:去掉首位空格
    • ltrim:去掉頭部空格
    • rtrim / chop:去掉尾部空格
  3. 查詢定位
    • strstr / strchr:檢測 字串 在 另一個字串 第一次出現到結尾的內容(大小寫敏感)
    • strrchr:檢測 字串 在 另一個字串 最後一次出現 到 結尾 的內容
    • stristr:strstr 忽略大小寫版本
    • strpos:返回字串首次出現的位置(大小寫敏感)
    • stripos:strpos 忽略大小寫版本
    • strrpos:返回字串最後一次出現的位置(大小寫敏感)
    • strripos:strrpos 忽略大小寫版本
    • sbustr:子字串提取
    • strpbrk:返回 (搜尋條件的任意字元) 首次出現到結尾的內容(大小寫敏感)
  4. 比較
    • strcmp:二進位制比較字串
    • strcasecmp:strcmp 忽略大小寫比較
    • strnatcmp:使用一種"自然排序"演算法來比較兩個字串(對大小寫敏感),在自然演算法中,數字 2 小於數字 10。在計算機排序中,10 小於 2,這是因為 10 中的第一個數字小於 2。
    • strnatcasecmp:strnatcmp:忽略大小寫版本
  5. 順序

    • str_shuffle:隨機打亂字串順序
    • strrev:倒序排列字串
  6. 轉換

    • chr:將 ASCII 碼值轉換為字元

    未完待續。。。


12.3 陣列內建函式

相關文章