PHP(外文名稱: Hypertext Preprocessor,中文名稱:「超文本預處理器」)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。
PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的程式語言相比,PHP是將程式嵌入到HTML(標準通用標記語言下的一個應用)文件中去執行,執行效率比完全產生HTML標記的CGI要高許多; PHP還可以執行編譯後程式碼,編譯可以達到加密和最佳化程式碼運行,使程式碼運行更快。
PHP常數:
預定義常數:
PHP本身也定義了大量的預定義常數,可以使用get_defined_constants()來查看,比較常用的預定義常數有:
PHP_OS:PHP系統。
PHP_VERSION:PHP版本。
PHP_EOL:換行符號(跨平台移植型,很重要),會根據不同的作業系統使用不同的值。不同作業系統換行符不同。 window: rn *nix: n MAC: r
PHP_INT_MAX:整形的最大值。
PHP_INT_SIZE:整形佔用的位元組數。
PATH_SEPARATOR:環境變數中路徑與路徑間的分隔符號。
DIRECTORY_SEPARATOR:目錄分隔符號。 window下 '' 和 '/'都可以, *nix只能用'/'。
魔術常數:
形似常量,實非常量,語法上類似常量,稱之為魔術常數!
__FILE__:完整的檔案路徑和檔案名稱。典型的應用(專案程式碼)如:
define('ROOT_PATH',str_replace('7.php','',__FILE__));
echo ROOT_PATH;
結果等同(__DIR__,此常數在PHP5.3新增)
__FUNCTION__:取得目前的函數名稱的魔術常數!
PHP進位的轉換
在PHP中,提供了一系列函數進位的轉換:
hex:16進位;dec:10進位;oct:8進位;bin:2進位。
如:decbin(),將10進位數轉換2進位數;octhex()將8進位轉換成16進位。
對於整形,一旦數值過大,不會溢出,而是發生類型轉換,會轉換成浮點型。
php不支援無符號整數。
如:
$a = PHP_INT_MAX; //2147483648
$b = $a+1;
var_dump($b); //float
在php中,float,double 實際上是相同的。浮點數具有14位十進制數字的精度,最大值 和平台相關,通常是 1.8e308。浮點數的比較是不靠譜的。在編寫程式的時候,不要試圖透過比較兩個浮點數是否相等來獲得業務邏輯。
字串的定義方式
有四種方式來定義字串:雙引號,單引號,heredoc(定界符),nowdoc(定界符)
雙引號可以解析變量,單引號不能解析變數。單引號可以包含雙引號,雙引號可以包含單引號,但是引號不能包含引號本身。
變數能不能解析,不是取決於變數被哪一個包含,而是取決於定義字串是單引號還是雙引號,如果是雙引號,則變數解析,如果是單引號,則不解析。
在字串中,如果有{$ 連在一起的時候,就表示{}當中的這個作為一個變數進行解析。
變數被認為NULL的情況
1.被賦值為 NULL
2.尚未被賦值
3.被unset()
最常見的一個應用程式就是將物件的值賦值為NULL,以銷毀該物件。
資料型別相關函數
var_dump():列印變數的詳細信息,包括類型和值。
gettype():獲得型別。
settype():設定類型。
is系列:其中is_array()會常用到。
isset():檢查一個變數是否存在(設定)。
empty() : 檢查一個變數是否為空.
對於isset()而言,只要有聲明過(有值),不管他的值是什麼,都回傳true.
對於empty()而言,相當於boolean(變數),然後再來取反.
轉換成布林型被認為是FALSE的情況
1.布林值 FALSE 自身
2.整數值 0 (零)
3.浮點型值 0.0 (零)
4.空字串, 以及 字串 "0" (注意"00"、"0.0"被認為是TRUE)
5.空數組
6.特殊型態 NULL (包括尚未設定的變數)
所有其它值都被認為是 TRUE(包括物件和資源)。
PHP的運算規則
除法運算的結果,可能是浮點數,也可能是整數。
在取模運算中,如果有小數,則會移除小數部分。
在取模運算中,結果的正負取決於第一個數。
原碼
將十進制轉成的二進制。以最高位表示符號位,0表示正數,1表示負數。
反碼
對於正數,反碼和原碼相同
對於負數,符號位不變,其它位取反。
補碼
對於正數,補碼和原碼相同
對於負數,在反碼的基礎上 + 1。
轉碼的時候符號不變,運算的時候符號位參與運算,
移位運算
右移:低位溢出,符號位不變,高位用符號位補全 (相當於除以2的n次冪,然後取整)
左移:高位溢出,符號位不變,低位補0 (相當於乘以2的n次方)
不管是左移還是右移,它只會改變該數的大小,不改變符號,所以在移位操作的時候,符號位總是不變的。
PHP運算符號優先權
and or 和 && ||的區別。
用法相同,優先順序不同。 && 、|| > = > and 、 or
break:終止,當執行到break時,整體的循環循環語句直接結束。
continue:繼續,目前循環體結束執行,而繼續執行下次迴圈體。
include和require
設定include_path的值
使用函數set_include_path()。
set_include_path('d:/php/test');然後直接require 'file.php',
注意:設定時,後設定的會將前面設定的覆蓋掉!
取得目前的include_path的值
利用函數:get_include_path()可以得到目前的include_path的值!
目錄之間採用分號連接.
set_include_path('d:/php/test'.PATH_SEPARATOR.get_include_path());
PHP對程式碼的編譯時已原始檔為單位的,目前檔案如果有語法錯誤,php會報錯。不會執行程式碼編譯處理。
require(require_once)和include(include_once)的差別
在載入檔案失敗時,對檔案的依賴不同,觸發的錯誤不一致!級別不同。
require(require_once):會觸發一個 致命錯誤,導致腳本終止;
include(include_once):會觸發一個 警告錯誤,腳本繼續運作。
require(include)和require_once(include_once)的差別:
帶once指的是載一次。在執行載入時,帶once的會先對目前檔案是否已經載入的了該檔案做一判斷。
已經加載:不會再次加載
沒有加載:執行加載!
使用盡量使用require即可。
控制腳本執行
終止腳本執行和延遲腳本執行。
die(),exit():終止腳本執行,一旦出現,腳本立即終止,結束所有執行。並且可以在結束前輸出一段字串。
sleep():延遲腳本執行,暫停一段時間,以秒為單位。最大執行週期為30秒,可以被配置,在php.ini檔案中 max_execution_time = 30
如果在參數清單內,有部分參數存在預設值,但是部分不存在,則將有預設值的參數放在形參列表後邊完成。
func_get_args():得到函數內的所有實參。
$GLOBALS:預定義變數
專門為使用者資料超全域化的一個預先定義變數。
不同於其他的超全域變數:
每個全域變量,自動地 與 $GLOBALS內的一個元素相對應。
增加一個全域變量,則自動在$GLOBALS內增加一個同名元素!反之亦然!
$v1 = 10;
var_dump($GLOBALS['v1']);
$GLOBALS['v2'] = 20;
var_dump($GLOBALS['V2']);
global的功能是
聲明一個局部變量,並將其初始化為同名全域變量的一個引用!
匿名函數的作用
典型的匿名函數可以作為臨時函數來使用。例如,有些內部函數,需要呼叫某個函數來完成操作!像是:array_map():傳回陣列 = array_map('函數',陣列); 對某個陣列內的所有元素利用所提供的函數做操作!
凡是參數需要 callback(callable)地方,都是透過傳遞匿名函數來完成!
PHP數組指標問題
指標函數
php有:獲得指標指向的陣列元素的鍵和值的能力!利用函數:
current(),獲得目前元素的值
key():取得目前元素的鍵。如果指標已經非法,則回傳NULL。用來判斷是否存在元素了
還應該有:將指針移動的能力!
next():可以完成指標的移動!
數組函數:
range():可以得到某個範圍內的元素數組。
array_merge('$arr1','$arr2',...):數字組合併,合併多個。
下標重複會怎麼樣?
數值索引:完全重新索引!
字元下標:後面出現的元素值會覆蓋前面的元素值!
array_rand(數組,個數):隨機地從數組內取得元素,取得是下標!如果多個,則傳回隨機下標的集合!結果是被排序之後的,從小到大!
shuffle(&$arr):打亂數組內元素的順序。注意,參數為引用傳遞!會打亂原數組。
鍵值操作:
array_keys(): 取得所有的鍵。
array_values():取得所有的值。
in_array():是否存在某個值。
array_key_exists():某個鍵是否存在。
array_combine('鍵數組','值數組'): 利用兩個數組合併成一個數組,其中一個作為鍵,另一個作為值!
array_fill('第一個索引值','數量','值'):填入數組。
陣列 = array_fill(起始下標,填滿的元素個數,填滿的值);
array_chunk():拆分數組,原則是子數組內的元素個數!
array_intersect($arr1, $arr2):計算兩個陣列的交集,找到在$arr1中存在,並且也在$arr2中存在的元素,資料是出現在第一個參數中的。
array_diff($arr1, $arr2):計算兩個陣列的差集。找到在arr1中存在,但是在arr2中不存在的元素!
數組模擬棧和佇列:
桟 和 佇列 都是典型資料結構,都是 list 列表的一種。
入棧:array_push(),在陣列的尾端將資料壓入數組。
出棧:array_pop(),在棧頂輸出元素。
array_push()與array_pop()會重新索引,保證所有的元素都是由0開始的逐一遞增。
入隊:array_push(),在陣列的尾端將資料壓入數組。
出隊:array_shift(),在陣列的頂端,將資料取出。
array_unshift(),可以將資料由陣列的頂端壓入陣列。
數組排序函數
排序函數都是引用傳值!
r:reverse,反轉 。 a:association,關聯。 u:user,使用者自訂。
sort('陣列'): 依值,以升序,且不保持鍵值關聯。
rsort('數組'): 依值,以降序,且不保持鍵值關聯。
asort('數組'): 依值,以升序,並保持鍵值關聯。
arsort('陣列'): 依數值,降序,並維持鍵值關聯。
ksort('數組'): 依鍵,以升序,並保持鍵值關聯。
krsort('陣列'): 依照鍵,降序,以保持鍵值關聯。
natsort('數組'): 自然數排序,可以利用計算出來的自然數,將資料排序!
usort('陣列'): 自訂排序,使用者自訂的元素之間的大小關係。使用者提供一個比較兩個元素大小的函數,並且可以告知php元素的大小關係。使用者定義的函數,負責告知usort()兩個元素之間的大小關係,而usort得到關係之後,負責完成排序!利用返回值告知!
升序的回傳效果:
傳回負數,表示第一個元素小;
傳回正數,表示第一個元素大;
返回0,表示相等。
以上就介紹了PHP基礎文法知識,包含了PHP文法方面的內容,希望對PHP教學有興趣的朋友有幫助。