PHP 手冊閱讀筆記 - 語言參考篇

最近計劃把 PHP手冊,認真的先過一遍。記錄一些之前不知道,不明確的知識。php

語言參考 > 類型

【新認知】強制轉換類型用 settype( mixed $var, string $type )。判斷變量的類型用is_type 函數。例如:數組

if (is_int($an_int)) {
    $an_int += 4;
}
if (is_string($a_bool)) {
    echo "String: $a_bool";
}

判斷變量函數

is_array( mixed $var )
is_bool( mixed $var )
is_float( mixed $var )
is_integer( mixed $var )
is_null( mixed $var )
is_numeric( mixed $var ) //檢測變量是否爲數字或數字字符串
is_object( mixed $var )
is_resource( mixed $var )
is_scalar( mixed $var ) //檢測變量是不是一個標量  integer、float、string 或 boolean
is_string( mixed $var )

判斷函數和方法spa

function_exists( string $function_name )
method_exists( mixed $object, string $method_name ) // 判斷類的方法

Boolean 布爾類型

【遇到坑】(string) '0.00' 被認爲是 True,且不爲空scala

$str = '0.00';
$ret = !empty($str) ? $str : '5.00';
echo $ret;
//output:0.00

【遇到坑】當字符串 與 數字比較時,會被轉換爲數字以後進行比較code

//將all轉換爲數字時候爲0
var_dump(0 == 'all'); // TRUE, take care

Integer 整型

【新認知】整型的最大值能夠用常量 PHP_INT_MAX 表示orm

【新認知】PHP 沒有像 C++ / JAVA 的整除運算,相似 1 / 2 ,PHP 返回 float 0.5對象

【舊回顧】轉換爲整型能夠用(int) 或者 (integer) 強制轉換。或者經過函數 intval() 來轉換。遞歸

Float 浮點型

【新認知】比較浮點數的方法索引

<?php
$a = 1.23456789
$b = 1.23456780
$epsilon = 0.00001
if (abs($a - $b) < $epsilon) {
    echo 'true';
}

String 字符串

【新認知】使用函數 ord()chr() 實現 ASCII 碼和字符間的轉換(PS:這點和 Python 是同樣的)
【新認知】 PHP 中沒有單獨的「byte」類型,已經用字符串來代替了。

Array 數組

【新認知】 unset()函數容許刪除數組中的某個鍵,可是數組的鍵不會從新索引。可使用 array_values() 函數從新索引。
【遇到坑】避免數組 $foo[bar] 的寫法,使用 $foo['bar']
【新認知】若是一個object類型轉換爲 array,則結果爲一個數組,其單元爲該對象的屬性。鍵名將爲成員變量名,不過有幾點例外:整數屬性不可訪問;私有變量前會加上類名做前綴;保護變量前會加上一個 '*' 作前綴。這些前綴的先後都各有一個 NULL 字符。

<?php

class A {
    private $A; // This will become '\0A\0A'
}

class B extends A {
    private $A; // This will become '\0B\0A'
    public $AA; // This will become 'AA'
}

var_dump((array) new B());
?>

【新認知】 在循環中改變單元,能夠用個引用傳遞來作到

// PHP 5
foreach ($colors as &$color) {
    $color = strtoupper($color);
}
unset($color); /* ensure that following writes to

類型轉換

【新認知】轉換爲NULL類型,(unset) $val

【新認知】將字符串文字和變量轉換爲二進制字符串 (PS:和想象中不同)

<?php
$binary = (binary)$string;
$binary = b"binary string";

語言參考 > 變量

變量範圍

【舊回顧】 使用global$GLOBALS 來實現全局變量或者超全局變量

【新認知】 靜態變量只能簡單賦值,不能是表達式。靜態變量第一次賦值以後不會再被從新定義,能夠用於遞歸函數的計數。

<?php
function test()
{
    static $count = 0;

    $count++;
    echo $count;
    if ($count < 10) {
        test();
    }
    $count--;
}
?>

來自PHP外的變量

【新認知】變量名中的點和空格被轉換成下劃線 例如 <input name="a.b" /> 變成 $_REQUEST["a_b"]

語言參考 > 流程控制

foreach

【新認知】用list()爲嵌套數組解包

<?php
$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as list($a, $b)) {
    // $a contains the first element of the nested array,
    // and $b contains the second element.
    echo "A: $a; B: $b\n";
}
?>

break

【新認知】break 能夠接受一個可選的數字參數來決定跳出幾重循環。break 至關於 break 1

continue

【新認知】continue 能夠接受一個可選的數字參數來決定跳到幾重循環結尾。continue 至關於 continue 1

語言參考 > 常量

魔術常量

【新認知】原來這些變量叫作 魔法常量

__LINE __ 
__FILE__
__DIR__
__FUNCTION__
__CLASS__
__TARIT__
__MRTHOD__
__NAMESPACE__

語言參考 > 類與對象

基本概念

【新認知】::class, 使用ClassName::class 能夠得到一個字符串,包含命名空間

<?php
namespace NS {
    class ClassName {
    }
    
    echo ClassName::class;
}
?>
//output: NS\ClassName

類常量

【新認知】接口中能夠定義常量
【新認知】能夠用一個變量來動態調用類,但該變量的值不能爲關鍵詞(self, parent, static)。

魔術方法

【新認知】不能在__toString() 方法中拋出異常,這樣會出現致命錯誤。

類型約束

【新認知】PHP5 可使用類型約束,函數的參數能夠制定必須爲 對象,接口,數組,callable

後期靜態綁定

【新認知】後期靜態綁定,static:: 再也不被解析爲定義在當前方法所在的類,而是在實際運行時計算。

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // 後期靜態綁定從這裏開始
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?>
//output: B

語言參考 > 生成器

【新認知】生成器汗水的核心是yield關鍵字。它最簡單的調用形式看起來像一個return聲明,不一樣之處在於普通return會返回值並終止函數的執行,而yield會返回一個值給循環調用今生成器的代碼並且只是暫時執行生成器代碼

<?php
function gen_one_to_three() {
    for ($i = 1; $i <= 3; $i++) {
        //注意變量$i的值在不一樣的yield之間是保持傳遞的。
        yield $i;
    }
}

$generator = gen_one_to_three();
foreach ($generator as $value) {
    echo "$value\n";
}
?>
1
2
3

語言參考 > 預約義變量

超全局變量

$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_REQUEST
$_SESSION
$_ENV
$_COOKIE
$php_errormsg //前一個錯誤信息 
$HTTP_RAW_POST_DATA //原始POST數據
$http_response_header //HTTP Response Header
$argc //argument numbers
$argv //argument array

以上

相關文章
相關標籤/搜索