標籤:io ar os 使用 sp strong 檔案 資料 on
PHP常量:預定義常量:
PHP自身也定義了大量的預定義常量,可以使用get_defined_constants()來查看,比較常用的預定義常量有:
PHP_OS:PHP系統。
PHP_VERSION:PHP版本。
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基礎文法隨記