现代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 )
判斷函數和方法
function_exists( string $function_name )
method_exists( mixed $object, string $method_name ) // 判斷類的方法
Boolean 布爾類型
【遇到坑】(string) '0.00' 被認為是 True,且不為空
$str = '0.00';
$ret = !empty($str) ? $str : '5.00';
echo $ret;
//output:0.00
【遇到坑】當字符串 與 數字比較時,會被轉換為數字之后進行比較
//將all轉換為數字時候為0
var_dump(0 == 'all'); // TRUE, take care
Integer 整型
【新認知】整型的最大值可以用常量 PHP_INT_MAX 表示
【新認知】PHP 沒有像 C++ / JAVA 的整除運算,類似 1 / 2,PHP 返回 float 0.5
【舊回顧】轉換為整型可以用(int) 或者 (integer) 強制轉換。或者通過函數 intval() 來轉換。
Float 浮點型
【新認知】比較浮點數的方法
$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 字符。
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:和想象中不一樣)
$binary = (binary)$string;
$binary = b"binary string";
語言參考 > 變量
變量范圍
【舊回顧】 使用global,$GLOBALS 來實現全局變量或者超全局變量
【新認知】 靜態變量只能簡單賦值,不能是表達式。靜態變量第一次賦值之后不會再被重新定義,可以用于遞歸函數的計數。
function test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
test();
}
$count--;
}
?>
來自PHP外的變量
【新認知】變量名中的點和空格被轉換成下劃線 例如 變成 $_REQUEST["a_b"]
語言參考 > 流程控制
foreach
【新認知】用list()為嵌套數組解包
$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 可以獲得一個字符串,包含命名空間
namespace NS {
class ClassName {
}
echo ClassName::class;
}
?>
//output: NS\ClassName
類常量
【新認知】接口中可以定義常量
【新認知】可以用一個變量來動態調用類,但該變量的值不能為關鍵詞(self, parent, static)。
魔術方法
【新認知】不能在__toString() 方法中拋出異常,這樣會出現致命錯誤。
類型約束
【新認知】PHP5 可以使用類型約束,函數的參數可以制定必須為 對象,接口,數組,callable
后期靜態綁定
【新認知】后期靜態綁定,static:: 不再被解析為定義在當前方法所在的類,而是在實際運行時計算。
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會返回一個值給循環調用此生成器的代碼而且只是暫時執行生成器代碼
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
以上
總結
以上是生活随笔為你收集整理的现代php 阅读笔记,PHP 手册阅读笔记 - 语言参考篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金铲铲之战腐朽之盾第一关怎么打
- 下一篇: php ajax json post请求