现代php 阅读笔记,PHP 手册阅读笔记 - 语言参考篇
最近計(jì)劃把 PHP手冊(cè),認(rèn)真的先過(guò)一遍。記錄一些以前不知道,不明確的知識(shí)。
語(yǔ)言參考 > 類型
【新認(rèn)知】強(qiáng)制轉(zhuǎn)換類型用 settype( mixed $var, string $type )。判斷變量的類型用is_type函數(shù)。例如:
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 ) //檢測(cè)變量是否為數(shù)字或數(shù)字字符串
is_object( mixed $var )
is_resource( mixed $var )
is_scalar( mixed $var ) //檢測(cè)變量是否是一個(gè)標(biāo)量 integer、float、string 或 boolean
is_string( mixed $var )
判斷函數(shù)和方法
function_exists( string $function_name )
method_exists( mixed $object, string $method_name ) // 判斷類的方法
Boolean 布爾類型
【遇到坑】(string) '0.00' 被認(rèn)為是 True,且不為空
$str = '0.00';
$ret = !empty($str) ? $str : '5.00';
echo $ret;
//output:0.00
【遇到坑】當(dāng)字符串 與 數(shù)字比較時(shí),會(huì)被轉(zhuǎn)換為數(shù)字之后進(jìn)行比較
//將all轉(zhuǎn)換為數(shù)字時(shí)候?yàn)?
var_dump(0 == 'all'); // TRUE, take care
Integer 整型
【新認(rèn)知】整型的最大值可以用常量 PHP_INT_MAX 表示
【新認(rèn)知】PHP 沒(méi)有像 C++ / JAVA 的整除運(yùn)算,類似 1 / 2,PHP 返回 float 0.5
【舊回顧】轉(zhuǎn)換為整型可以用(int) 或者 (integer) 強(qiáng)制轉(zhuǎn)換。或者通過(guò)函數(shù) intval() 來(lái)轉(zhuǎn)換。
Float 浮點(diǎn)型
【新認(rèn)知】比較浮點(diǎn)數(shù)的方法
$a = 1.23456789
$b = 1.23456780
$epsilon = 0.00001
if (abs($a - $b) < $epsilon) {
echo 'true';
}
String 字符串
【新認(rèn)知】使用函數(shù) ord() 和 chr() 實(shí)現(xiàn) ASCII 碼和字符間的轉(zhuǎn)換(PS:這點(diǎn)和 Python 是一樣的)
【新認(rèn)知】 PHP 中沒(méi)有單獨(dú)的“byte”類型,已經(jīng)用字符串來(lái)代替了。
Array 數(shù)組
【新認(rèn)知】 unset()函數(shù)允許刪除數(shù)組中的某個(gè)鍵,但是數(shù)組的鍵不會(huì)重新索引??梢允褂?array_values() 函數(shù)重新索引。
【遇到坑】避免數(shù)組 $foo[bar] 的寫(xiě)法,使用 $foo['bar']
【新認(rèn)知】如果一個(gè)object類型轉(zhuǎn)換為 array,則結(jié)果為一個(gè)數(shù)組,其單元為該對(duì)象的屬性。鍵名將為成員變量名,不過(guò)有幾點(diǎn)例外:整數(shù)屬性不可訪問(wèn);私有變量前會(huì)加上類名作前綴;保護(hù)變量前會(huì)加上一個(gè)'*'做前綴。這些前綴的前后都各有一個(gè) 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());
?>
【新認(rèn)知】 在循環(huán)中改變單元,可以用個(gè)引用傳遞來(lái)做到
// PHP 5
foreach ($colors as &$color) {
$color = strtoupper($color);
}
unset($color); /* ensure that following writes to
類型轉(zhuǎn)換
【新認(rèn)知】轉(zhuǎn)換為NULL類型,(unset) $val
【新認(rèn)知】將字符串文字和變量轉(zhuǎn)換為二進(jìn)制字符串 (PS:和想象中不一樣)
$binary = (binary)$string;
$binary = b"binary string";
語(yǔ)言參考 > 變量
變量范圍
【舊回顧】 使用global,$GLOBALS 來(lái)實(shí)現(xiàn)全局變量或者超全局變量
【新認(rèn)知】 靜態(tài)變量只能簡(jiǎn)單賦值,不能是表達(dá)式。靜態(tài)變量第一次賦值之后不會(huì)再被重新定義,可以用于遞歸函數(shù)的計(jì)數(shù)。
function test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
test();
}
$count--;
}
?>
來(lái)自PHP外的變量
【新認(rèn)知】變量名中的點(diǎn)和空格被轉(zhuǎn)換成下劃線 例如 變成 $_REQUEST["a_b"]
語(yǔ)言參考 > 流程控制
foreach
【新認(rèn)知】用list()為嵌套數(shù)組解包
$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
【新認(rèn)知】break 可以接受一個(gè)可選的數(shù)字參數(shù)來(lái)決定跳出幾重循環(huán)。break 相當(dāng)于 break 1
continue
【新認(rèn)知】continue 可以接受一個(gè)可選的數(shù)字參數(shù)來(lái)決定跳到幾重循環(huán)結(jié)尾。continue 相當(dāng)于 continue 1
語(yǔ)言參考 > 常量
魔術(shù)常量
【新認(rèn)知】原來(lái)這些變量叫做 魔法常量
__LINE __
__FILE__
__DIR__
__FUNCTION__
__CLASS__
__TARIT__
__MRTHOD__
__NAMESPACE__
語(yǔ)言參考 > 類與對(duì)象
基本概念
【新認(rèn)知】::class, 使用ClassName::class 可以獲得一個(gè)字符串,包含命名空間
namespace NS {
class ClassName {
}
echo ClassName::class;
}
?>
//output: NS\ClassName
類常量
【新認(rèn)知】接口中可以定義常量
【新認(rèn)知】可以用一個(gè)變量來(lái)動(dòng)態(tài)調(diào)用類,但該變量的值不能為關(guān)鍵詞(self, parent, static)。
魔術(shù)方法
【新認(rèn)知】不能在__toString() 方法中拋出異常,這樣會(huì)出現(xiàn)致命錯(cuò)誤。
類型約束
【新認(rèn)知】PHP5 可以使用類型約束,函數(shù)的參數(shù)可以制定必須為 對(duì)象,接口,數(shù)組,callable
后期靜態(tài)綁定
【新認(rèn)知】后期靜態(tài)綁定,static:: 不再被解析為定義在當(dāng)前方法所在的類,而是在實(shí)際運(yùn)行時(shí)計(jì)算。
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // 后期靜態(tài)綁定從這里開(kāi)始
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
?>
//output: B
語(yǔ)言參考 > 生成器
【新認(rèn)知】生成器汗水的核心是yield關(guān)鍵字。它最簡(jiǎn)單的調(diào)用形式看起來(lái)像一個(gè)return聲明,不同之處在于普通return會(huì)返回值并終止函數(shù)的執(zhí)行,而yield會(huì)返回一個(gè)值給循環(huán)調(diào)用此生成器的代碼而且只是暫時(shí)執(zhí)行生成器代碼
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
語(yǔ)言參考 > 預(yù)定義變量
超全局變量
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_REQUEST
$_SESSION
$_ENV
$_COOKIE
$php_errormsg //前一個(gè)錯(cuò)誤信息
$HTTP_RAW_POST_DATA //原始POST數(shù)據(jù)
$http_response_header //HTTP Response Header
$argc //argument numbers
$argv //argument array
以上
總結(jié)
以上是生活随笔為你收集整理的现代php 阅读笔记,PHP 手册阅读笔记 - 语言参考篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 金铲铲之战腐朽之盾第一关怎么打
- 下一篇: 成都大熊猫基地需要坐观光车吗