PHP基礎文法隨記

來源:互聯網
上載者:User

標籤:io   ar   os   使用   sp   strong   檔案   資料   on   

PHP常量:預定義常量:

PHP自身也定義了大量的預定義常量,可以使用get_defined_constants()來查看,比較常用的預定義常量有:

PHP_OSPHP系統。

PHP_VERSIONPHP版本。

PHP_EOL分行符號(跨平台移植型,很重要),會根據不同的作業系統使用不同的值。不同作業系統分行符號不同。 window: \r\n   *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.Null 字元串, 以及 字串 "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基礎文法隨記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.