摘要:通過注冊自動加載器,腳本引擎在出錯失敗前有了最后一個機會加載所需的類構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)允行開發(fā)者在一個類中定義一個方法作為構(gòu)造函數(shù)。析構(gòu)函數(shù)會在到某個對象的所有引用都被刪除或者當(dāng)對象被顯式銷毀時執(zhí)行抽象類支持抽象類和抽象方法。
語言參考 1. 類型 1.1 簡介 1.2 Float 浮點型
浮點數(shù)的精度有限1.3 String 字符串例如,floor((0.1+0.7) * 10) 通常會返回 7 而不是預(yù)期中的 8,因為該結(jié)果內(nèi)部的表示其實是類似 7.9999999999999991118...
string 最大可以達到 2GB
一個字符串可以用 4 種方式表達
單引號
雙引號
heredoc 語法結(jié)構(gòu)
nowdoc 語法結(jié)構(gòu)
1.4 Array 數(shù)組PHP 中的數(shù)組實際上是一個有序映射。映射是一種把 values 關(guān)聯(lián)到 keys 的類型。此類型在很多方面做了優(yōu)化,因此可以把它當(dāng)成真正的數(shù)組,或列表(向量),散列表(是映射的一種實現(xiàn)),字典,集合,棧,隊列以及更多可能性。由于數(shù)組元素的值也可以是另一個數(shù)組,樹形結(jié)構(gòu)和多維數(shù)組也是允許的1.5 Resource 資源類型
資源 resource 是一種特殊變量,保存了到外部資源的一個引用。資源是通過專門的函數(shù)來建立和使用的
釋放資源
引用計數(shù)系統(tǒng)是 Zend 引擎的一部分,可以自動檢測到一個資源不再被引用了(和 Java 一樣)。這種情況下此資源使用的所有外部資源都會被垃圾回收系統(tǒng)釋放。因此,很少需要手工釋放內(nèi)存1.6 NULL
特殊的 NULL 值表示一個變量沒有值。NULL 類型唯一可能的值就是 NULL。
在下列情況下一個變量被認(rèn)為是 NULL
被賦值為 NULL
尚未被賦值
被 unset()
1.7 偽類型偽類型(pseudo-types) 是 PHP 文檔里用于指示參數(shù)可以使用的類型和值。 請注意,它們不是 PHP 語言里原生類型。 所以不能把偽類型用于自定義函數(shù)里的類型約束(typehint)2. 變量 2.1 變量范圍
變量的范圍即它定義的上下文背景(也就是它的生效范圍)。大部分的 PHP 變量只有一個多帶帶的范圍。這個多帶帶的范圍跨度同樣包含了 include 和 require 引入的文件2.2 可變變量這里變量 $a 將會在包含文件 b.inc 中生效。但是,在用戶自定義函數(shù)中,一個局部函數(shù)范圍將被引入。任何用于函數(shù)內(nèi)部的變量按缺省情況將被限制在局部函數(shù)范圍內(nèi)
$a = "hello"; $$a = "world"; echo "$a ${$a}";3. 常量 3.1 魔術(shù)常量
名稱 | 說明 |
---|---|
__LINE__ | 文件中的當(dāng)前行號 |
__FILE__ | 文件的完整路徑和文件號 |
__DIR__ | 文件所在的目錄 |
__FUNCTION__ | 函數(shù)名稱 |
__CLASS__ | 類的名稱 |
__TRAIT__ | Trait的名字 |
__METHOD__ | 類的方法名 |
__NAMESPACE__ | 當(dāng)前命名空間的名稱(區(qū)分大小寫) |
//乘方 $a = 3; $b = 2; echo $a ** $b;4.2 位運算符
位運算符允許對整型數(shù)中指定的位進行求值和操作
例子 | 名稱 | 結(jié)果 |
---|---|---|
$a & $b | And(按位與) | 將把 $a 和 $b 中都為 1 的位設(shè)為 1 |
$a 豎線(注1) $b | Or(按位或) | 將把 $a 和 $b 中任何一個為 1 的位設(shè)為 1 |
$a ^ $b | Xor(按位異或) | 將把 $a 和 $b 中一個為 1 另一個為 0 的位設(shè)為 1 |
~ $a | Not(按位取反) | 將 $a 中為 0 的位設(shè)為 1,反之亦然 |
$a << $b | Shift left(左移) | 將 $a 中的位向左移動 $b 次(每一次移動都表示“乘以 2”) |
$a >> $b | Shift right(右移) | 將 $a 中的位向右移動 $b 次(每一次移動都表示“除以 2”) |
注1:這里“豎線”豎線是“|”,這里 markdown 支持好像有點問題4.3 比較運算符
比較運算符,如同它們名稱所暗示的,允許對兩個值進行比較
例子 | 名稱 | 結(jié)果 |
---|---|---|
$a == $b | 等于 | TRUE,如果類型轉(zhuǎn)換后 $a 等于 $b |
$a === $b | 全等 | TRUE,如果 $a 等于 $b,并且它們的類型也相同 |
$a != $b | 不等 | TRUE,如果類型轉(zhuǎn)換后 $a 不等于 $b |
$a <> $b | 不等 | TRUE,如果類型轉(zhuǎn)換后 $a 不等于 $b |
$a !== $b | 不全等 | TRUE,如果 $a 不等于 $b,或者它們的類型不同 |
$a < $b | 小與 | TRUE,如果 $a 嚴(yán)格小于 $b |
$a > $b | 大于 | TRUE,如果 $a 嚴(yán)格大于 $b |
$a <= $b | 小于等于 | TRUE,如果 $a 小于或者等于 $b |
$a >= $b | 大于等于 | TRUE,如果 $a 大于或者等于 $b |
$a <=> $b | 太空船運算符(組合比較符) | 當(dāng)$a小于、等于、大于$b時 分別返回一個小于、等于、大于0的integer 值。 PHP7開始提供. |
$a ?? $b ?? $c | NULL 合并操作符 | 從左往右第一個存在且不為 NULL 的操作數(shù)。如果都沒有定義且不為 NULL,則返回 NULL。PHP7開始提供 |
PHP 支持一個執(zhí)行運算符:反引號(``)。注意這不是單引號!PHP 將嘗試將反引號中的內(nèi)容作為 shell 命令來執(zhí)行,并將其輸出信息返回(即,可以賦給一個變量而不是簡單地丟棄到標(biāo)準(zhǔn)輸出)。使用反引號運算符“`”的效果與函數(shù) shell_exec() 相同4.5 數(shù)組運算符
例子 | 名稱 | 結(jié)果 |
---|---|---|
$a + $b | 聯(lián)合 | $a 和 $b 的聯(lián)合 |
$a == $b | 相等 | 如果 $a 和 $b 具有相同的鍵/值對則為 TRUE |
$a === $b | 全等 | 如果 $a 和 $b 具有相同的鍵/值對并且順序和類型都相同則為 TRUE |
$a != $b | 不等 | 如果 $a 不等于 $b 則為 TRUE |
$a <> $b | 不等 | 如果 $a 不等于 $b 則為 TRUE |
$a !== $b | 不全等 | 如果 $a 不全等于 $b 則為 TRUE |
instanceof 用于確定一個 PHP 變量是否屬于某一類 class 的實例5. 流程控制 5.1 流程控制的替代語法instanceof 也可用來確定一個變量是不是繼承自某一父類的子類的實例
instanceof 也可用于確定一個變量是不是實現(xiàn)了某個接口的對象的實例
PHP 提供了一些流程控制的替代語法,包括 if,while,for,foreach 和 switch。替代語法的基本形式是把左花括號({)換成冒號(:),把右花括號(})分別換成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;
if (true) : echo "run "; endif;5.2 do-while 5.3 break
break 結(jié)束當(dāng)前 for,foreach,while,do-while 或者 switch 結(jié)構(gòu)的執(zhí)行5.4 continuebreak 可以接受一個可選的數(shù)字參數(shù)來決定跳出幾重循環(huán)
continue 在循環(huán)結(jié)構(gòu)用用來跳過本次循環(huán)中剩余的代碼并在條件求值為真時開始執(zhí)行下一次循環(huán)5.5 declarecontinue 接受一個可選的數(shù)字參數(shù)來決定跳過幾重循環(huán)到循環(huán)結(jié)尾。默認(rèn)值是 1,即跳到當(dāng)前循環(huán)末尾
declare 結(jié)構(gòu)用來設(shè)定一段代碼的執(zhí)行指令
declare(ticks=1); // A function called on each tick event function tick_handler() { echo "tick_handler() called "; } register_tick_function("tick_handler"); $a = 1; if ($a > 0) { $a += 2; print($a); }5.6 require
require 和 include 幾乎完全一樣,除了處理失敗的方式不同之外。require 在出錯時產(chǎn)生 E_COMPILE_ERROR 級別的錯誤。換句話說將導(dǎo)致腳本中止而 include 只產(chǎn)生警告(E_WARNING),腳本會繼續(xù)運行6. 函數(shù) 6.1 用戶自定義函數(shù)
當(dāng)一個函數(shù)是有條件被定義時,必須在調(diào)用函數(shù)之前定義6.2 可變函數(shù)PHP 不支持函數(shù)重載,也不可能取消定義或者重定義已聲明的函數(shù)
但是要避免遞歸函數(shù)/方法調(diào)用超過 100-200 層,因為可能會使堆棧崩潰從而使當(dāng)前腳本終止。 無限遞歸可視為編程錯誤
PHP 支持可變函數(shù)的概念。這意味著如果一個變量名后有圓括號,PHP 將尋找與變量的值同名的函數(shù),并且嘗試執(zhí)行它??勺兒瘮?shù)可以用來實現(xiàn)包括回調(diào)函數(shù),函數(shù)表在內(nèi)的一些用途
function foo() { echo "In foo()6.3 匿名函數(shù)
"; } $func = "foo"; $func(); // This calls foo()
匿名函數(shù)(Anonymous functions),也叫閉包函數(shù)(closures),允許 臨時創(chuàng)建一個沒有指定名稱的函數(shù)。最經(jīng)常用作回調(diào)函數(shù)(callback)參數(shù)的值
$greet = function($name) { printf("Hello %s ", $name); }; $greet("World"); $greet("PHP");7. 類與對象 7.1 基本概念
每個類的定義都以關(guān)鍵字 class 開頭,后面跟著類名,后面跟著一對花括號,里面包含有類的屬性與方法的定義7.2 類的自動加載一個類可以包含有屬于自己的常量,變量(稱為“屬性”)以及函數(shù)(稱為“方法”)
當(dāng)一個方法在類定義內(nèi)部被調(diào)用時,有一個可用的偽變量 $this
在編寫面向?qū)ο螅∣OP) 程序時,很多開發(fā)者為每個類新建一個 PHP 文件。 這會帶來一個煩惱:每個腳本的開頭,都需要包含(include)一個長長的列表(每個類都有個文件)在 PHP 5 中,已經(jīng)不再需要這樣了。 spl_autoload_register() 函數(shù)可以注冊任意數(shù)量的自動加載器,當(dāng)使用尚未被定義的類(class)和接口(interface)時自動去加載。通過注冊自動加載器,腳本引擎在 PHP 出錯失敗前有了最后一個機會加載所需的類
spl_autoload_register(function ($class_name) { require_once $class_name . ".php"; }); $obj = new MyClass1(); $obj2 = new MyClass2();7.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)
構(gòu)造函數(shù)
PHP 5 允行開發(fā)者在一個類中定義一個方法作為構(gòu)造函數(shù)。具有構(gòu)造函數(shù)的類會在每次創(chuàng)建新對象時先調(diào)用此方法,所以非常適合在使用對象之前做一些初始化工作
析構(gòu)函數(shù)
PHP 5 引入了析構(gòu)函數(shù)的概念,這類似于其它面向?qū)ο蟮恼Z言,如 C++。析構(gòu)函數(shù)會在到某個對象的所有引用都被刪除或者當(dāng)對象被顯式銷毀時執(zhí)行7.4 抽象類
PHP 5 支持抽象類和抽象方法。定義為抽象的類不能被實例化。任何一個類,如果它里面至少有一個方法是被聲明為抽象的,那么這個類就必須被聲明為抽象的。被定義為抽象的方法只是聲明了其調(diào)用方式(參數(shù)),不能定義其具體的功能實現(xiàn)7.5 對象接口
使用接口(interface),可以指定某個類必須實現(xiàn)哪些方法,但不需要定義這些方法的具體內(nèi)容接口是通過 interface 關(guān)鍵字來定義的,就像定義一個標(biāo)準(zhǔn)的類一樣,但其中定義所有的方法都是空的
接口中定義的所有方法都必須是公有,這是接口的特性
實現(xiàn)(implements)
要實現(xiàn)一個接口,使用 implements 操作符。類中必須實現(xiàn)接口中定義的所有方法,否則會報一個致命錯誤。類可以實現(xiàn)多個接口,用逗號來分隔多個接口的名稱7.6 Trait
自 PHP 5.4.0 起,PHP 實現(xiàn)了一種代碼復(fù)用的方法,稱為 trait7.7 匿名類 7.8 魔術(shù)方法Trait 是為類似 PHP 的單繼承語言而準(zhǔn)備的一種代碼復(fù)用機制。Trait 為了減少單繼承語言的限制,使開發(fā)人員能夠自由地在不同層次結(jié)構(gòu)內(nèi)獨立的類中復(fù)用 method。Trait 和 Class 組合的語義定義了一種減少復(fù)雜性的方式,避免傳統(tǒng)多繼承和 Mixin 類相關(guān)典型問題
Trait 和 Class 相似,但僅僅旨在用細粒度和一致的方式來組合功能。 無法通過 trait 自身來實例化。它為傳統(tǒng)繼承增加了水平特性的組合;也就是說,應(yīng)用的幾個 Class 之間不需要繼承
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke() 等方法在 PHP 中被稱為"魔術(shù)方法"(Magic methods)7.9 Final 關(guān)鍵字
PHP 5 新增了一個 final 關(guān)鍵字。如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。如果一個類被聲明為 final,則不能被繼承8. 生成器 9. 預(yù)定義變量
名稱 | 用途 |
---|---|
超全局變量 | 超全局變量是在全部作用域中始終可用的內(nèi)置變量 |
$GLOBALS | 引用全局作用域中可用的全部變量 |
$_SERVER | 服務(wù)器和執(zhí)行環(huán)境信息 |
$_GET | HTTP GET 變量 |
$_POST | HTTP POST 變量 |
$_FILES | HTTP 文件上傳變量 |
$_REQUEST | HTTP Request 變量 |
$_SESSION | Session 變量 |
$_ENV | 環(huán)境變量 |
$_COOKIE | HTTP Cookies |
$php_errormsg | 前一個錯誤信息 |
$HTTP_RAW_POST_DATA | 原生POST數(shù)據(jù) |
$http_response_header | HTTP 響應(yīng)頭 |
$argc | 傳遞給腳本的參數(shù)數(shù)目 |
$argv | 傳遞給腳本的參數(shù)數(shù)組 |
結(jié)合實際 PHP 面試,系統(tǒng)的匯總面試中的各種各樣的問題,嘗試提供簡潔準(zhǔn)確的答案。如果你在 PHP 面試中遇到問題,歡迎提 Issues 交流。包含網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)結(jié)構(gòu)與算法、PHP、Web、MySQL、Redis、Linux、安全、設(shè)計模式、架構(gòu)、自我介紹、離職原因、職業(yè)規(guī)劃、準(zhǔn)備問題等部分。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/31085.html
摘要:手冊序言,即,是一種被廣泛應(yīng)用的開源通用腳本語言,尤其適用于開發(fā)并可嵌入中去。該語言的主要目標(biāo)是允許開發(fā)人員快速編寫動態(tài)生成的頁面,但的用途遠不只于此。對于服務(wù)器模塊版本的,僅在服務(wù)器啟動時讀取一次。 PHP手冊 序言 PHP,即PHP: Hypertext Preprocessor,是一種被廣泛應(yīng)用的開源通用腳本語言,尤其適用于 Web 開發(fā)并可嵌入 HTML 中去。它的語法利用了 ...
摘要:字符串分解操作要進行分解的字符串分解的長度。獲取字符串的長度函數(shù)要進行長度計算的字符串包括首尾空格獲取字符串的子串要進行截取的字符串截取開始的字符位置可選,要截取的字符串長度。默認(rèn)從開始到結(jié)尾,字符串的第一個位置為獲取字符串的子串 一 print和echo print 1)語法 int print(str);//str--要輸出的字符串,返回值永遠為1 --語法1 p...
摘要:如果是聲明中的第一個詞,那么就是一個函數(shù)聲明,否則就是一個函數(shù)表達式。給函數(shù)表達式指定一個函數(shù)名可以有效的解決以上問題。始終給函數(shù)表達式命名是一個最佳實踐。也有開發(fā)者干脆關(guān)閉了靜態(tài)檢查工具對重復(fù)變量名的檢查。 你不知道的JS(上卷)筆記 你不知道的 JavaScript JavaScript 既是一門充滿吸引力、簡單易用的語言,又是一門具有許多復(fù)雜微妙技術(shù)的語言,即使是經(jīng)驗豐富的 Ja...
摘要:例如現(xiàn)在的入門學(xué)習(xí)手記系列。收到粉絲留言和打賞的喜悅。安裝上一篇入門學(xué)習(xí)手記一,主要是介紹了的核心概念,是整個學(xué)習(xí)過程的基礎(chǔ)知識。新生成的類似如下入門學(xué)習(xí)手記因為生成的內(nèi)容過多,我直接省略掉了。 showImg(https://segmentfault.com/img/bVbk5Nd?w=1150&h=599); 本人微信公眾號:前端修煉之路,歡迎關(guān)注。 最近開始想要維護一個個人的公眾...
摘要:定場詩守法朝朝憂悶,強梁夜夜歡歌損人利己騎馬騾,正值公平挨餓修橋補路瞎眼,殺人放火兒多我到西天問我佛,佛說我也沒轍前言讀學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法第章數(shù)組,本小節(jié)將繼續(xù)為各位小伙伴分享數(shù)組的相關(guān)知識數(shù)組的新功能。 定場詩 守法朝朝憂悶,強梁夜夜歡歌; 損人利己騎馬騾,正值公平挨餓; 修橋補路瞎眼,殺人放火兒多; 我到西天問我佛,佛說:我也沒轍! 前言 讀《學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法...
閱讀 1878·2021-11-24 10:21
閱讀 1306·2021-09-22 15:25
閱讀 3225·2019-08-30 15:55
閱讀 772·2019-08-30 15:54
閱讀 3529·2019-08-30 14:20
閱讀 1714·2019-08-30 14:06
閱讀 697·2019-08-30 13:11
閱讀 3253·2019-08-29 16:43