首頁 >後端開發 >php教程 >PHP基礎文法知識

PHP基礎文法知識

WBOY
WBOY原創
2016-08-08 09:33:101297瀏覽

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教學有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn