//語法錯誤(syntax error)在語法分析階段,源代碼並未被執行,故不會有任何輸出。php
/* 【命名規則】 */
常量名 類常量建議全大寫,單詞間用下劃線分隔 // MIN_WIDTH
變量名建議用下劃線方式分隔 // $var_name
函數名建議用駝峯命名法 // varName
定界符建議全大寫 // <<<DING, <<<'DING'
文件名建議全小寫和下劃線、數字 // func_name.php
私有屬性名、方法名建議加下劃線 // private $_name func
接口名建議加I // interface I_Namehtml
/* 語言結構 */
array(), echo(), empty(), eval(), exit(), isset(), list(), print(), unset()
echo, print 可省略括號。前端
/* 預約義常量 */
PATH_SEPARATOR //路徑分隔符(Windows爲分號,類Unix爲冒號)
DIRECTORY_SEPARATOR //目錄分隔符
PHP_EOL //當前系統的換行符
PHP_VERSION //PHP版本號
PHP_OS //PHP服務操做系統
PHP_SAPI //用來判斷是使用命令行仍是瀏覽器執行的,若是 PHP_SAPI=='cli' 表示是在命令行下執行
PHP_INT_MAX INT最大值,32位平臺時值爲2147483647
PHP_INT_SIZE INT字長,32位平臺時值爲4(4字節)
M_PI //圓周率值
M_E //天然數node
//PHP運行環境檢測函數
php_sapi_name() //返回一個PHP與WEB服務器接口類型的小寫字符串
該函數返回值與常量PHP_SAPI一致!
接口類型:SAPI(the Server API, SAPI)
可能值:aolserver、apache、apache2filter、apache2handler、caudium、cgi、cgi-fcgi、cli、 continuity、embed、isapi、litespeed milter、nsapi、phttpd、pi3web、roxen、thttpd、tux、webjamesmysql
/* 大小寫問題 */web
/* 可變標識符 */
可變變量 $i = 3; $k = 'i'; echo $$k; //輸出3
可變函數 function func() {echo 'hello!';} $i = 'func'; $i(); //輸出hello
可變下標 $i = '1234'; $k = 3; echo $i[$k]; //輸出4
可變類名 class CLS{public $k = 'hello';} $i = 'CLS'; $j = new $i; echo $j->k;
可變屬性 class CLS{public $k = 'hello';} $i = 'k'; $j = new CLS; echo $j->$i;
可變方法 class CLS{public function k(){echo 'hello';}} $i='k'; $j=new CLS; $j->$i();正則表達式
/* 可變變量 */算法
/* 變量函數 */
get_defined_vars //返回由全部已定義變量所組成的數組(包括環境變量、服務器變量和用戶定義的變量)sql
/* unset() */shell
引用傳遞中,刪除一個變量及其引用,其餘變量及引用均存在,且值依然存在
echo "
";
$v3 = '值';
$v4 = &$v3;
unset($v4);
var_dump($v3, $v4);
/* 變量的最長有效期 */
/* 預約義變量/超全局變量 */
$GLOBALS
$_COOKIE
$_ENV
$_FILES
$_GET
$_POST
$_REQUEST
$_SERVER
$_SESSION
/* 常量定義 */
define(常量名, 常量值, [區分大小寫參數]) //true表示不區分/false表示區分大小寫
const 常量名 = 常量值 // 新,建議
常量名可使用特殊字符
constant($name) // 獲取常量名
// 例:echo constant('-_-');
/* 常量相關函數 */
defined
get_defined_constants
/* 預約義常量 */
FILE 所在文件的絕對路徑
LINE 文件中的當前行號
DIR 文件所在目錄
FUNCTION 函數名稱
CLASS 類的名稱
METHOD 類的方法名
NAMESPACE 當前命名空間的名稱
/* 整型 /
整型佔用4字節,共48=32位,最大值爲2147483647,最小值爲-2147483648,最小值的絕對值比最大值的大1
最高爲表示正負,1表示負,0表示正
/* 進制轉換函數 */
只能十進制與其餘進制進行轉換,只有六種
轉換時,參數應是字符串(即不可含八進制的「0」或十六進制的「0x」)
dec
bin
oct
hex
hexdec() 十六進制轉十進制 也可寫hex2dec()
dechex() 十進制轉十六進制 也可寫dec2hex()
bindec() 二進制轉十進制 也可寫bin2dec()
decbin() 十進制轉二進制 也可寫dex2bin()
octdec() 八進制轉十進制 也可寫oct2dec()
decoct() 十進制轉八進制 也可寫dec2oct()
/* 浮點數 */
浮點數不能比較大小 !!!
幾乎全部小數,在保存時都是近似值而不是精確值!
最大值:+/- 1.8E308
PHP所能保存的最長小數位:14位
/* 單引號字符串 */
單引號字符串中,只能轉義反斜槓和單引號
/* 雙引號字符串 */
只解析字符串一次 !!!
eval 把字符串做爲PHP代碼執行
大括號包裹變量,可肯定變量名界限。如:"aaa{$bbb}ccc"
雙引號中能夠將ASCII碼轉換爲字符
"\x61" -> a // 字符串中不需0,整型中才是0x前導
"\x49\x54\x43\x41\x53\x54" -> ITCAST
將ASCII轉成字符函數chr()
將字符轉成ASCII函數ord()
\n 換行
\r 回車
\t 水平製表符
\ 反斜線
$ 美圓標記
\v 垂直製表符
\e Escape
\f 換頁
" 雙引號"
[0-7]{1,3} 符合該正則表達式序列的是一個以八進制方式來表達的字符
\x[0-9A-Fa-f]{1,2} 符合該正則表達式序列的是一個以十六進制方式來表達的字符
/* 定界符 */
herodoc - 功能同雙引號,能解析
$str = <<<AAA
字符串內容
AAA;
nowdoc - 功能同單引號,不能解析
只在開始位置有單引號
$str = <<<'AAA'
字符串內容
AAA;
/* 字符串的使用 */
可將字符串看成一個字符的集合來使用,可獨立訪問每一個字符。僅適用於單字節字符(字母、數字、半角標點符號),像中文等不可用
$str = "abcd";
echo $str[3]; // d
echo $str{0}; // a
/* 【類型操做函數】 */
//獲取/設置類型
gettype($var) //獲取變量的數據類型
settype($var, $type) //設置變量的數據類型
//類型判斷
is_int
is_float
is_null
is_string
is_resource
is_array
is_bool
is_object
is_numeric 檢測變量是否爲數字或數字字符串
//轉換成指定的數據類型
boolval
floatval
intval
strval
//強制轉換類型
(int)
(float)
(string)
(bool)
(array)
(object)
(unset) //轉換爲NULL
(binary) 轉換和 b前綴轉換 //轉換成二進制
var_dump 打印變量的相關信息。
顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。
數組將遞歸展開值,經過縮進顯示其結構。
var_export($var [,bool $return]) //輸出或返回一個變量的字符串表示
$return:爲true,則返回變量執行後的結果
print_r 打印關於變量的易於理解的信息
empty 檢查一個變量是否爲空
isset 檢測變量是否存在
/* 【流程控制】 */
//if語句的替代語法
if (條件判斷) :
語句塊;
elseif (條件判斷) :
語句塊;
else :
語句塊;
endif;
//流程控制的替代語法
在嵌入HTML時經常使用
將 { 換成 : , 將 } 換成 endif; 等
endif
endwhile
endfor
endforeach
endswitch
/* 【switch】 */
switch (條件) {
case 狀態值1:
語句塊;
[break;]
case 狀態值2:
語句塊;
[break;]
case 狀態值3:
case 狀態值4:
語句塊;
[break;]
default:
語句塊;
[break;]
}
switch是狀態分支,特殊的循環
先計算出狀態值,再去與判斷數做比較
break退出流程
/* 【for循環】 */
for (條件初始化表達式; 條件判斷表達式; 條件變化表達式) {
循環體
}
假設循環體被執行了N次,則
條件初始化表達式被執行1次
條件判斷表達式被執行N+1次
條件變化表達式被執行N次
注意:
1. 循環變量在for語句結束後還能夠繼續使用,值爲第一次失敗的值
2. 循環變量在for循環體內可使用
3. 任何條件表達式都可省略,但分號不能省略
a. 條件初始化表達式被省略時,循環變量被賦值爲null,在與條件判斷時,
進行類型轉換後再比較。也能夠在for語句外進行初始化。
b. 條件判斷表達式被省略時,表示循環爲真,進入死循環
c. 條件變化表達式被省略時,能夠在循環體內完成
4. 每一個表達式都可由多條語句組成,每條語句之間使用逗號分割
若是條件判斷表達式由多條語句組成,都會執行,但只有最後一條語句才做爲判斷條件
5. for只能遍歷數值型索引下標數組
數組長度函數:count()
6. 應該將能夠初始化的語句均放在條件初始化表達式內,這樣能夠省去不少執行次數
/* 【goto】5.3+ 版本 */
用來跳轉到程序中的某一指定位置
該目標位置能夠用目標名稱 加上冒號來標記。
PHP中的goto有必定限制,只能在同一個文件和做用域中跳轉,
也就是說你沒法跳出一個函數或類方法,也沒法跳入到另外一個函數。
你也沒法跳入到任何循環或者switch結構中。
常見的用法是用來跳出循環或者switch,能夠代替多層的break。
能夠從循環(switch)中跳出來,但不能從外部跳轉進去。而函數或類方法,向外向內均不可。
goto a;
echo 'Foo';
a:
echo 'Bar';
/* 【文件加載】 */
require / include / require_once / include_once
文件載入只是載入目標文件內的代碼並執行,與載入的文件類型無關
文件載入屬於執行階段,當執行到require等語句時,才載入該文件的代碼,
編譯並執行,而後回到require等語句位置繼續執行下面的語句
【注意】
在載入開始時,先退出PHP模式;
再載入目標文件代碼,執行該代碼;
結束時,再進入PHP模式。
require:處理失敗,產生 E_COMPILE_ERROR 錯誤,腳本停止。
include:處理失敗,產生 E_WARNING 錯誤,腳本繼續執行。
/* 【相對路徑】 */
當前瀏覽器請求的哪一個腳本,當前位置就是屬於哪一個腳本。
./file 和 file 都表示當前目錄下的file文件
file狀況(嵌套載入文件時):
若是當前目錄沒找到該文件就在代碼文件所在目錄中繼續找。
若是當前目錄找到有該文件,則不會再在代碼文件所在目錄去找也不會再加載。
DIR 腳本文件所在目錄
FILE 腳本文件路徑
include_path 加載文件查找目錄
set_include_path() 設置include_path,可多個,用字符串做參數
該函數設置的path只針對該當前文件有效
該設置只針對查找未直接寫文件路徑方式有效
設置新的include_path會覆蓋原來的
get_include_path() 獲取當前include_path設置項,無參數 路徑分隔符,在Windows下是分號,在Linux下是冒號 利用預約義常量 PATH_SEPARATOR 來得到當前的分隔符
若是直接寫文件名:
1. include_path所設置的
2. 當前目錄
3. 代碼所在文件的目錄
若是文件名前帶有路徑,則會直接根據路徑查找,include_path直接被忽略
/* 【return】 */
return與require結合,可返回文件的內容,return寫在被載入的文件內
return能夠終止所在腳本的執行,做爲普通腳本語句
return能夠返回函數的相應值
/* 【終止和延遲腳本執行】 */
die / exit 終止
return是終止所在腳本的執行
die和exit會當即終止腳本執行
die("到此爲止"); 該函數內的字符串可被輸出
sleep() 延遲(單位:秒)
默認最多可延遲30秒,PHP配置能夠修改 max_execution_time
例:sleep(12);
usleep() 以指定的微秒數延遲執行
time_sleep_until 使腳本睡眠到指定的時間爲止
/* 【函數】 */
/* 【變量做用域】 */
a. 全局變量和局部變量
1) 做用域之間不重疊,即不一樣做用域的變量,之間不可訪問
2) 全局做用域 - 函數以外的區域
3) 局部做用域 - 函數內的區域,每一個函數都是一個獨立的做用域
b. 超全局變量,既能夠在全局也可在局部使用,僅能用系統自帶的,均是數組變量。
$GLOBALS $_COOKIE $_ENV $_FILES $_GET
$_POST $_REQUEST $_SERVER $_SESSION
c. $GLOBALS
1) 不能存在超全局變量,但能夠有超全局的數據!
2) 將須要的數據放到超全局變量的數組內,但統一使用$GLOBALS
3) $GLOBALS 特徵
- 每一個全局變量就是對應$GLOBALS內的一個元素!
每當增長一個全局,則自動在$GLOBALS內增長一個同名元素!
同理,每當增長元素,也會增長一個全局變量,通常在函數內增長
- 作的任何修改,也會映射到另外一個,包括更新和刪除
在函數內訪問全局變量,只需使用$GLOBALS
- 出現過的全局變量,就能夠經過$GLOBALS這個數組取得
4) PHP生命週期中,定義在函數體外部的所謂全局變量,函數內部是不能直接得到的
4) global關鍵字(不建議使用)
將局部變量聲明爲同名全局變量的一個'引用'!至關於常量的引用傳遞
global $var; // $var = &$GLOBALS['var'];
不一樣於$GLOBALS!!!
global在函數產生一個指向函數外部變量的別名變量,而不是真正的函數外部變量。
$GLOBALS確確實實調用是外部的變量,函數內外會始終保持一致。
global的做用是定義全局變量,可是這個全局變量不是應用於整個網站,而是應用於當前頁面,包括include或require的全部文件。
d.
1) 做用域只針對變量,對常量無效
2) 被載入文件中定義的變量做用域取決於被載入的位置。
函數外被載入就是全局,函數內被載入就是局部!
/* 【變量生命週期】 */
/* 【迭代和遞歸】 */
迭代比遞歸效率高!
迭代是一種思想(算法),結構和使用上如同循環!
遞歸是一種思想(算法),將大問題拆分紅小問題,逐一解決小問題以解決大問題
要求大問題和小問題的解決方案是一致的!
遞歸的結構和語法體現如圖函數。函數體內調用函數自己!
遞歸出口:當該問題能夠解決時,則不用再遞歸
/* 【匿名函數/閉包函數】 */
匿名函數,也叫閉包函數(closures),容許臨時建立一個沒有指定名稱的函數。
//閉包用法實例
function closureCreater() {
$x = 1;
return function($fun = null) use(&$x) {//按引用傳值
echo "
" . $x++;
$fun and $fun();
};
}
$x = "hello world";
$test = closureCreater();
$test();
$test(function(){ echo "closure test one"; });
$test(function(){ echo "closure test two"; });
$test(function() use($x){ echo "
".$x;});
//將函數保存爲數組元素
$x = 'outer param.';
$arr = array();
$arr[] = function($str)use($x){ return $str.$x; };
echo $arr0;
/* 【數組】 */
關聯數組:鍵和值有關聯,鍵表示值的邏輯含義。
索引數組:鍵和值無關聯,鍵表示值的位置。一般下標從0開始,遞增元素
count($var [,$mode]) //統計數組元素個數
$mode可選,設爲1或true時則遞歸統計
$var非數組,返回1;$var未初始化或等於null或空數組,返回0
//鍵名的使用
整型數字鍵不需加引號($arr[1])
字符串數字鍵也不需加引號($arr = array('1'=>'abc'); $arr[1])
關聯數組,字符串鍵需加引號($arr = array('a'=>'aaa'); $arr['a'])
關聯數組,雙引號中解析變量,可不加引號($arr = array('a'=>'aaa'); "$arr[a]")
/* 【指針】 */
current/pos 返回當前被內部指針指向的數組單元的值,並不移動指針。
key 返回數組中當前單元的鍵名,並不移動指針
next 將數組中的內部指針向前移動一位,並返回移動後當前單元的值。先移動,再取值。
prev 將數組的內部指針倒回一位,並返回移動後當前單元的值先移動,再取值。
end 將數組的內部指針指向最後一個單元,並返回最後一個單元的值
reset 將數組的內部指針指向第一個單元,並返回第一個數組單元的值
each 返回數組中當前的鍵/值對並將數組指針向前移動一步。
返回的是一個由鍵和值組成的長度爲4的數組,下標0和key表示鍵,下標1和value表示值
在執行each()以後,數組指針將停留在數組中的下一個單元
或者當碰到數組結尾時停留在最後一個單元。
若是要再用 each 遍歷數組,必須使用 reset()。
1. 以上指針操做函數,除了key(),若指針移出數組,則返回false。而key()移出則返回null。 2. 若指針非法,不能進行next/prev操做,能進行reset/end操做 3. current/next/prev 若遇到包含空單元(0或"")也會返回false。而each不會!
list 把數組中的值賦給一些變量。list()是語言結構,不是函數
僅能用於數字索引的數組並假定數字索引從0開始
/* 可用於交換多個變量的值 */ list($a, $b) = array($b, $a);
例:list($drink, , $power) = array('coffee', 'brown', 'caffeine');
/* 【遍歷數組】 */
foreach
foreach (array_expression as [$key =>] & $value)
當foreach開始執行時,數組內部的指針會自動指向第一個單元。
獲取元素信息後,移動指針,再執行循環體
1. foreach自己循環結構,break和continue適用於foreach
2. foreach支持循環的替代語法。
3. $value是保存元素值的變量,對其修改不會改變數組的元素值
4. $value支持元素值的引用拷貝,在$value前加上&便可
5. $key不支持引用傳遞
6. foreach遍歷的是原數組的拷貝,而在循環體對數組的操做是操做原數組
即循環體對數組的操做,對原數組生效,對遍歷不生效。
先拷貝一份數組用做遍歷
while...list...each
while (list($key, $val) = mysql_fetch_row($result)) = each($arr) {
echo "$key => $val\n";
}
/* 【數組函數】 */
//統計計算
count 計算數組中的單元數目或對象中的屬性個數
array_count_values 統計數組中全部的值出現的次數
array_product 計算數組中全部值的乘積
array_sum 計算數組中全部值的和
range 創建一個包含指定範圍單元的數組
//獲取數組內容
array_chunk 將一個數組分割成多個
array array_chunk(array $input, int $size[, bool $preserve_keys])
array_filter 用回調函數過濾數組中的單元
array_slice 從數組中取出一段
array array_slice($arr, $offset [,$len [,$preserve_keys]])
array_keys 返回數組中全部的鍵名
array array_keys(array $input[, mixed $search_value[, bool $strict]] )
若是指定了可選參數 search_value,則只返回該值的鍵名。不然input數組中的全部鍵名都會被返回。
array_values 返回數組中全部的值,並創建數字索引
array_merge 合併一個或多個數組
一個數組中的值附加在前一個數組的後面。
若是輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。
若是數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。
若是隻給了一個數組而且該數組是數字索引的,則鍵名會以連續方式從新索引。
array_merge_recursive 遞歸地合併一個或多個數組
//搜索
in_array 檢查數組中是否存在某個值
bool in_array(mixed $needle, array $haystack[, bool $strict])
array_key_exists 檢查給定的鍵名或索引是否存在於數組中
isset()對於數組中爲NULL的值不會返回TRUE,而 array_key_exists()會
array_search 在數組中搜索給定的值,若是成功則返回相應的鍵名
array_combine 建立一個數組,用一個數組的值做爲其鍵名,另外一個數組的值做爲其值
若是兩個數組的單元數不一樣或者數組爲空時返回FALSE。
array_rand 從數組中隨機取出一個或多個單元,返回鍵名或鍵名組成的數組,下標是天然排序的
array_fill 用給定的值填充數組
array_fill($start, $num, $value)
array_flip 交換數組中的鍵和值
array_pad 用值將數組填補到指定長度
array_reverse 返回一個單元順序相反的數組
array_unique 移除數組中重複的值
array_splice 把數組中的一部分去掉並用其它值取代
implode 將數組元素值用某個字符串鏈接成字符串
explode($delimiter, $str [,$limit]) //使用一個字符串分割另外一個字符串
$delimiter不能爲空字符串""
array_map 將回調函數做用到給定數組的單元上,只能處理元素值,能夠處理多個數組
若是callback參數設爲null,則合併多個數組爲一個多維數組
array_walk 對數組中的每一個成員應用用戶函數,只能處理一個數組,鍵和值都可處理,與foreach功能相同
bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] )
//棧:後進先出
入棧和出棧會從新分配索引下標
array_push 將一個或多個單元壓入數組的末尾(入棧)
array_pop 將數組最後一個單元彈出(出棧) 使用此函數後會重置(reset())array 指針。
//隊列:先進先出
隊列函數會從新分配索引下標
array_unshift 在數組開頭插入一個或多個單元
array_shift 將數組開頭的單元移出數組 使用此函數後會重置(reset())array 指針。
//排序函數
sort 對數組排序
rsort 對數組逆向排序
asort 對數組進行排序並保持索引關係
arsort 對數組進行逆向排序並保持索引關係
ksort 對數組按照鍵名排序
krsort 對數組按照鍵名逆向排序
usort 使用用戶自定義的比較函數對數組中的值進行排序
uksort 使用用戶自定義的比較函數對數組中的鍵名進行排序
uasort 使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯
natsort 用用「天然排序」算法對數組排序
natcasesort 用「天然排序」算法對數組進行不區分大小寫字母的排序
array_multisort 對多個數組或多維數組進行排序
shuffle 將數組打亂
引用傳遞參數,返回bool值。
從新賦予索引鍵名,刪除原有鍵名
//差集
array_udiff_assoc 帶索引檢查計算數組的差集,用回調函數比較數據
array_udiff_uassoc 帶索引檢查計算數組的差集,用回調函數比較數據和索引
array_udiff 用回調函數比較數據來計算數組的差集
array_diff_assoc 帶索引檢查計算數組的差集
array_diff_key 使用鍵名比較計算數組的差集
array_diff_uassoc 用用戶提供的回調函數作索引檢查來計算數組的差集
array_diff_ukey 用回調函數對鍵名比較計算數組的差集
array_diff 計算數組的差集
//交集
array_intersect_assoc 帶索引檢查計算數組的交集
array_intersect_key 使用鍵名比較計算數組的交集
array_intersect_uassoc 帶索引檢查計算數組的交集,用回調函數比較索引
array_intersect_ukey 用回調函數比較鍵名來計算數組的交集
array_intersect 計算數組的交集
array_key_exists 用回調函數比較鍵名來計算數組的交集
array_uintersect_assoc 帶索引檢查計算數組的交集,用回調函數比較數據
array_uintersect 計算數組的交集,用回調函數比較數據
extract($arr [,$type [,$prefix]]) 從數組中將變量導入到當前的符號表(接受結合數組$arr做爲參數並將鍵名看成變量名,值做爲變量的值)
compact($var [,...]) 創建一個數組,包括變量名和它們的值(變量名成爲鍵名而變量的內容成爲該鍵的值)
/* 【僞類型】 */
mixed 說明一個參數能夠接受多種不一樣的(但並沒必要須是全部的)類型。
number 說明一個參數能夠是 integer 或者 float。
callback 回調函數
void void做爲返回類型意味着函數的返回值是無用的。
void做爲參數列表意味着函數不接受任何參數。
/* 【數據庫操做】 */
mysql_connect 鏈接並認證數據庫
mysql_query 發送SQL語句
僅對select, show, explain, describe語句執行成功返回一個資源標識符,其餘語句成功返回true。執行失敗均返回false。
mysql_fetch_assoc 從結果集中取得一行做爲關聯數組
每次只取回一條,相似each
結果集中記錄指針
mysql_fetch_row 從結果集中取得一行做爲枚舉數組
mysql_fetch_array 從結果集中取得一行做爲關聯數組,或數字數組,或兩者兼有
array mysql_fetch_array ( resource $result [, int $ result_type ] )
可選參數result_type可選值爲:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH(默認)
mysql_free_result 釋放結果內存
mysql_close 關閉鏈接
/* 【類和對象】 */
類成員:類常量、靜態屬性、靜態方法 對象成員:非靜態屬性、非靜態方法 # 除此外,類不能包含任何其餘東西!!!
// 構造方法
// 析構方法
析構函數會在到某個對象的全部引用都被刪除或者當對象被顯式銷燬時執行。
void __destruct( void )
// 靜態成員(static關鍵字)
- 聲明類成員或方法爲static,就能夠不實例化類而直接訪問。
- 靜態成員(屬性或方法)均屬於類,故不能經過$this或->訪問。
- 靜態成員是全部對象共享,屬於類。
- 靜態成員用類調用,非靜態成員用對象調用。
- 靜態屬性不能夠由對象經過->操做符來訪問。 - 靜態屬性只能被初始化爲一個字符值或一個常量,不能使用表達式。 因此你能夠把靜態屬性初始化爲整型或數組,但不能指向另外一個變量或函數返回值,也不能指向一個對象。
- 因爲靜態方法不須要經過對象便可調用,因此僞變量$this在靜態方法中不可用。 - 用::方式調用一個非靜態方法會致使一個E_STRICT級別的錯誤。
// 訪問解析操做符(::)
- 能夠用於訪問靜態成員、方法和常量,還能夠用於覆蓋類中的成員和方法。
- 當在類的外部訪問這些靜態成員、方法和常量時,必須使用類的名字。
- self 和 parent 這兩個特殊的關鍵字是用於在類的內部對成員或方法進行訪問的。
// 訪問辨析
特殊:也能夠經過對象訪問類成員。(不建議)
對象名::$類屬性名 $this::$類屬性名 對象名::$類方法名() $this::類方法名()
非靜態方法能夠調用靜態屬性或靜態方法,反之不能夠。
// 類常量
常量的值必須是一個定值,不能是變量,類屬性或其它操做(如函數調用)的結果。
類常量屬於類,使用類訪問,類名::類常量 或 self::類常量
// 自動加載對象
若是一個項目存在多個自動加載函數時,定義一個能夠完成加載的普通函數,並在函數以前使用spl_autoload_register註冊該函數。
註冊函數時,參數爲函數名(注意加引號);註冊方法時,參數爲數組
spl_autoload_register(array(CLASS, '__autoload'));
__CLASS__表示當前類名,如果對象可用$this,詳細見手冊
// 序列化(串行化)
做用:1.在網絡傳輸數據時;2.爲了將數組或對象放在磁盤時
serialize 產生一個可存儲的值的表示
string serialize ( mixed $value )
有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。
對單一的已序列化的變量進行操做,將其轉換回PHP的值。
只能序列化對象內部的數據,即非靜態屬性。
__sleep 序列化需序列化的屬性。
- 提交未提交的數據,或相似的清理操做,部分串行化對象。
- 返回一個包含對象中全部應被序列化的變量名稱的數組
__wakeup 反序列化時,預先準備對象須要的資源
- 從新創建數據庫鏈接,或執行其它初始化操做
public function __sleep() {
return array('server', 'username', 'password', 'db');
}
public function __wakeup() {
$this->connect();
}
// 對象繼承
class 子類名 extends 父類 {}
若是一個對象是子類的對象,那麼同時也是父類的對象。
單繼承:一個類只能繼承一個父類,不能同時繼承多個類。但一個父類能夠被多個子類繼承。
instanceof 判斷某對象是否爲某類的對象
對象名 instanceof 類名
// 訪問控制
public 公有的(繼承鏈、本類、外部都可訪問)
protected 保護的(僅繼承鏈、本類可訪問)
private 私有的(僅本類可訪問)
根據成員定義位置、訪問位置判斷。
// 重寫 override
$this表明本對象,被誰調用,就表明哪一個對象。
私有屬性不能被重寫,每一個私有屬性都會被記錄。在記錄屬性名的同時,還會記錄類。
若是有內置函數被重寫,則可調用父類方法。如調用父類構造方法parent::__construct()
訪問限制:
子類的成員的訪問控制必須相等或弱於父類。
方法參數限制:
參數數量必須相同,參數名可不一樣。
$this爲調用該方法的對象,表示該方法的執行環境對象。
- 對象調用
- 環境的傳遞。若是當前調用時,不能肯定$this的值(靜態調用),此時靜態調用所處對象環境會傳遞到被調用的方法內。
$this並不是永遠表明本對象,而是由方法的執行環境決定。
若是父類中的方法被聲明爲final,則子類沒法覆蓋(重寫)該方法。
若是一個類被聲明爲final,則不能被繼承。
但加有final關鍵字的類依舊能被實例化!
關鍵字:abstract
抽象類不能直接被實例化,必須先繼承該抽象類,而後再實例化子類。
抽象類中至少要包含一個抽象方法。非抽象類不能包含抽象方法。
若是類方法被聲明爲抽象的,那麼其中就不能包括具體的功能實現。抽象方法不能包含大括號及方法體。
繼承一個抽象類的時候,子類必須實現抽象類中的全部抽象方法。
即,子類必須重寫抽象父類中的全部抽象方法。
另外,這些方法的可見性必須和抽象類中同樣(或者更爲寬鬆)。
即,若是抽象類中某個抽象方法被聲明爲protected,那麼子類中實現的方法就應該聲明爲protected或者public,而不能定義爲private。
// 接口
關鍵字:interface
接口不能定義屬性!
interface 接口名 {
接口內容(公共方法聲明的集合)
}
接口也能夠繼承,經過使用extends操做符。
class 類名 implements 接口名 {
接口方法的實現
}
// 靜態延遲綁定
self::,表明本類(當前代碼所在類)
永遠表明本類,由於在類編譯時已經被肯定。
即,子類調用父類方法,self卻不表明調用的子類。
static::,表明本類(調用該方法的類)
用於在繼承範圍內引用靜態調用的類。
運行時,才肯定表明的類。
static::再也不被解析爲定義當前方法所在的類,而是在實際運行時計算的。
// 對象的遍歷(迭代)
foreach語言結構,得到屬性名和屬性值。
foreach ($obj as $p_name => $p_value) {}
Iterator - 可在內部迭代本身的外部迭代器或類的接口
Iterator::current — 返回當前元素
Iterator::key — 返回當前元素的鍵
Iterator::next — 向前移動到下一個元素
Iterator::rewind — 返回到迭代器的第一個元素
Iterator::valid — 檢查當前位置是否有效
//對象之間的傳值是[引用]傳遞。
克隆:新對象 = clone 舊對象
- 全部的引用屬性仍然會是一個指向原來的變量的引用。
__clone()方法在對象被克隆時自動調用。
注意:構造方法對應實例化(new),克隆方法對應克隆(clone)。
// 單例模式
單例模式(Singleton)用於爲一個類生成一個惟一的對象。最經常使用的地方是數據庫鏈接。使用單例模式生成一個對象後,該對象能夠被其它衆多對象所使用。
class MySQLDB {
private static $instance = null; // 存類實例在此屬性中
// 構造方法聲明爲private,防止直接建立對象
private function __construct() {}
public static function getInstance() {
if(! self::$instance instanceof static) {
self::$instance = new static;
}
return self::$instance;
}
private function __clone() {} // 阻止用戶複製對象實例
}
// 魔術方法
__construct 構造方法
__destruct 析構方法
__clone 克隆對象
__sleep 序列化對象
__wakeup 反序列化對象
__autoload 自動加載,使用類但未找到時
__toString 對象被看成字符串使用時
__invoke 當嘗試以調用函數的方式調用一個對象時
指動態地"建立"類屬性和方法
用戶能夠自由的爲對象添加額外的屬性,該特性就是重載。
全部的重載方法都必須被聲明爲public。
當調用當前環境下未定義或不可見的類屬性或方法時,重載方法會被調用。
重載相關魔術方法的參數都不能經過引用傳遞。
處理不可訪問的屬性
屬性重載只能在對象中進行。
在靜態方法中,這些魔術方法將不會被調用。因此這些方法都不能被聲明爲static。
__set 在給不可訪問的屬性賦值時
public void __set(string $name, mixed $value)
做用:批量管理私有屬性,間接保護對象結構
__get 讀取不可訪問的屬性的值時
public mixed __get(string $name)
__isset 當對不可訪問的屬性調用isset()或empty()時
public bool __isset(string $name)
__unset 當對不可訪問的屬性調用unset()時
public void __unset(string $name)
處理不可訪問的方法
__call 當調用一個不可訪問的非靜態方法(如未定義,或者不可見)時自動被調用
public mixed __call(string $name, array $arguments)
__callStatic 當在調用一個不可訪問的靜態方法(如未定義,或者不可見)時自動被調用
public static mixed __callStatic(string $name, array $arguments)
// 類型約束
函數的參數能夠指定只能爲對象或數組
限定爲對象則在形參前加類名,限定爲數組則在形參前加array
類型約束容許NULL值
類型約束不僅是用在類的成員方法裏,也能使用在函數裏。
// 三大特性
封裝:隱藏內部是吸納,僅開發接口。
繼承:一個對象的成員被另外一個對象所使用。語法上體現爲代碼的共用。
多態:多種形態。
// 類與對象·關鍵字
this 表明本對象
public 公有的(繼承鏈、本類、外部都可訪問)
protected 保護的(僅繼承鏈、本類可訪問)
private 私有的(僅本類可訪問)
parent:: 表明父類
self:: 表明本類(當前代碼所在類)
static:: 表明本類(調用該方法的類)
static 靜態成員(屬性、方法),全部對象都可使用,外部也可直接使用或修改,靜態方法不可訪問非靜態成員
final 方法用final不可被子類重載,類用final不可被繼承(方法、類)
const 類常量(屬性)
abstract 抽象類
interface 接口
extends 類繼承(子接口繼承接口、其餘普通類繼承)
implements 接口實現(類實現接口、抽象類實現藉口)(對接口的實現和繼承都可有多個)
Iterator 內置接口(迭代)
clone 克隆
instance 實例
instanceof 某對象是否屬於某類
/* 【類與對象相關函數】 */
class_alias([$original [,$alias]]) 給類取別名
class_exists($class [,$autoload]) 檢查類是否已定義
interface_exists($interface [,$autoload]) 檢查接口是否已被定義
method_exists($obj, $method)檢查類的方法是否存在
property_exists($class, $property) 檢查對象或類是否具備該屬性
get_declared_classes(void) 返回由已定義類的名字所組成的數組
get_declared_interfaces(void) 返回一個數組包含全部已聲明的接口
get_class([$obj]) 返回對象的類名
get_parent_class([$obj]) 返回對象或類的父類名
get_class_methods($class) 返回由類的方法名組成的數組
get_object_vars($obj) 返回由對象屬性組成的關聯數組
get_class_vars($class) 返回由類的默認屬性組成的數組
is_a($obj, $class) 若是對象屬於該類或該類是此對象的父類則返回TRUE
is_subclass_of($obj, $class) 若是此對象是該類的子類,則返回TRUE
get_object_vars($obj) 返回由對象屬性組成的關聯數組
// 經常使用類
Closure 閉包類,匿名函數對象的final類
stdClass 標準類,一般用於對象類保存集合數據
__PHP_Incomplete_Class 不完整類,當只有對象而沒有找到類時,則該對象被認爲是該類的對象
Exception 異常類
PDO 數據對象類
// 魔術常量
DIR 文件所在的目錄
LINE 文件中的當前行號
FILE 文件的完整路徑(絕對路徑)和文件名
CLASS 類的名稱
METHOD 類的方法名,包含類名和方法名
FUNCTION 函數名稱,用在方法內只表示方法名
// 反射機制 Reflection
做用:1. 獲取結構信息 2. 代理執行
ReflectionClass 報告一個類的有關信息
ReflectionMethod 報告一個方法的有關信息
ReflectionClass::export 輸出類結構報告
實例化 ReflectionFunction 類的對象
$f = new ReflectionFunction('func'); // func爲函數func($p)
$f->invoke('param');
/* 頁面跳轉 */
// PHP
header('Loacation: url')
header()執行完畢後,後面的代碼也會繼續執行,故需在該語句後加die結束
沒法給出提示,直接跳轉
// JS方法
location.href = url
// HTML
/* 【Cookie】 */
cookie是一種在遠程瀏覽器端儲存數據並以此來跟蹤和識別用戶的機制。
cookie是HTTP標頭的一部分,所以setcookie()函數必須在其它信息被輸出到瀏覽器前調用,這和對header()函數的限制相似。可使用輸出緩衝函數來延遲腳本的輸出,直到按須要設置好了全部的cookie或者其它HTTP標頭。
// 新增
setcookie 新增一條cookie信息
setcookie($name [,$value [,$expire [,$path [,$domain [,$secure [,$httponly]]]]]])
$name - cookie的識別名稱
使用$_COOKIE['name']抵用名爲name的cookie
$value - cookie值,能夠爲數值或字符串,此值保存在客戶端,不要用來保存敏感數據
假定$name參數的值爲'name',則$_COOKIE['name']就可取得該$value值
$expire - cookie的生存期限(Unix時間戳,秒數)
若是$expire參數的值爲time()+606024*7則可設定cookie在一週後失效。若是未設定該參數,則會話後當即失效。
$path - cookie在服務器端的指定路徑。當設定該值時,服務器中只有指定路徑下的網頁或程序能夠存取該cookie。
若是該參數值爲'/',則cookie在整個domain內有效。
若是設爲'/foo/',則cookie就在domain下的/foo/目錄及其子目錄內有效。
默認值爲設定cookie的當前目錄及其子目錄。
$domain - 指定此cookie所屬服務器的網址名稱,預設是創建此cookie服務器的網址。
要是cookie能在如abc.com域名下的全部子域都有效,則該參賽應設爲'.abc.com'。
$secure - 指明cookie是否僅經過安全的HTTPS鏈接傳送中的cookie的安全識別常數,若是設定該值則表明只有在某種狀況下才能在客戶端與服務端之間傳遞。
當設成true時,cookie僅在安全的鏈接中被設置。默認值爲false。
// 讀取
// 刪除
方法1:將其值設置爲空字符串
setcookie('user[name]', '');
方法2:將目標cookie設爲「已過時」狀態。
//將cookie的生存時間設置爲過時,則生存期限與瀏覽器同樣,當瀏覽器關閉時就會被刪除。
setcookie('usr[name]', '', time()-1);
/* 【session】 */
// 重寫session的存儲機制
session.save_handler = user|files|memcache
PHP配置文件下session.save_path選項,並需手動建立數據存放目錄。
在該配置選項前加層級。分佈子目錄的原則,利用會話ID的相應字母來分配子目錄。仍需手動建立子目錄。
session.save_path = "2; F:/PHPJob/Temp"
初始化$open、釋放資源$close、讀$read、寫$write、銷燬存儲介質$destroy(調用session_destroy時觸發該操做)、垃圾回收$gc
session.hash_function 容許用戶指定生成會話ID的散列算法。
'0' 表示MD5(128 位),'1' 表示SHA-1(160 位)。
session.hash_bits_per_character 容許用戶定義將二進制散列數據轉換爲可讀的格式時每一個字符存放多少個比特。
可能值爲 '4'(0-9,a-f),'5'(0-9,a-v),以及 '6'(0-9,a-z,A-Z,"-",",")。
總hash長度爲128bit,會話ID長度爲128/可能值,4->32, 5->26, 6->22
session_set_save_handler 設置用戶自定義的會話數據存儲函數
bool session_set_save_handler(callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc)
執行順序:open, close, read, write, destroy, gc
session_start 開啓或恢復會話機制
session_id 獲取或設置當前會話ID
session_destroy 銷燬當前會話的全部數據(銷燬數據文件)
session_name 獲取或設置當前會話名稱(cookie變量名,默認爲PHPSESSID)
session_save_path 獲取或設置當前會話數據文件保存路徑
session_set_save_handler 設置用戶自定義的會話數據存儲函數
session_unset 釋放全部會話變量(清空$_SESSION數組元素)
session_encode 將當前會話數據編碼爲一個字符串
session_decode 將字符串解譯爲會話數據
session_write_close 寫入會話數據並關閉會話
session_register_shutdown 關閉會話
session_set_cookie_params 設置會話cookie變量,必須在session_start()前使用。
session_set_cookie_params(0,"/webapp/"); //設置session生存時間
session_get_cookie_params 獲取會話cookie變量。返回包含當前會話cookie信息的數組
ini_set($varname, $newvalue);
//該函數的配置只對當前腳本生效
//並不是全部php.ini設置都可用該函數設置
ini_get($varname) //獲取某配置項信息
ini_get_all([str $extension]) //返回全部配置項信息的數組
session.name 指定會話名以用做cookie的名字。只能由字母數字組成,默認爲PHPSESSID。
session.save_path 定義了傳遞給存儲處理器的參數。
若是選擇了默認的files文件處理器,則此值是建立文件的路徑。默認爲/tmp。
可選的N參數來決定會話文件分佈的目錄深度。
要使用N參數,必須在使用前先建立好這些目錄。在ext/session目錄下有個小的shell腳本名叫mod_files.sh能夠用來作這件事。
若是使用了N參數而且N大於0,那麼將不會執行自動垃圾回收。
session.save_handler 定義了來存儲和獲取與會話關聯的數據的處理器的名字。默認爲files。
若是用戶自定義存儲器,則該值改成user。
ini_set('session.save_handler', 'user');//此設置只針對當前腳本生效。
session.auto_start 指定會話模塊是否在請求開始時自動啓動一個會話。默認爲 0(不啓動)。
session.gc_probability與session.gc_divisor合起來定義了在每一個會話初始化時啓動gc(garbage collection 垃圾回收)進程的機率。此機率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味着在每一個請求中有 1% 的機率啓動gc進程。session.gc_divisor默認爲100。session.gc_probability默認爲1。
/* 【圖片生成與處理】 */GD庫
// 畫布生成
imagecreate 新建一個基於調色板的圖像
resource imagecreate(int $x_size, int $y_size)
imagecreatetruecolor 新建一個真彩色圖像
imagecreatefromgd2 從GD2文件或URL新建一圖像
imagecreatefromgd2part 從給定的GD2文件或URL中的部分新建一圖像
imagecreatefromgd 從GD文件或URL新建一圖像
imagecreatefromgif 由文件或URL建立一個新圖象
imagecreatefromjpeg 由文件或URL建立一個新圖象
imagecreatefrompng 由文件或URL建立一個新圖象
imagecreatefromstring 從字符串中的圖像流新建一圖像
imagecreatefromwbmp 由文件或URL建立一個新圖象
imagecreatefromxbm 由文件或URL建立一個新圖象
imagecreatefromxpm 由文件或URL建立一個新圖象
// 顏色分配
imagecolorallocate 爲一幅圖像分配顏色
int imagecolorallocate(resource $image, int $red, int $green, int $blue)
imagecolorallocatealpha 爲一幅圖像分配顏色 + alpha
imagecolordeallocate 取消圖像顏色的分配
imagecolortransparent 將某個顏色定義爲透明色
imagecolorat 取得某像素的顏色索引值
imagecolorclosest 取得與指定的顏色最接近的顏色的索引值
imagecolorclosestalpha 取得與指定的顏色加透明度最接近的顏色
imagecolorclosesthwb 取得與給定顏色最接近的色度的黑白色的索引
imagecolorexact 取得指定顏色的索引值
imagecolorexactalpha 取得指定的顏色加透明度的索引值
imagecolormatch 使一個圖像中調色板版本的顏色與真彩色版本更能匹配
imagecolorresolve 取得指定顏色的索引值或有可能獲得的最接近的替代值
imagecolorresolvealpha 取得指定顏色 + alpha 的索引值或有可能獲得的最接近的替代值
imagecolorset 給指定調色板索引設定顏色
imagecolorsforindex 取得某索引的顏色
imagecolorstotal 取得一幅圖像的調色板中顏色的數目
// 區域填充
imagefill 區域填充
bool imagefill(resource $image, int $x, int $y, int $color)
imagefilledarc 畫一橢圓弧且填充
imagefilledellipse 畫一橢圓並填充
imagefilledpolygon 畫一多邊形並填充
imagefilledrectangle 畫一矩形並填充
imagefilltoborder 區域填充到指定顏色的邊界爲止
imagesettile 設定用於填充的貼圖
// 圖形建立
imagearc 畫橢圓弧
imagechar 水平地畫一個字符
imagecharup 垂直地畫一個字符
imagedashedline 畫一虛線
imageellipse 畫一個橢圓
imageline 畫一條線段
imagepolygon 畫一個多邊形
imagerectangle 畫一個矩形
imagesetpixel 畫一個單一像素
imagesx 取得圖像寬度
imagesy 取得圖像高度
// 畫筆設置
imagesetbrush 設定畫線用的畫筆圖像
imagesetstyle 設定畫線的風格
imagesetthickness 設定畫線的寬度
// 圖形拷貝
imagecopy 拷貝圖像的一部分
imagecopymerge 拷貝併合並圖像的一部分
imagecopymergegray 用灰度拷貝併合並圖像的一部分
imagecopyresampled 重採樣拷貝部分圖像並調整大小
imagecopyresized 拷貝部分圖像並調整大小
// 字符建立
imagestring 水平地畫一行字符串
imagestringup 垂直地畫一行字符串
imagepsslantfont 傾斜某字體
imagefontheight 取得字體高度
imagefontwidth 取得字體寬度
imagettfbbox 取得使用 TrueType 字體的文本的範圍
imageloadfont 載入一新字體
imagepsencodefont 改變字體中的字符編碼矢量
imagepsextendfont 擴充或精簡字體
// 導出畫布爲圖片
imagegif 以GIF格式將圖像輸出到瀏覽器或文件
imagepng 以PNG格式將圖像輸出到瀏覽器或文件
imagejpeg 以JPEG格式將圖像輸出到瀏覽器或文件
imagewbmp 以WBMP格式將圖像輸出到瀏覽器或文件
經過header()發送 "Content-type: image/圖片格式" 可使PHP腳本直接輸出圖像。
header("Content-type: image/gif"); imagegif($im);
imagegd 將 GD 圖像輸出到瀏覽器或文件
imagegd2 將 GD2 圖像輸出到瀏覽器或文件
// 釋放畫布資源
imagedestroy 銷燬圖像
// 圖像信息
image_type_to_extension 取得圖像類型的文件後綴
getimagesize 取得圖像大小
imagesx 取得圖像寬度
imagesy 取得圖像高度
imageistruecolor 檢查圖像是否爲真彩色圖像
imagetypes 返回當前 PHP 版本所支持的圖像類型
// 圖像設置
imagerotate 用給定角度旋轉圖像
imagealphablending 設定圖像的混色模式
imageantialias 是否使用抗鋸齒(antialias)功能
imagefilter 對圖像使用過濾器
imagegammacorrect 對 GD 圖像應用 gamma 修正
imageinterlace 激活或禁止隔行掃描
/* 【縮略圖】【水印】 */
imagecopyresampled 重採樣拷貝部分圖像並調整大小
bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
imagecopymerge 拷貝併合並圖像的一部分
bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
getimagesize 取得圖像大小
array getimagesize ( string $filename [, array &$imageinfo ] )
/* 【URL函數】 */
get_headers — 取得服務器響應一個 HTTP 請求所發送的全部標頭
get_meta_tags — 從一個文件中提取全部的 meta 標籤 content 屬性,返回一個數組
http_build_query — 生成 URL-encode 以後的請求字符串
urldecode — 解碼已編碼的URL字符串
urlencode — 編碼URL字符串
parse_url — 解析URL,返回其組成部分
'http://username:password@hostname/path?arg=value#anchor'
scheme(如http), host, port, user, pass, path, query(在問號?以後), fragment(在散列符號#以後)
//編碼可用於交換多個變量
$a = '中國';
$b = '四川';
$a = urlencode($a);
$b = urlencode($b);
$a = $a.'&'.$b;
$b = explode('&', $a);
$a = urldecode($b[1]);
$b = urldecode($b[0]);
echo $a, $b;
//list()函數用於交換變量
list($a, $b) = array($b, $a);
/* 【文件、目錄】 */
dirname($path) 返回路徑中的目錄部分
basename($path [,$suffix]) 返回路徑中的文件名部分
pathinfo($path [,$options]) 返回文件路徑的信息(數組元素:dirname,basename,extension)
realpath($path) 返回規範化的絕對路徑名
copy($source, $dest) 拷貝文件
unlink($file) 刪除文件
rename($old, $new) 重命名或移動一個文件或目錄
mkdir($path [,$mode [,$recursive]]) 新建目錄
$mode表示權限,默認0777
$recursive表示可建立多級目錄,默認false
rmdir($dir) 刪除目錄(目錄必須爲空,且具備權限)
file_exists($file) 檢查文件或目錄是否存在
is_file($file) 判斷文件是否存在且爲正常的文件
is_dir($file) 判斷文件名是否存在且爲目錄
is_readable($file) 判斷文件或目錄是否可讀
is_writable($file) 判斷文件或目錄是否可寫
is_executable($file) 判斷給定文件名是否可執行
is_link($file) 判斷給定文件名是否爲一個符號鏈接
tmpfile(void) 創建一個臨時文件
tempnam($dir, $prefix) 在指定目錄中創建一個具備惟一文件名的文件
file($file) 把整個文件讀入一個數組中
fopen($filename, $mode [,$use_include_path])
$mode參數:(加入'b'標記解決移植性)
'r' 只讀方式打開,將文件指針指向文件頭。
'r+' 讀寫方式打開,將文件指針指向文件頭。
'w' 寫入方式打開,將文件指針指向文件頭並將文件大小截爲零。若是文件不存在則嘗試建立之。
'w+' 讀寫方式打開,將文件指針指向文件頭並將文件大小截爲零。若是文件不存在則嘗試建立之。
'a' 寫入方式打開,將文件指針指向文件末尾。若是文件不存在則嘗試建立之。
'a+' 讀寫方式打開,將文件指針指向文件末尾。若是文件不存在則嘗試建立之。
'x' 建立並以寫入方式打開,將文件指針指向文件頭。
'x+' 建立並以讀寫方式打開,將文件指針指向文件頭。
fclose($handle) 關閉一個已打開的文件指針
fread($handle, $length) 讀取文件(可安全用於二進制文件)
fwrite($handle, $string [,$length]) 寫入文件(可安全用於二進制文件)
rewind($handle) 倒回文件指針的位置
ftell($handle) 返回文件指針讀/寫的位置
fseek($handle, $offset [,$whence]) 在文件指針中定位
feof($handle) 測試文件指針是否到了文件結束的位置
fgets 從文件指針中讀取一行
fgetss 從文件指針中讀取一行並過濾掉HTML標記
flock($handle, $opt) 輕便的諮詢文件鎖定
$opt:LOCK_SH 取得共享鎖定(讀取的程序);LOCK_EX 取得獨佔鎖定(寫入的程序);LOCK_UN 釋放鎖定(不管共享或獨佔)
readfile($file) 讀入一個文件並寫入到輸出緩衝
fflush($handle) 將緩衝內容輸出到文件
touch($file [,$time [,$atime]]) 設定文件的訪問和修改時間
fileatime 取得文件的上次訪問時間
filectime 取得文件的inode修改時間
filegroup 取得文件的組
fileinode 取得文件的inode
filemtime 取得文件修改時間
fileowner 取得文件的全部者
fileperms 取得文件的權限
filesize 取得文件大小
filetype 取得文件類型
/* fileinfo */ 獲取/設置文件信息
finfo_open([$opt]) //建立一個文件信息資源
finfo_file($finfo, $file [,$opt]) //獲取文件信息
finfo_set_flags($finfo, $opt) //設置文件信息項
finfo_close($finfo) //關閉文件信息資源
mime_content_type($file) //獲取文件的MIME類型
$opt參數選項:
FILEINFO_MIME_ENCODING 文件編碼類型
FILEINFO_MIME_TYPE 文件MIME類型
//目錄
chdir($dir) 改變當前目錄
chroot($dir) 將當前目錄改變爲當前進程的根目錄
closedir($handle) 關閉目錄句柄
dir($dir) 返回一個目錄的實例對象
getcwd() 取得當前工做目錄
opendir($path) 打開目錄句柄
readdir($handle) 從目錄句柄中讀取條目
rewinddir($handle) 倒回目錄句柄
scandir($dir [,$order]) 列出指定路徑中的文件和目錄
glob($pattern [,$flags]) 尋找與模式匹配的文件路徑
$flags:
GLOB_MARK - 在每一個返回的項目中加一個斜線
GLOB_NOSORT - 按照文件在目錄中出現的原始順序返回(不排序)
GLOB_NOCHECK - 若是沒有文件匹配則返回用於搜索的模式
GLOB_NOESCAPE - 反斜線不轉義元字符
GLOB_BRACE - 擴充 {a,b,c} 來匹配 'a','b' 或 'c'
GLOB_ONLYDIR - 僅返回與模式匹配的目錄項
查找多種後綴名文件:glob('*.{php,txt}', GLOB_BRACE);
/* 解壓縮 */
//新建ZipArchive對象
$zip = new ZipArchive;
//打開ZIP文件
$zip->open($file [,$flags]);
$flags:
ZIPARCHIVE::OVERWRITE 覆蓋(不存在會自動建立)
ZIPARCHIVE::CREATE 添加(不存在會自動建立)
ZIPARCHIVE::EXCL
ZIPARCHIVE::CHECKCONS
//關閉正在處理的ZIP文件
//解壓縮ZIP文件
$zip->extractTo($dest, [$entries]);
$dest:解壓到的文件夾,$entries:解壓的條目
//添加文件到ZIP文件
$zip->addFile($file, [$newname]);
$newname能夠爲"dir/file",這樣能夠將文件添加到壓縮文件中的某個目錄下。其餘函數也如此。
//添加文件到ZIP文件,而內容來自字符串
$zip->addFromString($file, $str);
//添加空文件夾到ZIP文件
$zip->addEmptyDir($dir);
//經過索引刪除ZIP中的文件或文件夾
$zip->deleteIndex($index);
//經過名稱刪除ZIP中的文件或文件夾
$zip->deleteName($name);
//設置ZIP文件註釋
$zip->setArchiveComment($str);
//獲取ZIP文件註釋
$zip->getArchiveComment();
//經過索引獲取文件內容
$zip->getFromIndex($index);
//經過名稱獲取文件內容
$zip->getFromName($name);
//獲取索引文件的文件名稱
$zip->getNameIndex($index);
//經過索引重命名文件
$zip->renameIndex($index, $newname);
//經過名稱重命名文件
$zip->renameName($name, $newname);
//若將文件夾內容打包成ZIP文件,需循環文件夾的全部目錄及文件
function addFileToZip($path, $zip) {
//打開當前文件夾$path
$handle = opendir($path);
//循環讀取子文件夾及文件
//爲防止文件名自己可被轉換爲false的狀況(好比爲"0"),則需用不全等!==
while ($file = readdir($handle) !== false) {
//過濾假文件夾
if ($file != '.' && $file != '..') {
//對於子文件夾則遞歸調用本函數
if (is_dir($path . '/' . $file)) {
addFileToZip($path.'/'.$file, $zip);
} else {
//將文件添加到ZIP對象
$zip->addFile($path . '/' . $file);
}
}
}
//關閉文件夾$path
closedir($path);
}
// ----- END 解壓縮 ----- //
/* 【文件上傳】 */
enctype="multipart/form-data" //FORM標籤必須的屬性
$_FILES 上傳文件信息數組變量
error 上傳錯誤信息
無錯誤
文件大小超過php.ini配置
1) upload_max_filesize 容許上傳的最大文件大小
2) post_max_size 最大的POST數據大小
3) memory_limit 每一個腳本可以使用的最大內存數量(默認128MB)
文件大小超過瀏覽器表單配置
MAX_FILE_SIZE 表示表單數據最大文件大小,該元素需在文件上傳域以前。(默認2M)
文件只有部分被上傳
文件沒有被上傳
6,7 臨時文件寫入時失敗
找不到臨時文件
文件寫入失敗
name 文件名
type 文件類型
tmp_name 上傳文件臨時路徑
size 文件大小
move_uploaded_file($path, $newpath); //將上傳的文件移動到新位置
is_uploaded_file($file) //判斷是否爲POST上傳的文件
//多文件上傳
//HTML中以數組提交
$_FILES['updfile']['tmp_name'][0] //服務器端可訪問第一個文件的臨時路徑,其餘屬性相似
//php.ini配置
file_uploads = On 是否容許HTTP上傳文件
upload_max_filesize 上傳文件大小限制,默認爲2M
post_max_size post方式表單數據總大小限制,默認爲8M
upload_tmp_dir 上傳文件臨時目錄,默認是系統臨時目錄
需設置上傳文件臨時目錄,給其最小權限
GET方式的最大傳輸量爲2K
/* 【批量提交】 */
FORM表單中的name值可用名稱加中括號的形式,在$_POST獲取表單數據時,可多項提交造成數組。
好比多文件上傳file,複選框提交checkbox等。
$id = $_POST['id']; //則可得到所有被選中的複選框值,造成索引數組
若是name值爲:
$id = $_POST['id']; //則可獲取全部name爲id[...]的值,造成管理數組
/* iconv */
//php.ini配置iconv
[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
iconv_set_encoding($type, $charset);
$type:input_encoding,output_encoding,internal_encoding
iconv_get_encoding([$type = "all"])
$type:all,input_encoding,output_encoding,internal_encoding
iconv($in_charset, $out_charset, $str) //將字符串轉換爲目標編碼
指定編碼,可解決中文字符的統計、查詢、截取等!
iconv_strlen($str [,$charset]) //統計字符串的字符數
iconv_strpos($str, $needle, $offset [,$charset]) //查找子串首次出現的位置
iconv_strrpos($str, $needle [,$charset]) //查找子串最後一次出現的位置
iconv_substr($str, $offset [,$len [,$charset]]) //截取子串
/* 【字符串函數】*/
addslashes($str) //使用反斜線轉移字符串
stripcslashes($str) //反引用一個使用addcslashes轉義的字符串
stripslashes($str) //反引用一個引用字符串
chr($ascii) //返回ASCII碼的字符
ord($char) //返回字符的ASCII碼
substr_count($haystack, $needle) //計算子串出現的次數
count_chars($str [,$mode]) 統計每一個字節值出現的次數
//0 - 以全部的每一個字節值做爲鍵名,出現次數做爲值的數組。
//1 - 與0相同,但只列出出現次數大於零的字節值。
//2 - 與0相同,但只列出出現次數等於零的字節值。
//3 - 返回由全部使用了的字節值組成的字符串。
//4 - 返回由全部未使用的字節值組成的字符串。
crypt($str, [$salt]) //單向字符串散列
str_split($str [,$len]) //將字符串按長度分割爲數組
explode($separ, $str) //使用一個字符串分割另外一個字符串
implode([$glue,] $arr) //將數組元素的值根據$glue鏈接成字符串
chunk_split($str [,$len [,$end]]) //將字符串分割成小塊
$len:每段字符串的長度,$end:每段字符串末尾加的字符串(如"\r\n")
html_entity_decode($str [,$flags [,$encoding]]) //將HTML實體轉成字符信息
htmlentities($str [,$flags [,$encoding]]) //將字符信息轉成HTML實體
htmlspecialchars_decode($str) //將特殊HTML實體轉成字符信息
htmlspecialchars($str [,$flags [,$encoding]]) //將字符信息轉成特殊HTML實體
lcfirst($str) //將字符串首字母轉成小寫
ucfirst($str) //將字符串首字母轉成大寫
ucwords($str) //將字符串中每一個單詞的首字母轉換爲大寫
strtolower($str) //將字符串轉化爲小寫
strtoupper($str) //將字符串轉化爲大寫
trim($str [,$charlist]) //去除字符串首尾處的空白字符(或者其餘字符)
ltrim($str [,$charlist]) //去除字符串首段的空白字符(或者其餘字符)
rtrim($str [,$charlist]) //去除字符串末端的空白字符(或者其餘字符)
md5_file($file) //計算指定文件的MD5散列值
md5($str) //計算字符串的MD5散列值
money_format($format, $num) //將數字格式化爲貨幣形式
number_format($num) //格式化數字
nl2br($str) //在字符串全部新行以前插入HTML換行標記
parse_str($str, [$arr]) //解析字符串
print($str) //輸出字符串
printf //輸出格式化字符串
sprintf($format [,$args...]) //格式化字符串
sha1_file //計算文件的sha1散列值
sha1 //計算字符串的sha1散列值
similar_text($first, $second [,$percent]) //計算兩個字符串的類似度
返回在兩個字符串中匹配字符的數目,$percent存儲類似度百分比
str_replace($search, $replace, $str [,$count [,$type]]) //子字符串替換
str_ireplace //字符串替換(忽略大小寫)
str_pad($str, $len [,$pad [,$type]]) //使用另外一個字符串填充字符串爲指定長度
$type:在何處填充。STR_PAD_RIGHT,STR_PAD_LEFT 或 STR_PAD_BOTH
str_repeat($str, $num) //重複一個字符串
str_shuffle($str) //隨機打亂一個字符串
str_word_count($str [,$format [,$charlist]]) //返回字符串中單詞的使用狀況
strcasecmp($str1, $str2) //二進制安全比較字符串(不區分大小寫)
若是str1小於str2,返回負數;若是str1大於str2,返回正數;兩者相等則返回0。
strcmp($str1, $str2) //二進制安全字符串比較
strcoll($str1, $str1) //基於區域設置的字符串比較(區分大小寫,非二進制安全)
strcspn($str1, $str1 [,$start [,$len]]) //獲取不匹配遮罩的起始子字符串的長度
strip_tags($str) //從字符串中去除HTML和PHP標記
strpos($haystack, $needle [,$offset]) //查找字符串首次出現的位置
stripos($haystack, $needle [,$offset]) //查找字符串首次出現的位置(不區分大小寫)
strripos($haystack, $needle [,$offset]) //計算指定字符串在目標字符串中最後一次出現的位置(不區分大小寫)
strrpos($haystack, $needle [,$offset]) //計算指定字符串在目標字符串中最後一次出現的位置
strlen($str) //獲取字符串長度
strpbrk($haystack, $str) //在字符串中查找一組字符的任何一個字符
strrev($str) //反轉字符串
join('', array_reverse(preg_split("//u", $str))); //實現對UTF-8字符串的反轉
strspn$subject, $mask) //計算字符串中所有字符都存在於指定字符集合中的第一段子串的長度。
strstr($haystack, $needle) //查找字符串的首次出現
stristr($haystack, $needle) //查找字符串的首次出現(不區分大小寫)
strrchr($haystack, $needle) //查找指定字符在字符串中的最後一次出現
strtok($str, $token) //標記分割字符串
substr_compare($main_str, $str, $offset [,$len) //二進制安全比較字符串(從偏移位置比較指定長度)
substr_replace$str, $replace, $start [,$len] //替換字符串的子串
strtr($str, $from, $to) //轉換指定字符
substr($str, $start [,$len]) //返回字符串的子串
vfprintf$handle, $format, $args) //將格式化字符串寫入流
vprintf($format, $args) //輸出格式化字符串
vsprintf($format, $args) //返回格式化字符串
wordwrap($str [,$width=75 [,$break='\n']]) //打斷字符串爲指定數量的字串
crc32($str) //計算一個字符串的crc32多項式
crc32算法[循環冗餘校驗算法]
生成str的32位循環冗餘校驗碼多項式。將數據轉換成整數。
/* mbstring(多字節字符串) */
//需開啓mbstring擴展
mb_strimwidth($str, $start, $width [,$trim [,$encoding]]) //保留指定的子串(並補充)
mb_stripos($str, $needle [,$offset [,$encoding]]) //查找子串首次出現的位置(忽略大小寫)
mb_strpos($str, $needle [,$offset [,$encoding]]) //查找子串首次出現的位置
mb_strripos($str, $needle [,$offset [,$encoding]]) //查找子串最後一次出現的位置(忽略大小寫)
mb_strrpos($str, $needle [,$offset [,$encoding]]) //查找子串最後一次出現的位置
mb_strstr($str, $needle [,$before [,$encoding]]) //返回子串首次出現位置以後(前)的字符串
mb_stristr($str, $needle [,$before [,$encoding]]) //返回子串首次出現位置以後(前)的字符串(忽略大小寫)
mb_strrchr($str, $needle [,$before [,$encoding]]) //返回字符最後一次出現位置以後(前)的字符串
mb_strrichr($str, $needle [,$before [,$encoding]]) //返回字符最後一次出現位置以後(前)的字符串(忽略大小寫)
mb_strtoupper($str [,$encoding]) //轉換成大寫
mb_strtolower($str [,$encoding]) //轉換成小寫
mb_strlen($str [,$encoding]) //獲取字符串長度
mb_split($pattern, $str [,$limit]) //將字符串分割成數組
mb_substr($str, $start [,$len [,$encoding]]) //獲取字符串的子串
mb_strcut($str, $start [,$len [,$encoding]]) //獲取字符串的子串
mb_strwidth($str [,$encoding]) //獲取字符串的寬度
mb_substr_count($str, $needle [,$encoding]) //子串在字符串中出現的次數
/* PCRE函數 */
preg_filter($pattern, $replace, $subject [,$limit [,&$count]]) 執行一個正則表達式搜索和替換
preg_replace($pattern, $replace, $subject [,$limit [,&$count]]) 執行一個正則表達式搜索和替換
preg_replace_callback($pattern, $callback, $subject [,$limit [,&$count]]) 執行一個正則表達式搜索而且使用一個回調進行替換
preg_grep($pattern, $input [,$flags]) 返回匹配模式的數組條目
preg_match($pattern, $subject [,&$matches [,$flags [,$offset]]]) 執行一個正則表達式匹配
preg_match_all($pattern, $subject [,&$matches [,$flags [,$offset]]]) 執行一個全局正則表達式匹配
$matches存放返回的結果
$matches[0][n] (n>=0) 表示存放第n+1個匹配到的結果
$matches[m][n] (m>=1, n>=0) 表示存放第n+1個匹配到結果的第m個表達式的內容
preg_split($pattern, $subject [,$limit [,$flags]]) 經過一個正則表達式分隔字符串
$limit表示限制分隔獲得的子串最多隻有limit個,-1表示不限制
$flags參數:
PREG_SPLIT_NO_EMPTY:將返回分隔後的非空部分
PREG_SPLIT_DELIM_CAPTURE:用於分隔的模式中的括號表達式將被捕獲並返回
PREG_SPLIT_OFFSET_CAPTURE:對於每個出現的匹配返回時將會附加字符串偏移量
preg_quote($str [,$delimiter]) 轉義正則表達式字符
preg_last_error() 返回最後一個PCRE正則執行產生的錯誤代碼
/* Math函數 */
base_convert($number, $frombase, $tobase) //在任意進制之間轉換數字
ceil($float) //向上取整
floor($float) //向下取整
exp($float) //計算e的指數
hypot($x, $y) //計算直角三角形的斜邊長
is_nan($val) //判斷是否爲合法數值
log($arg [,$base=e]) //天然對數
max($num1, $num2, ...) //找出最大值
max($arr) //找出數組中的最大值
min($num1, $num2, ...) //找出最小值
rand([$min], $max) //產生一個隨機整數
srand([$seed]) //播下隨機數發生器種子
mt_rand([$min], $max) //生成更好的隨機數
mt_srand($seed) //播下一個更好的隨機數發生器種子
pi() //獲得圓周率值
pow($base, $exp) //指數表達式
sqrt($float) //求平方根
deg2rad($float) //將角度轉換爲弧度
rad2deg($float) //將弧度數轉換爲相應的角度數
round($val [,$pre=0]) //對浮點數進行四捨五入
fmod($x, $y) //返回除法的浮點數餘數
/* 【MySQL函數】 */
mysql_client_encoding([$link]) //返回字符集的名稱
mysql_set_charset($charset [,$link]) //設置客戶端字符集編碼
mysql_connect($host, $user, $pass) //打開一個到MySQL服務器的鏈接
mysql_create_db($db [,$link]) //新建一個MySQL數據庫
mysql_pconnect($host, $user, $pass) //打開一個到MySQL服務器的持久鏈接
mysql_ping([$link]) //Ping一個服務器鏈接,若是沒有鏈接則從新鏈接
mysql_close([$link]) //關閉MySQL鏈接
mysql_data_seek($result, $row) //移動內部結果的指針
mysql_errno([$link]) //返回上一個MySQL操做中的錯誤信息的數字編碼
mysql_error([$link]) //返回上一個MySQL操做產生的文本錯誤信息
mysql_affected_rows([$link]) //取得前一次MySQL操做所影響的記錄行數
mysql_info([$link]) //取得最近一條查詢的信息
mysql_insert_id([$link]) //取得上一步INSERT操做產生的ID
mysql_query($sql [,$link]) //發送一條MySQL查詢
mysql_unbuffered_query($sql [,$link]) //向MySQL發送一條SQL查詢,並不獲取和緩存結果的行
mysql_db_query($db, $sql [,$link]) //發送一條MySQL查詢
mysql_escape_string($str) //轉義一個字符串用於mysql_query
mysql_real_escape_string($str) //轉義SQL語句中使用的字符串中的特殊字符,並考慮到鏈接的當前字符集
mysql_fetch_array($result [,$type]) //從結果集中取得一行做爲關聯數組,或數字數組,或兩者兼有
mysql_fetch_assoc($result) //從結果集中取得一行做爲關聯數組
mysql_fetch_object($result) //從結果集中取得一行做爲對象
mysql_fetch_row($result) //從結果集中取得一行做爲枚舉數組
mysql_fetch_field($result) //從結果集中取得列信息並做爲對象返回
mysql_num_fields($result) //取得結果集中字段的數目
mysql_num_rows($result) //取得結果集中行的數目
mysql_fetch_lengths($result) //取得結果集中每一個輸出的長度
mysql_field_flags($result, $field_offset) //從結果中取得和指定字段關聯的標誌
mysql_field_len($result, $field_offset) //返回指定字段的長度
mysql_field_name($result, $field_offset) //取得結果中指定字段的字段名
mysql_field_seek($result, $field_offset) //將結果集中的指針設定爲制定的字段偏移量
mysql_field_table($result, $field_offset) //取得指定字段所在的表名
mysql_field_type($result, $field_offset) //取得結果集中指定字段的類型
mysql_free_result($result) //釋放結果內存
mysql_list_dbs([$link]) //列出MySQL服務器中全部的數據庫
mysql_list_fields($db, $table [,$link]) //列出MySQL結果中的字段
mysql_list_processes([$link]) //列出MySQL進程
mysql_list_tables($db [,$link]) //列出MySQL數據庫中的表
mysql_result($result, $row [$field]) //取得結果數據
mysql_select_db($db [,$link]) //選擇MySQL數據庫
mysql_tablename($result, $i) //取得表名
mysql_db_name($result, $row [,$field]) //取得mysql_list_dbs()調用所返回的數據庫名
mysql_stat([$link]) //取得當前系統狀態
mysql_thread_id([$link]) //返回當前線程的ID
mysql_get_client_info() //取得MySQL客戶端信息
mysql_get_host_info() //取得MySQL主機信息
mysql_get_proto_info() //取得MySQL協議信息
mysql_get_server_info() //取得MySQL服務器信息
/* 【SQL注入】 */
特殊字符致使的問題:
1. 轉義:mysql_real_escape_string()
對外來數據(GPC: GET, POST, COOKIE)進行轉義
2. 先查詢當前記錄行,再匹配用戶名
//魔術引號機制
自動爲全部提交到服務器的數據增長特殊符號的轉義。
當打開時,全部的單引號,雙引號,反斜線和NULL字符都會被自動加上一個反斜線進行轉義。這和addslashes()做用徹底相同。
php.ini配置:
magic_quotes_gpc = Off
get_magic_quotes_gpc() 獲取當前魔術引號機制的配置信息
/* 【錯誤處理】 */
解析錯誤、運行錯誤
//標準錯誤:
級別、信息、文件、行號
trigger_error 觸發一個用戶自定義的error/warning/notice錯誤信息
//php.ini配置,ini_set()
error_reporting 設置報告哪些級別的錯誤
display_errors = On 是否顯示錯誤報告
log_errors = on 是否開啓錯誤日誌 error_log 發送錯誤信息到錯誤日誌文件
自定義錯誤處理器
set_error_handler — 註冊自定義錯誤處理器函數
//錯誤處理函數
debug_backtrace 產生一條回溯跟蹤
返回數組,包含的鍵值:function, line, file, class, object, type, args
debug_print_backtrace 打印一條回溯
//錯誤常量
手冊>錯誤處理
關閉錯誤報告,記錄錯誤日誌。
關閉錯誤日誌,開啓錯誤報告。
//異常
面向對象語法中的錯誤處理方式。
一個異常就是一個包含當前異常信息的對象。
預約義異常類Exception及其擴展類。
觸發一個異常的錯誤
throw new UserException();
若是沒有被捕獲,則報告致命錯誤。
try {代碼段}
catch (UserException $obj) {代碼段}
須要經過當前異常的類型匹配纔可悲捕獲。
用以處理未被捕獲的異常。
異常處理器函數與catch相似,參數也是含類型的對象。
set_exception_handler — 註冊異常處理器函數
restore_exception_handler — 恢復預約義的異常處理器函數
用戶定義的異常類須繼承自Exception類。
//異常相關屬性
protected string $message 異常消息內容
protected int $code 異常代碼
protected string $file 拋出異常的文件名
protected int $line 拋出異常在該文件中的行號
//異常相關方法
Exception::__construct — 異常構造函數
Exception::getMessage — 獲取異常消息內容
Exception::getPrevious — 返回異常鏈中的前一個異常
Exception::getCode — 獲取異常代碼
Exception::getFile — 獲取發生異常的程序文件名稱
Exception::getLine — 獲取發生異常的代碼在文件中的行號
Exception::getTrace — 獲取異常追蹤信息
Exception::getTraceAsString — 獲取字符串類型的異常追蹤信息
Exception::__toString — 將異常對象轉換爲字符串
Exception::__clone — 異常克隆
/* 【數據庫抽象層】 */
PDO:PHP Data Objects
PHO抽象層默認被加載,但需加載相應數據庫的驅動。
PDO是OOP語法,提供三個類:
PDO:PDO自身
PDOStatement:PDO語句類,提供對語句的後續處理
PDOException:PDO異常類,提供對錯誤的異常處理
//鏈接數據庫
PDO::__construct(str $dsn [,str $username [,str $password [,arr $driver_options]]])
DSN:Data Source Name,數據源
$dsn = 'mysql:dbname=testdb;host=127.0.0.1;port=3306';
//執行沒有返回結果的SQL語句
int PDO::exec(str $statement) //返回影響的記錄數
//執行有返回結果集的SQL語句
PDOStatement PDO::query (string $statement) //返回PDOStatement對象
//處理結果集(PDOStatement對象)
array PDOStatement::fetchAll([int $fetch_style [,mixed $fetch_argument [,array $ctor_args = array()]]]) //默認返回關聯+索引數組
mixed PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] ) //返回一行
string PDOStatement::fetchColumn ([ int $column_number = 0 ] ) //返回一列
//釋放資源
unset($pdo) 或 $pdo = null
//錯誤報告
靜默模式:silent mode,出現錯誤,不主動報告錯誤(默認)
array PDO::errorInfo(void)
警告模式:warning mode,出現錯誤,觸發一個警告級別的錯誤
異常錯誤:exception mode,出現錯誤,拋出異常
bool PDO::setAttribute(int $attribute, mixed $value) //設置PDO類屬性值
PDO::setAttribute('PDO::ATTR_ERRMODE', 'PDO::ERRMODE_SILENT | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION')
//預處理式執行SQL
可對數據自動轉義,可有效抵制SQL注入。
PDOStatement PDO::prepare(string $statement [,array $driver_options=array()])
bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
bool PDOStatement::execute ([ array $input_parameters ] )
/* 【AR模式】 */
表 -> 類
字段 -> 類屬性
數據 -> 對象
/* Date/Time */
date($format [,$timestamp]) //格式化一個本地時間/日期,$timestamp默認爲time()
Y:4位數字完整表示的年份
m:數字表示的月份,有前導零
d:月份中的第幾天,有前導零的2位數字
j:月份中的第幾天,沒有前導零
H:小時,24小時格式,有前導零
h:小時,12小時格式,有前導零
i:有前導零的分鐘數
s:秒數,有前導零
L:是否爲閏年,若是是閏年爲1,不然爲0
M:三個字母縮寫表示的月份,Jan到Dec
W:年份中的第幾周,每週從星期一開始
z:年份中的第幾天
N:數字表示的星期中的第幾天
w:星期中的第幾天,數字表示
e:時區標識
T:本機所在的時區
U:從Unix紀元開始至今的秒數(時間戳)
time() //返回當前的Unix時間戳(秒)
microtime([$get_as_float]) //返回當前Unix時間戳和微秒數
$get_as_float參數存在而且其值等價於TRUE,將返回一個浮點數
strtotime($time [,$now]) //將任何英文文本的日期時間描述解析爲Unix時間戳
date("Y-m-d H:i:s", strtotime("-1 day")); //格式化前一天的時間戳
"now"
"10 September 2000"
"+1 week"
"+1 week -2 days 4 hours 2 seconds"
"last Monday"
"next Thursday"
gmdate($format [,$timestamp]) //格式化一個GMT/UTC 日期/時間
mktime([$hour = date("H") [,$minute = date("i") [,$second = date("s") [,$month = date("n") [,$day = date("j") [,$year = date("Y") [,$is_dst = -1]]]]]]]) //取得一個日期的Unix時間戳
strftime($format [,$timestamp]) //根據區域設置格式化本地時間/日期
date_default_timezone_get($timezone) //獲取默認時區
date_default_timezone_set($timezone) //設置默認時區
/* DateTime */
//date()函數能處理有效時間戳範圍是格林威治時間 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07(由於32位系統能最大正整數限制)
DateTime::__construct([$time="now"]) //構造方法
$time如果時間戳,則在時間戳前加@符號,如'@2345678'
DateTime::setTimezone($timezone) //設置時區
eg: $date->setTimezone(new DateTimeZone('PRC'));
DateTime::format($format) //格式化時間戳,格式化字符串形式同date()函數
/* $_SERVER /
//示例URL:http://desktop/dir/demo.php?a=aaa&b=bbb
PHP_SELF 當前執行腳本的文件名 // /dir/demo.php
GATEWAY_INTERFACE 服務器使用的CGI規範的版本 // CGI/1.1
SERVER_ADDR 當前運行腳本所在的服務器的IP地址 // 127.0.0.1
SERVER_NAME 當前運行腳本所在的服務器的主機名 // desktop
SERVER_SOFTWARE 服務器標識字符串 // Apache/2.2.22 (Win32) PHP/5.3.13
SERVER_PROTOCOL 請求頁面時通訊協議的名稱和版本 // HTTP/1.1
REQUEST_METHOD 訪問頁面使用的請求方式 // GET
REQUEST_TIME 請求開始時的時間戳 // 1386032633
QUERY_STRING 查詢字符串(參數) // a=aaa&b=bbb
DOCUMENT_ROOT 當前運行腳本所在的文檔根目錄 // C:/Users/Administrator/Desktop
HTTP_ACCEPT 當前請求頭中Accept:項的內容 // text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
HTTP_ACCEPT_CHARSET 當前請求頭中Accept-Charset:項的內容 // UTF-8,
HTTP_ACCEPT_ENCODING 當前請求頭中Accept-Encoding:項的內容 // gzip, deflate
HTTP_ACCEPT_LANGUAGE 當前請求頭中Accept-Language:項的內容 // zh-cn,zh;q=0.5
HTTP_CONNECTION 當前請求頭中Connection:項的內容 // keep-alive
HTTP_HOST 當前請求頭中Host:項的內容 // desktop
HTTP_REFERER 引導用戶代理到當前頁的前一頁的地址
HTTP_USER_AGENT 當前請求頭中User-Agent:項的內容 // Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
HTTPS 若是腳本是經過HTTPS協議被訪問,則被設爲一個非空的值
REMOTE_ADDR 瀏覽當前頁面的用戶的IP地址 // 127.0.0.1
REMOTE_HOST 瀏覽當前頁面的用戶的主機名
REMOTE_PORT 用戶機器上鍊接到Web服務器所使用的端口號 // 49197
REMOTE_USER 經驗證的用戶
REDIRECT_REMOTE_USER 驗證的用戶,若是請求已在內部重定向
SCRIPT_FILENAME 當前執行腳本的絕對路徑 // C:/Users/Administrator/Desktop/dir/demo.php
SERVER_ADMIN 該值指明瞭Apache服務器配置文件中的SERVER_ADMIN參數 //admin@shocker.com
SERVER_PORT Web服務器使用的端口 // 80
SERVER_SIGNATURE 包含了服務器版本和虛擬主機名的字符串
PATH_TRANSLATED 當前腳本所在文件系統(非文檔根目錄)的基本路徑
SCRIPT_NAME 當前腳本的路徑 // /dir/demo.php
REQUEST_URI URI用來指定要訪問的頁面 // /dir/demo.php?a=aaa&b=bbb
PHP_AUTH_DIGEST 客戶端發送的「Authorization」 HTTP頭內容
PHP_AUTH_PW 用戶輸入的密碼
AUTH_TYPE 認證的類型
PATH_INFO 包含由客戶端提供的、跟在真實腳本名稱以後而且在查詢語句(query string)以前的路徑信息
ORIG_PATH_INFO 在被PHP處理以前,「PATH_INFO」的原始版本
/* 緩存 */
/* ob緩存(輸出控制) */ Output Buffering
ob_start() //打開一個輸出緩衝區,全部的輸出信息再也不直接發送到瀏覽器,而是保存在輸出緩衝區裏面。
ob_start('ob_gzhandler'); //將gz編碼的數據發送到支持壓縮頁面的瀏覽器
ob_clean(); //刪除內部緩衝區的內容,不關閉緩衝區(不輸出)。
ob_end_clean(); //刪除內部緩衝區的內容,關閉緩衝區(不輸出)。
ob_get_clean(); //返回內部緩衝區的內容,關閉緩衝區。至關於執行ob_get_contents()與ob_end_clean()
ob_flush(); //發送內部緩衝區的內容到瀏覽器,刪除緩衝區的內容,不關閉緩衝區。
ob_end_flush(); //發送內部緩衝區的內容到瀏覽器,刪除緩衝區的內容,關閉緩衝區。
ob_get_flush(); //返回內部緩衝區的內容,並關閉緩衝區,再釋放緩衝區的內容。至關於ob_end_flush()並返回緩衝區內容。
flush(); //將當前爲止程序的全部輸出發送到用戶的瀏覽器
ob_get_contents(); //返回緩衝區的內容,不輸出。
ob_get_length(); //返回內部緩衝區的長度,若是緩衝區未被激活,該函數返回FALSE。
ob_get_level(); //Return the nesting level of the output buffering mechanism.
ob_get_status(); //獲取ob狀態信息
ob_implicit_flush(); //打開或關閉絕對刷新,默認爲關閉,打開後ob_implicit_flush(true),所謂絕對刷新,即當有輸出語句(e.g: echo)被執行時,便把輸出直接發送到瀏覽器,而再也不須要調用flush()或等到腳本結束時才輸出。
ob_gzhandler //ob_start回調函數,用gzip壓縮緩衝區的內容。
ob_list_handlers //List all output handlers in use
output_add_rewrite_var //Add URL rewriter values
output_reset_rewrite_vars //Reset URL rewriter values
這些函數的行爲受php_ini設置的影響:
output_buffering //該值爲ON時,將在全部腳本中使用輸出控制;若該值爲一個數字,則表明緩衝區的最大字節限制,當緩存內容達到該上限時將會自動向瀏覽器輸出當前的緩衝區裏的內容。
output_handler //該選項可將腳本全部的輸出,重定向到一個函數。例如,將 output_handler 設置爲 mb_output_handler() 時,字符的編碼將被修改成指定的編碼。設置的任何處理函數,將自動的處理輸出緩衝。
implicit_flush //做用同ob_implicit_flush,默認爲Off。
//ob緩存做用
1)防止在瀏覽器有輸出以後再使用setcookie()、header()或session_start()等發送頭文件的函數形成的錯誤。其實這樣的用法少用爲好,養成良好的代碼習慣。
2)捕捉對一些不可獲取的函數的輸出,好比phpinfo()會輸出一大堆的HTML,可是咱們沒法用一個變量例如$info=phpinfo();來捕捉,這時候ob就管用了。
3)對輸出的內容進行處理,例如進行gzip壓縮,例如進行簡繁轉換,例如進行一些字符串替換。
4)生成靜態文件,其實就是捕捉整頁的輸出,而後存成文件。常常在生成HTML,或者整頁緩存中使用。
/* 網站併發 */
測試工具:apache/bin/ab.exe
用法:cmd{%apache-bin%}>ab.exe -n 執行訪問次數 -c 用戶併發數量 URL地址
MPM(多路處理模塊):perfork(預處理模式), worker(工做者模式), winnt(Win系統)
MPM配置:httpd-mpm.conf
查看當前MPM模式:httpd –l mpm_xxx.c中xxx表示當前模式類型
httpd.conf配置(開啓MPM):#Include conf/extra/httpd-mpm.conf
ThreadsPerChild 1000 #中型網站1500-5500合理
MaxRequestsPerChild 0
StartServers 5 #預先啓動
MinSpareServers 5
MaxSpareServers 10 #最大空閒進程
ServerLimit 1500 #用於修改apache編程參數
MaxClients 1000 #最大併發數
MaxRequestsPerChild 0 #一個進程對應的線程數,對worker更用
ServerLimit 2500 #用於修改apache編程參數
MaxClients 2000 #最大併發數
/* 靜態化 */
url能夠是js/php/圖片等,返回的數據替換
/* 命令行CLI */
//顯示幫助信息
php -h
//解析並運行-f選項給定的文件名
php [-f]
//在命令行內運行單行PHP代碼
php [options] -r
[--] [args...]
無需加上PHP的起始和結束標識符,不然將會致使語法解析錯誤
//調用phpinfo()函數並顯示出結果
php -i/--info
//檢查PHP語法
php -l/--syntax-check
//打印出內置以及已加載的PHP及Zend模塊
php -m/--modules
//將PHP,PHP SAPI和Zend的版本信息寫入標準輸出
php -v/--version
//參數接收
$argv 傳遞給腳本的參數數組
第一個參數老是當前腳本的文件名,所以$argv[0]就是腳本文件名
$argc 傳遞給腳本的參數數目
腳本的文件名老是做爲參數傳遞給當前腳本,所以$argc的最小值爲1
包含當運行於命令行下時傳遞給當前腳本的參數的數組
此兩個變量僅在register_argc_argv打開時可用
/* 設計模式 */
單例模式:爲一個類生成一個惟一的對象。使用單例模式生成一個對象後,該對象能夠被其它衆多對象所使用。
工廠模式:封裝對象的創建過程。能夠在對象自己建立對象工廠或者是一個額外的工廠類
MVC模式:用戶->控制器->模型->控制器->視圖->控制器->用戶
/* 配置選項 */
set_time_limit($seconds) //設置腳本最大執行時間(默認30秒),0表示不限制
ini_get($varname) //獲取一個配置選項的值
ini_set($varname, $newvalue) //爲一個配置選項設置值
extension_loaded($ext_name) //檢測一個擴展是否已經加載
get_extension_funcs($ext_name) //返回模塊函數名的數組
/* 【其餘】 */ version_compare(str $ver1, str $ver2 [,str $operator]) //比較版本號 $operator表示操做符,可選:<, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne 若是省略$operator,返回兩個版本號的差值。 符號@ 用於抑制系統運行錯誤的報告顯示 memory_get_usage //獲取當期內存使用狀況 memory_get_peak_usage //獲取內存使用的峯值 getrusage //獲取CPU使用狀況(Windows不可用) uniqid([$prefix]) //獲取一個帶前綴、基於當前時間微秒數的惟一ID highlight_string($str [,$return]) //字符串的語法高亮 $return:設置爲TRUE,高亮後的代碼不會被打印輸出,而是以字符串的形式返回。高亮成功返回TRUE,不然返回FALSE。 highlight_file($file [,$return]) //語法高亮一個文件 __halt_compiler //中斷編譯器的執行 get_browser //獲取瀏覽器具備的功能 get_browser ([ string $user_agent [, bool $return_array = false ]] ) 若是設置爲 TRUE,該函數會返回一個 array,而不是 object eval($code) //把字符串做爲PHP代碼執行 gzcompress($str [,$level=-1]) //壓縮字符串 gzuncompress($str) //解壓縮字符串 gzencode($str [,$level=-1]) //壓縮字符串 gzdecode($str) //解壓縮字符串 ignore_user_abort($bool) //設置客戶端斷開鏈接時是否中斷腳本的執行