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