php 學習筆記

   1 //本文轉自:http://www.cnblogs.com/ronghua/p/6002995.html
   2 
   3 //語法錯誤(syntax error)在語法分析階段,源代碼並未被執行,故不會有任何輸出。
   4 
   5 
   6 /* 【命名規則】 */
   7 常量名 類常量建議全大寫,單詞間用下劃線分隔    // MIN_WIDTH
   8 變量名建議用下劃線方式分隔            // $var_name
   9 函數名建議用駝峯命名法                // varName
  10 定界符建議全大寫                 // <<<DING, <<<'DING'
  11 文件名建議全小寫和下劃線、數字        // func_name.php
  12 私有屬性名、方法名建議加下劃線        // private $_name _func
  13 接口名建議加I_                    // interface I_Name
  14 
  15 /* 語言結構 */
  16 array(), echo(), empty(), eval(), exit(), isset(), list(), print(), unset()
  17 echo, print 可省略括號。
  18 
  19 /* 預約義常量 */
  20 PATH_SEPARATOR  //路徑分隔符(Windows爲分號,類Unix爲冒號)
  21 DIRECTORY_SEPARATOR //目錄分隔符
  22 PHP_EOL //當前系統的換行符
  23 PHP_VERSION //PHP版本號
  24 PHP_OS  //PHP服務操做系統
  25 PHP_SAPI    //用來判斷是使用命令行仍是瀏覽器執行的,若是 PHP_SAPI=='cli' 表示是在命令行下執行
  26 PHP_INT_MAX                    INT最大值,32位平臺時值爲2147483647
  27 PHP_INT_SIZE                   INT字長,32位平臺時值爲4(4字節)
  28 M_PI    //圓周率值
  29 M_E     //天然數
  30 
  31 //PHP運行環境檢測函數
  32 php_sapi_name() //返回一個PHP與WEB服務器接口類型的小寫字符串
  33 該函數返回值與常量PHP_SAPI一致!
  34 接口類型:SAPI(the Server API, SAPI)
  35 可能值:aolserver、apache、apache2filter、apache2handler、caudium、cgi、cgi-fcgi、cli、 continuity、embed、isapi、litespeed milter、nsapi、phttpd、pi3web、roxen、thttpd、tux、webjames
  36 
  37 
  38 /* 大小寫問題 */
  39 - 類名、方法名、屬性名、函數名:不區分大小寫
  40 - 變量名、常量名、元素下標:區分大小寫
  41 
  42 /* 可變標識符 */
  43 可變變量  $i = 3; $k = 'i'; echo $$k; //輸出3
  44 可變函數  function func() {echo 'hello!';} $i = 'func'; $i(); //輸出hello
  45 可變下標  $i = '1234'; $k = 3; echo $i[$k];   //輸出4
  46 可變類名  class CLS{public $k = 'hello';} $i = 'CLS'; $j = new $i; echo $j->k;
  47 可變屬性  class CLS{public $k = 'hello';} $i = 'k'; $j = new CLS; echo $j->$i;
  48 可變方法  class CLS{public function k(){echo 'hello';}} $i='k'; $j=new CLS; $j->$i();
  49 
  50 /* 可變變量 */
  51 * 用於業務邏輯判斷獲得某些具體信息
  52     $var_name = "class_name";
  53     $$var_name = "PHP0913";        // $class_name = "PHP0913";$class_name已存入內存中
  54     var_dump($class_name);        // var_dump($$var_name);
  55 
  56 /* 變量函數 */
  57 get_defined_vars    //返回由全部已定義變量所組成的數組(包括環境變量、服務器變量和用戶定義的變量)
  58 
  59 
  60 /* unset() */
  61 * unset()僅刪除當前變量名和引用,其值並未被刪除
  62 * 引用傳遞中,刪除一個變量及其引用,其餘變量及引用均存在,且值依然存在
  63 
  64      echo "<br />";
  65     $v3 = '值';
  66     $v4 = &$v3;
  67     unset($v4);
  68     var_dump($v3, $v4);
  69 
  70 /* 變量的最長有效期 */
  71 * 當前腳本的執行週期,腳本執行結束,變量即消失
  72 
  73 
  74 /* 預約義變量/超全局變量 */
  75 $GLOBALS
  76 $_COOKIE
  77 $_ENV
  78 $_FILES
  79 $_GET
  80 $_POST
  81 $_REQUEST
  82 $_SERVER
  83 $_SESSION
  84 
  85 
  86 /* 常量定義 */
  87 define(常量名, 常量值, [區分大小寫參數])        //true表示不區分/false表示區分大小寫
  88 const 常量名 = 常量值    // 新,建議
  89 常量名可使用特殊字符
  90 constant($name)        // 獲取常量名
  91                     // 例:echo constant('-_-');
  92 
  93 
  94 /* 常量相關函數 */
  95 defined
  96 get_defined_constants
  97 
  98 
  99 /* 預約義常量 */
 100 __FILE__            所在文件的絕對路徑
 101 __LINE__            文件中的當前行號
 102 __DIR__            文件所在目錄
 103 __FUNCTION__        函數名稱
 104 __CLASS__            類的名稱
 105 __METHOD__        類的方法名
 106 __NAMESPACE__        當前命名空間的名稱
 107 
 108 
 109 /* 整型 */
 110 整型佔用4字節,共4*8=32位,最大值爲2147483647,最小值爲-2147483648,最小值的絕對值比最大值的大1
 111 最高爲表示正負,1表示負,0表示正
 112 
 113 
 114 /* 進制轉換函數 */
 115 只能十進制與其餘進制進行轉換,只有六種
 116 轉換時,參數應是字符串(即不可含八進制的「0」或十六進制的「0x」)
 117     dec
 118      bin
 119      oct
 120     hex
 121 hexdec()    十六進制轉十進制        也可寫hex2dec()
 122 dechex()    十進制轉十六進制        也可寫dec2hex()
 123 bindec()    二進制轉十進制        也可寫bin2dec()
 124 decbin()    十進制轉二進制        也可寫dex2bin()
 125 octdec()    八進制轉十進制        也可寫oct2dec()
 126 decoct()    十進制轉八進制        也可寫dec2oct()
 127 
 128 
 129 /* 浮點數 */
 130 浮點數不能比較大小 !!!
 131 幾乎全部小數,在保存時都是近似值而不是精確值!
 132 最大值:+/- 1.8E308
 133 PHP所能保存的最長小數位:14位
 134 
 135 /* 單引號字符串 */
 136 單引號字符串中,只能轉義反斜槓和單引號
 137 
 138 /* 雙引號字符串 */
 139 只解析字符串一次 !!!
 140 eval     把字符串做爲PHP代碼執行
 141 大括號包裹變量,可肯定變量名界限。如:"aaa{$bbb}ccc"
 142 雙引號中能夠將ASCII碼轉換爲字符
 143 "\x61" -> a    // 字符串中不需0,整型中才是0x前導
 144 "\x49\x54\x43\x41\x53\x54" -> ITCAST
 145 將ASCII轉成字符函數chr()
 146 將字符轉成ASCII函數ord()
 147 #雙引號轉義列表
 148 \n 換行
 149 \r 回車
 150 \t 水平製表符
 151 \\ 反斜線
 152 \$ 美圓標記
 153 \v 垂直製表符
 154 \e Escape
 155 \f 換頁
 156 \" 雙引號"
 157 \[0-7]{1,3} 符合該正則表達式序列的是一個以八進制方式來表達的字符  
 158 \x[0-9A-Fa-f]{1,2} 符合該正則表達式序列的是一個以十六進制方式來表達的字符  
 159 
 160 
 161 
 162 /* 定界符 */
 163 herodoc - 功能同雙引號,能解析
 164 $str = <<<AAA
 165 字符串內容
 166 AAA;
 167 
 168 nowdoc - 功能同單引號,不能解析
 169 只在開始位置有單引號
 170 $str = <<<'AAA'
 171 字符串內容
 172 AAA;
 173 
 174 
 175 /* 字符串的使用 */
 176 可將字符串看成一個字符的集合來使用,可獨立訪問每一個字符。僅適用於單字節字符(字母、數字、半角標點符號),像中文等不可用
 177 $str = "abcd";
 178 echo $str[3];   // d
 179 echo $str{0};   // a
 180 
 181 
 182 /* 【類型操做函數】 */
 183 //獲取/設置類型
 184 gettype($var) //獲取變量的數據類型
 185 settype($var, $type) //設置變量的數據類型
 186 
 187 //類型判斷
 188 is_int
 189 is_float
 190 is_null
 191 is_string
 192 is_resource
 193 is_array
 194 is_bool
 195 is_object       
 196 is_numeric      檢測變量是否爲數字或數字字符串
 197 
 198 //轉換成指定的數據類型
 199 boolval
 200 floatval
 201 intval
 202 strval
 203 
 204 //強制轉換類型
 205 (int)
 206 (float)
 207 (string)
 208 (bool)
 209 (array)
 210 (object)
 211 (unset) //轉換爲NULL
 212 (binary) 轉換和 b前綴轉換  //轉換成二進制
 213 
 214 var_dump        打印變量的相關信息。
 215                 顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。
 216                 數組將遞歸展開值,經過縮進顯示其結構。
 217 var_export($var [,bool $return]) //輸出或返回一個變量的字符串表示
 218     $return:爲true,則返回變量執行後的結果
 219 print_r         打印關於變量的易於理解的信息
 220 empty           檢查一個變量是否爲空
 221 isset           檢測變量是否存在
 222 
 223 /* 【流程控制】 */
 224 //if語句的替代語法
 225 if (條件判斷) :
 226    語句塊;
 227 elseif (條件判斷) :
 228    語句塊;
 229 else :
 230    語句塊;
 231 endif;
 232 
 233 //流程控制的替代語法
 234 在嵌入HTML時經常使用
 235 將 { 換成 : , 將 } 換成 endif; 等
 236 endif
 237 endwhile
 238 endfor
 239 endforeach
 240 endswitch
 241 
 242 
 243 /* 【switch】 */
 244 switch (條件) {
 245    case 狀態值1:
 246        語句塊;
 247        [break;]
 248    case 狀態值2:
 249        語句塊;
 250        [break;]
 251    case 狀態值3:
 252    case 狀態值4:
 253        語句塊;
 254        [break;]
 255    default:
 256        語句塊;
 257        [break;]
 258 }
 259 switch是狀態分支,特殊的循環
 260 先計算出狀態值,再去與判斷數做比較
 261 break退出流程
 262 
 263 
 264 /* 【for循環】 */
 265 for (條件初始化表達式; 條件判斷表達式; 條件變化表達式) {
 266 循環體
 267 }
 268 
 269 假設循環體被執行了N次,則
 270 條件初始化表達式被執行1次
 271 條件判斷表達式被執行N+1次
 272 條件變化表達式被執行N次
 273 
 274 注意:
 275     1. 循環變量在for語句結束後還能夠繼續使用,值爲第一次失敗的值
 276     2. 循環變量在for循環體內可使用
 277     3. 任何條件表達式都可省略,但分號不能省略
 278         a. 條件初始化表達式被省略時,循環變量被賦值爲null,在與條件判斷時,
 279             進行類型轉換後再比較。也能夠在for語句外進行初始化。
 280         b. 條件判斷表達式被省略時,表示循環爲真,進入死循環
 281         c. 條件變化表達式被省略時,能夠在循環體內完成
 282     4. 每一個表達式都可由多條語句組成,每條語句之間使用逗號分割
 283         若是條件判斷表達式由多條語句組成,都會執行,但只有最後一條語句才做爲判斷條件
 284     5. for只能遍歷數值型索引下標數組
 285         數組長度函數:count()
 286     6. 應該將能夠初始化的語句均放在條件初始化表達式內,這樣能夠省去不少執行次數
 287 
 288 
 289 /* 【goto】5.3+ 版本 */
 290 用來跳轉到程序中的某一指定位置
 291 該目標位置能夠用目標名稱 加上冒號來標記。
 292 PHP中的goto有必定限制,只能在同一個文件和做用域中跳轉,
 293     也就是說你沒法跳出一個函數或類方法,也沒法跳入到另外一個函數。
 294     你也沒法跳入到任何循環或者switch結構中。
 295     常見的用法是用來跳出循環或者switch,能夠代替多層的break。 
 296 能夠從循環(switch)中跳出來,但不能從外部跳轉進去。而函數或類方法,向外向內均不可。
 297 goto a;
 298 echo 'Foo';
 299 a:
 300 echo 'Bar';
 301 
 302 
 303 /* 【文件加載】 */
 304 require / include / require_once / include_once
 305 文件載入只是載入目標文件內的代碼並執行,與載入的文件類型無關
 306 
 307 文件載入屬於執行階段,當執行到require等語句時,才載入該文件的代碼,
 308     編譯並執行,而後回到require等語句位置繼續執行下面的語句
 309 【注意】
 310     在載入開始時,先退出PHP模式;
 311     再載入目標文件代碼,執行該代碼;
 312     結束時,再進入PHP模式。
 313 require:處理失敗,產生 E_COMPILE_ERROR 錯誤,腳本停止。
 314 include:處理失敗,產生 E_WARNING 錯誤,腳本繼續執行。
 315 
 316 #不建議使用require_once/include_once
 317 
 318 
 319 /* 【相對路徑】 */
 320 當前瀏覽器請求的哪一個腳本,當前位置就是屬於哪一個腳本。
 321 ./filefile 都表示當前目錄下的file文件
 322 file狀況(嵌套載入文件時):
 323 若是當前目錄沒找到該文件就在代碼文件所在目錄中繼續找。
 324 若是當前目錄找到有該文件,則不會再在代碼文件所在目錄去找也不會再加載。
 325 __DIR__     腳本文件所在目錄
 326 __FILE__    腳本文件路徑
 327 
 328 include_path    加載文件查找目錄
 329     set_include_path()  設置include_path,可多個,用字符串做參數
 330     該函數設置的path只針對該當前文件有效
 331     該設置只針對查找未直接寫文件路徑方式有效
 332     設置新的include_path會覆蓋原來的
 333 
 334     get_include_path()  獲取當前include_path設置項,無參數
 335 
 336     路徑分隔符,在Windows下是分號,在Linux下是冒號
 337     利用預約義常量 PATH_SEPARATOR 來得到當前的分隔符
 338 
 339 若是直接寫文件名:
 340     1. include_path所設置的
 341     2. 當前目錄
 342     3. 代碼所在文件的目錄
 343 若是文件名前帶有路徑,則會直接根據路徑查找,include_path直接被忽略
 344 
 345 
 346 /* 【return】 */
 347 return與require結合,可返回文件的內容,return寫在被載入的文件內
 348 return能夠終止所在腳本的執行,做爲普通腳本語句
 349 return能夠返回函數的相應值
 350 
 351 
 352 /* 【終止和延遲腳本執行】 */
 353 die / exit   終止
 354 return是終止所在腳本的執行
 355 die和exit會當即終止腳本執行
 356 die("到此爲止");     該函數內的字符串可被輸出
 357 sleep()  延遲(單位:秒)
 358     默認最多可延遲30秒,PHP配置能夠修改 max_execution_time
 359     例:sleep(12);
 360 usleep()    以指定的微秒數延遲執行
 361 time_sleep_until    使腳本睡眠到指定的時間爲止
 362 
 363 
 364 /* 【函數】 */
 365 1. 函數的聲明是在編譯時,故先定義再調用,定義與調用無前後關係!
 366 2. 文件只是代碼的載體,程序均在內存中執行!
 367 3. 若是函數的定義在須要載入的文件內,則須要先載入該文件,不然調用出錯!
 368 4. 函數的定義能夠出如今其餘的代碼段中,此時函數不會在編譯階段被執行
 369     只有被執行到時纔會被定義!只有獨立定義時纔會被編譯在內存中!
 370     若是出如今其餘函數體內,也須要外層函數被調用時才被定義並生效!
 371 5. 函數名不區分大小寫
 372 6. 不容許重名,包括系統函數
 373 7. 【可變函數】
 374     函數名能夠用其餘變量代替
 375     $func_name = "sayHello";
 376     $func_name();       //此時調用sayHello()函數
 377     注意:只有在調用時才能使用變量,定義時不容許!
 378 8. 變量可做爲函數名調用函數,數組元素值也能夠!
 379 9. 形式參數parameter,實際參數argument
 380     能夠對參數傳遞 null,表示該形參不想傳遞值
 381     形參與實參之間既可值傳遞,也可引用傳遞。
 382     引用傳遞參數,應該在定義函數時就在形式參數前加上 & 符號,而此時調用函數實參必須爲變量
 383     如何選擇使用哪一種傳遞方式?
 384         a. 是否須要保證原始數據的完整性
 385         b. 是否須要增長效率
 386         c. 對大數據引用傳遞可節省內存
 387 10. 參數默認值
 388         a. 函數的參數默認值必須是已經肯定的值,不能是變量!
 389             只要在調用以前定義該常量,則可使用常量做爲參數默認值
 390         b. 函數默認值能夠有多個,建議將有默認值的參數放在參數列表的最後面
 391            這樣能夠在調用函數時,不賦予後面有默認值的參數值,不然會出錯
 392         c. 默認參數能夠是非標量類型,好比數組、null
 393         d. 任何默認參數必須放在任何非默認參數的右側
 394 11. 參數數量
 395     a. 形參數量多於實參數量
 396         報告警告級別錯誤,並以NULL代替
 397     b. 實參多於形參
 398         不報告錯誤,依次爲形參賦值
 399     c. 不肯定參數數量
 400         1) 一個形參都不定義,永遠都是實參多於形參
 401         2) 【可變數量參數】
 402             func_get_args() 獲取當前函數被調用時全部實參的值,返回一個全部實參值組成的數組
 403             func_get_arg()  獲取某個實參的值,經過索引值標識,e.g: func_get_arg(0)
 404             func_num_args() 獲取全部實參的數量
 405 12. 【return】返回值
 406     a. 函數只有一個返回值,能夠經過返回一個數組來獲得相似的結果,但能夠有多條return語句
 407     b. return語句會當即停止函數的運行,並將控制權交回調用該函數的代碼行
 408     c. 能夠返回包括數組和對象的任意類型
 409     d. 函數的返回也分值傳遞和引用傳遞(返回的是一個變量纔可)
 410         1) 默認是值傳遞方式
 411         2) 引用傳遞方式:
 412             - 定義函數時,函數名前加上& 表示該函數能夠返回引用
 413             - 調用函數時,函數名前加上& 表示取得函數返回的引用
 414                 此時,函數外修改返回值,會修改函數內的該返回變量的值
 415             - 若是函數需返回引用,則須要返回一個變量才能夠
 416             - 從函數返回一個引用,必須在函數聲明和指派返回值給一個變量時都使用引用操做符&
 417                 function &returns_reference(){return $someref;}
 418                 $newref =& returns_reference();
 419         3) 返回引用的做用
 420 
 421 
 422 /* 【變量做用域】 */
 423 a. 全局變量和局部變量
 424     1) 做用域之間不重疊,即不一樣做用域的變量,之間不可訪問
 425     2) 全局做用域  - 函數以外的區域
 426     3) 局部做用域  - 函數內的區域,每一個函數都是一個獨立的做用域
 427 
 428 b. 超全局變量,既能夠在全局也可在局部使用,僅能用系統自帶的,均是數組變量。
 429     $GLOBALS    $_COOKIE    $_ENV       $_FILES $_GET
 430     $_POST      $_REQUEST   $_SERVER    $_SESSION
 431 c. $GLOBALS
 432     1) 不能存在超全局變量,但能夠有超全局的數據!
 433     2) 將須要的數據放到超全局變量的數組內,但統一使用$GLOBALS
 434     3) $GLOBALS 特徵
 435         - 每一個全局變量就是對應$GLOBALS內的一個元素 436             每當增長一個全局,則自動在$GLOBALS內增長一個同名元素 437             同理,每當增長元素,也會增長一個全局變量,通常在函數內增長
 438         - 作的任何修改,也會映射到另外一個,包括更新和刪除
 439             在函數內訪問全局變量,只需使用$GLOBALS
 440         - 出現過的全局變量,就能夠經過$GLOBALS這個數組取得
 441     4) PHP生命週期中,定義在函數體外部的所謂全局變量,函數內部是不能直接得到的
 442 4) global關鍵字(不建議使用)
 443     將局部變量聲明爲同名全局變量的一個'引用'!至關於常量的引用傳遞
 444         global $var;    // $var = &$GLOBALS['var'];
 445         不一樣於$GLOBALS!!!
 446     global在函數產生一個指向函數外部變量的別名變量,而不是真正的函數外部變量。
 447     $GLOBALS確確實實調用是外部的變量,函數內外會始終保持一致。
 448     global的做用是定義全局變量,可是這個全局變量不是應用於整個網站,而是應用於當前頁面,包括include或require的全部文件。
 449 d. 
 450     1) 做用域只針對變量,對常量無效
 451     2) 被載入文件中定義的變量做用域取決於被載入的位置。
 452         函數外被載入就是全局,函數內被載入就是局部!
 453 
 454 
 455 /* 【變量生命週期】 */
 456 1. 腳本結束時,全局變量消失
 457 2. 函數執行完時,局部變量消失
 458 3. 靜態變量
 459     static關鍵字
 460         靜態變量僅在局部函數域中存在,但當程序執行離開此做用域時,其值並不丟失。
 461         靜態變量僅會被初始化一次,其餘局部變量每次被調用時都會被從新賦值。
 462         static聲明的靜態變量的生命週期會被一直延續。
 463 
 464 
 465 /* 【迭代和遞歸】 */
 466 迭代比遞歸效率高!
 467 迭代是一種思想(算法),結構和使用上如同循環!
 468 遞歸是一種思想(算法),將大問題拆分紅小問題,逐一解決小問題以解決大問題
 469     要求大問題和小問題的解決方案是一致的!
 470     遞歸的結構和語法體現如圖函數。函數體內調用函數自己!
 471     遞歸出口:當該問題能夠解決時,則不用再遞歸
 472 
 473 
 474 /* 【匿名函數/閉包函數】 */
 475 匿名函數,也叫閉包函數(closures),容許臨時建立一個沒有指定名稱的函數。
 476 
 477 1. 定義匿名函數時,不需增長函數名。
 478 2. PHP對匿名函數的管理,以一個對象的方式進行處理。
 479 3. 匿名函數應該存放到變量內。
 480 4. 匿名函數經過Closure類來實現
 481 5. 可使用函數做爲函數的參數和返回值
 482 6. 聲明函數時可使用 use($param) 來向函數中傳入函數外的變量,結合變量引用來實現閉包
 483 7. 能夠用變量引用函數
 484 $func = function ($e) {
 485     echo $e;
 486 };   //結束時,需分號結束,如同變量賦值
 487 var_dump($func);     //使用匿名函數
 488 $func('ITCAST');     //函數的調用
 489     這不是可變函數,而是對象。Closure閉包類
 490 //use語法
 491 匿名函數傾向於值的概念,可能出如今任何地方。
 492 use可使得匿名函數使用其外部做用域的變量。非全局!
 493 use與全局的區別:
 494     use使用其外部做用域的變量
 495 function out() {
 496     $v = "in out";
 497     $func = function () use (& $v) {
 498         var_dump($v);
 499     }
 500 }
 501     use相似參數的自動傳遞,也支持值與引用的傳遞方式。
 502 //做用
 503     常做爲'臨時函數'被調用(只在某個地方被調用的函數)
 504     例如:
 505         PHP存在一個array_map()函數,功能是針對一個函數內每一個元素,去調用某個函數
 506         操做結果(array) = array_map(操做函數, 操做數組);
 507         $result_arr = array_map(function ($v) {return $v3}, $arr);
 508 
 509 //閉包用法實例
 510 function closureCreater() {
 511     $x = 1;
 512     return function($fun = null) use(&$x) {//按引用傳值
 513         echo "<br />" . $x++;
 514         $fun and $fun();
 515     };
 516 }
 517 
 518 $x = "hello world";
 519 $test = closureCreater();
 520 $test();
 521 $test(function(){ echo "closure test one"; });
 522 $test(function(){ echo "closure test two"; });
 523 $test(function() use($x){ echo "<br />".$x;});
 524 
 525 //將函數保存爲數組元素
 526 $x = 'outer param.';
 527 $arr = array();
 528 $arr[] = function($str)use($x){ return $str.$x; };
 529 echo $arr[0]('test fun in arr,');
 530 
 531 
 532 /* 【數組】 */
 533 關聯數組:鍵和值有關聯,鍵表示值的邏輯含義。
 534 索引數組:鍵和值無關聯,鍵表示值的位置。一般下標從0開始,遞增元素
 535 count($var [,$mode]) //統計數組元素個數
 536     $mode可選,設爲1或true時則遞歸統計
 537     $var非數組,返回1;$var未初始化或等於null或空數組,返回0
 538 
 539 //鍵名的使用
 540 整型數字鍵不需加引號($arr[1])
 541 字符串數字鍵也不需加引號($arr = array('1'=>'abc'); $arr[1])
 542 關聯數組,字符串鍵需加引號($arr = array('a'=>'aaa'); $arr['a'])
 543 關聯數組,雙引號中解析變量,可不加引號($arr = array('a'=>'aaa'); "$arr[a]")
 544 
 545 /* 【指針】 */
 546 current/pos    返回當前被內部指針指向的數組單元的值,並不移動指針。
 547 key            返回數組中當前單元的鍵名,並不移動指針
 548 next        將數組中的內部指針向前移動一位,並返回移動後當前單元的值。先移動,再取值。
 549 prev        將數組的內部指針倒回一位,並返回移動後當前單元的值先移動,再取值。
 550 end            將數組的內部指針指向最後一個單元,並返回最後一個單元的值
 551 reset        將數組的內部指針指向第一個單元,並返回第一個數組單元的值
 552 
 553 each    返回數組中當前的鍵/值對並將數組指針向前移動一步。
 554             返回的是一個由鍵和值組成的長度爲4的數組,下標0和key表示鍵,下標1和value表示值
 555                 在執行each()以後,數組指針將停留在數組中的下一個單元
 556                     或者當碰到數組結尾時停留在最後一個單元。
 557                     若是要再用 each 遍歷數組,必須使用 reset()。
 558 
 559     1. 以上指針操做函數,除了key(),若指針移出數組,則返回false。而key()移出則返回null。
 560     2. 若指針非法,不能進行next/prev操做,能進行reset/end操做
 561     3. current/next/prev     若遇到包含空單元(0或"")也會返回false。而each不會!
 562 
 563 list    把數組中的值賦給一些變量。list()是語言結構,不是函數
 564             僅能用於數字索引的數組並假定數字索引從0開始
 565             /* 可用於交換多個變量的值 */ list($a, $b) = array($b, $a);
 566     例:list($drink, , $power) = array('coffee', 'brown', 'caffeine');
 567 
 568 1. 複製數組,其指針位置也會被複制。
 569     特例:若是數組指針非法,則拷貝的數組指針會重置,而原數組的指針不變。
 570     【指針問題】
 571         誰第一個進行寫操做,就會開闢一個新的值空間。與變量(數組變量)值傳遞給誰無關。
 572         數組函數current()被定義爲寫操做,故會出現問題。
 573         foreach遍歷的是數組的拷貝,當被寫時,纔會開闢一個新的值空間。
 574             即,foreach循環體對原數組進行寫操做時,纔會出現指針問題。
 575             若是開闢新空間時指針非法,則會初始化指針。
 576 2. 若是指針位置出現問題,則reset()初始化一下就可解決。
 577 
 578 
 579 /* 【遍歷數組】 */
 580 * 先找到元素,再獲取鍵和值
 581 
 582 foreach
 583     foreach (array_expression as [$key =>] & $value)
 584       當foreach開始執行時,數組內部的指針會自動指向第一個單元。
 585       獲取元素信息後,移動指針,再執行循環體
 586       1. foreach自己循環結構,break和continue適用於foreach
 587       2. foreach支持循環的替代語法。
 588       3. $value是保存元素值的變量,對其修改不會改變數組的元素值
 589       4. $value支持元素值的引用拷貝,在$value前加上&便可
 590       5. $key不支持引用傳遞
 591       6. foreach遍歷的是原數組的拷貝,而在循環體對數組的操做是操做原數組
 592             即循環體對數組的操做,對原數組生效,對遍歷不生效。
 593             先拷貝一份數組用做遍歷
 594 
 595 while...list...each
 596 while (list($key, $val) = mysql_fetch_row($result)) = each($arr) {
 597   echo "$key => $val\n";
 598 }
 599 
 600 
 601 
 602 /* 【數組函數】 */
 603 //統計計算
 604 count        計算數組中的單元數目或對象中的屬性個數
 605 array_count_values  統計數組中全部的值出現的次數
 606 array_product       計算數組中全部值的乘積
 607 array_sum           計算數組中全部值的和
 608 range        創建一個包含指定範圍單元的數組
 609 
 610 //獲取數組內容
 611 array_chunk        將一個數組分割成多個
 612     array array_chunk(array $input, int $size[, bool $preserve_keys]) 
 613 array_filter    用回調函數過濾數組中的單元
 614 array_slice     從數組中取出一段
 615     array array_slice($arr, $offset [,$len [,$preserve_keys]])
 616 array_keys        返回數組中全部的鍵名
 617     array array_keys(array $input[, mixed $search_value[, bool $strict]] )
 618     若是指定了可選參數 search_value,則只返回該值的鍵名。不然input數組中的全部鍵名都會被返回。
 619 array_values    返回數組中全部的值,並創建數字索引
 620 
 621 array_merge        合併一個或多個數組
 622     一個數組中的值附加在前一個數組的後面。
 623     若是輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。
 624     若是數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。
 625     若是隻給了一個數組而且該數組是數字索引的,則鍵名會以連續方式從新索引。 
 626 array_merge_recursive    遞歸地合併一個或多個數組
 627 
 628 //搜索
 629 in_array            檢查數組中是否存在某個值
 630     bool in_array(mixed $needle, array $haystack[, bool $strict])
 631 array_key_exists    檢查給定的鍵名或索引是否存在於數組中
 632     isset()對於數組中爲NULL的值不會返回TRUE,而 array_key_exists()會
 633 array_search        在數組中搜索給定的值,若是成功則返回相應的鍵名
 634 
 635 array_combine    建立一個數組,用一個數組的值做爲其鍵名,另外一個數組的值做爲其值
 636     若是兩個數組的單元數不一樣或者數組爲空時返回FALSE。
 637 array_rand        從數組中隨機取出一個或多個單元,返回鍵名或鍵名組成的數組,下標是天然排序的
 638 array_fill      用給定的值填充數組
 639     array_fill($start, $num, $value)
 640 array_flip      交換數組中的鍵和值
 641 array_pad       用值將數組填補到指定長度
 642 array_reverse   返回一個單元順序相反的數組
 643 array_unique    移除數組中重複的值
 644 array_splice    把數組中的一部分去掉並用其它值取代
 645 
 646 implode            將數組元素值用某個字符串鏈接成字符串
 647 explode($delimiter, $str [,$limit])    //使用一個字符串分割另外一個字符串
 648     $delimiter不能爲空字符串""
 649 
 650 array_map        將回調函數做用到給定數組的單元上,只能處理元素值,能夠處理多個數組
 651     若是callback參數設爲null,則合併多個數組爲一個多維數組
 652 array_walk        對數組中的每一個成員應用用戶函數,只能處理一個數組,鍵和值都可處理,與foreach功能相同
 653     bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] )
 654 
 655 //棧:後進先出
 656 入棧和出棧會從新分配索引下標
 657 array_push        將一個或多個單元壓入數組的末尾(入棧)
 658 array_pop        將數組最後一個單元彈出(出棧)        使用此函數後會重置(reset())array 指針。
 659 
 660 //隊列:先進先出
 661 隊列函數會從新分配索引下標
 662 array_unshift    在數組開頭插入一個或多個單元
 663 array_shift        將數組開頭的單元移出數組            使用此函數後會重置(reset())array 指針。
 664 
 665 //排序函數
 666 sort            對數組排序
 667 rsort            對數組逆向排序
 668 asort            對數組進行排序並保持索引關係
 669 arsort            對數組進行逆向排序並保持索引關係
 670 ksort            對數組按照鍵名排序
 671 krsort            對數組按照鍵名逆向排序
 672 usort            使用用戶自定義的比較函數對數組中的值進行排序
 673 uksort            使用用戶自定義的比較函數對數組中的鍵名進行排序
 674 uasort            使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯
 675 natsort            用用「天然排序」算法對數組排序
 676 natcasesort        用「天然排序」算法對數組進行不區分大小寫字母的排序
 677 array_multisort 對多個數組或多維數組進行排序
 678 shuffle            將數組打亂
 679     引用傳遞參數,返回bool值。
 680     從新賦予索引鍵名,刪除原有鍵名
 681 
 682 //差集
 683 array_udiff_assoc   帶索引檢查計算數組的差集,用回調函數比較數據
 684 array_udiff_uassoc  帶索引檢查計算數組的差集,用回調函數比較數據和索引
 685 array_udiff         用回調函數比較數據來計算數組的差集
 686 array_diff_assoc    帶索引檢查計算數組的差集
 687 array_diff_key      使用鍵名比較計算數組的差集
 688 array_diff_uassoc   用用戶提供的回調函數作索引檢查來計算數組的差集
 689 array_diff_ukey     用回調函數對鍵名比較計算數組的差集
 690 array_diff          計算數組的差集
 691 //交集
 692 array_intersect_assoc 帶索引檢查計算數組的交集
 693 array_intersect_key 使用鍵名比較計算數組的交集
 694 array_intersect_uassoc 帶索引檢查計算數組的交集,用回調函數比較索引
 695 array_intersect_ukey 用回調函數比較鍵名來計算數組的交集
 696 array_intersect 計算數組的交集
 697 array_key_exists 用回調函數比較鍵名來計算數組的交集
 698 array_uintersect_assoc 帶索引檢查計算數組的交集,用回調函數比較數據
 699 array_uintersect 計算數組的交集,用回調函數比較數據
 700 
 701 extract($arr [,$type [,$prefix]])   從數組中將變量導入到當前的符號表(接受結合數組$arr做爲參數並將鍵名看成變量名,值做爲變量的值)
 702 compact($var [,...])   創建一個數組,包括變量名和它們的值(變量名成爲鍵名而變量的內容成爲該鍵的值)
 703 
 704 
 705 
 706 
 707 /* 【僞類型】 */
 708 mixed        說明一個參數能夠接受多種不一樣的(但並沒必要須是全部的)類型。
 709 number        說明一個參數能夠是 integer 或者 float 710 callback    回調函數
 711 void        void做爲返回類型意味着函數的返回值是無用的。
 712             void做爲參數列表意味着函數不接受任何參數。
 713 
 714 
 715 /* 【數據庫操做】 */
 716 #鏈接認證
 717 mysql_connect        鏈接並認證數據庫
 718 #發送SQL語句,接收執行結果
 719 mysql_query            發送SQL語句
 720         僅對select, show, explain, describe語句執行成功返回一個資源標識符,其餘語句成功返回true。執行失敗均返回false。
 721 #處理結果
 722 mysql_fetch_assoc    從結果集中取得一行做爲關聯數組
 723         每次只取回一條,相似each
 724     結果集中記錄指針
 725 mysql_fetch_row        從結果集中取得一行做爲枚舉數組
 726 mysql_fetch_array    從結果集中取得一行做爲關聯數組,或數字數組,或兩者兼有
 727     array mysql_fetch_array ( resource $result [, int $ result_type  ] )
 728     可選參數result_type可選值爲:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH(默認)
 729 mysql_free_result    釋放結果內存
 730 #關閉連接
 731 mysql_close            關閉鏈接
 732 
 733 
 734 /* 【類和對象】 */
 735 # 成員:
 736     類成員:類常量、靜態屬性、靜態方法
 737     對象成員:非靜態屬性、非靜態方法
 738     # 除此外,類不能包含任何其餘東西!!!
 739 
 740 # 類名、方法名、屬性名均不區分大小寫
 741 # $this表明本對象,self表明本類,parent表明父類
 742 # 類和函數都可被事先編譯(僅做爲最外層時)
 743 # 類的定義必須在單一的PHP區塊內,不能被多個PHP標籤分割
 744 
 745 // 構造方法
 746 - 具備構造函數的類會在每次建立新對象時先調用此方法
 747 void __construct([ mixed $args [, $... ]] )
 748 - 構造方法所需參數由new實例化對象時,給類增長參數值。
 749 - 構造方法也能夠被手動調用。
 750 - 5.3.3版本之前,支持於類名同名的方法做爲構造方法。
 751 - 兩種衝突時,__construct 優先
 752 
 753 // 析構方法
 754 - 析構函數會在到某個對象的全部引用都被刪除或者當對象被顯式銷燬時執行。
 755 void __destruct( void )
 756 # 做用:釋放對象所佔用的資源
 757 # 調用的時機 
 758     - 腳本結束時全部資源均被釋放,包括對象
 759     - 手動刪除對象時
 760     - 保存對象的變量被賦予新值時(任何值,包括null)
 761     - 在使用exit()終止腳本運行時也會被調用
 762 
 763 // 靜態成員(static關鍵字)
 764     - 聲明類成員或方法爲static,就能夠不實例化類而直接訪問。
 765     - 靜態成員(屬性或方法)均屬於類,故不能經過$this或->訪問。
 766     - 靜態成員是全部對象共享,屬於類。
 767     - 靜態成員用類調用,非靜態成員用對象調用。
 768 # 靜態屬性
 769     - 靜態屬性不能夠由對象經過->操做符來訪問。
 770     - 靜態屬性只能被初始化爲一個字符值或一個常量,不能使用表達式。 因此你能夠把靜態屬性初始化爲整型或數組,但不能指向另外一個變量或函數返回值,也不能指向一個對象。
 771 # 靜態方法
 772     - 因爲靜態方法不須要經過對象便可調用,因此僞變量$this在靜態方法中不可用 773     - 用::方式調用一個非靜態方法會致使一個E_STRICT級別的錯誤。
 774 
 775 // 訪問解析操做符(::)
 776     - 能夠用於訪問靜態成員、方法和常量,還能夠用於覆蓋類中的成員和方法。 
 777     - 當在類的外部訪問這些靜態成員、方法和常量時,必須使用類的名字。 
 778     - self 和 parent 這兩個特殊的關鍵字是用於在類的內部對成員或方法進行訪問的。
 779 
 780 // 訪問辨析
 781 - 對象成員,內部經過$this指定,外部經過對象名指定,均用->訪問,訪問屬性時不需加$。
 782     對象名->屬性名    對象名->方法名()    $this->屬性名        $this->方法名()
 783 - 類成員,內部經過self或parent指定,外部經過類名指定,均用::訪問,訪問屬性時需加$。
 784     類名::$屬性名    類名::方法名()        self::$屬性名        self::方法名()
 785 - 特殊:也能夠經過對象訪問類成員。(不建議)
 786     對象名::$類屬性名    $this::$類屬性名    對象名::$類方法名()    $this::類方法名()
 787 # 對象成員訪問用->,類成員訪問用::
 788 
 789 - 不管是靜態方法仍是非靜態方法,都可經過類或對象進行訪問。
 790 - 靜態屬性經過類訪問,靜態方法經過對象訪問。
 791 - 只有使用對象調用非靜態方法時,$this纔可使用 792 - 靜態方法不可以使用$this 793 - 類能夠調用對象方法,但注意方法內不能有$this 794 - 非靜態方法能夠調用靜態屬性或靜態方法,反之不能夠。
 795 
 796 // 類常量
 797 - 常量的值將始終保持不變。
 798 - 在定義和使用常量的時候不須要使用$符號 799 - 常量的值必須是一個定值,不能是變量,類屬性或其它操做(如函數調用)的結果。
 800 # 定義:const 常量名 = 常量值;
 801 - 不須要加public等訪問修飾限定符
 802 - 類常量屬於類,使用類訪問,類名::類常量 或 self::類常量
 803 
 804 // 自動加載對象
 805 - 在試圖使用還沒有被定義的類時自動調用 __autoload 函數
 806 - 自動加載使用到的類名文件(根據類名找相應名稱的文件,故需類名與類文件名一致)
 807 - 每一個須要加載類的文件都須要存在__autoload函數
 808 - 將__autoload函數寫入單獨的文件,每一個須要用到類的文件再require該函數文件
 809 - __autoload 參數是類名
 810 function __autoload($class_name) {
 811     require_once $_SERVER["DOCUMENT_ROOT"] . "/class/$class_name.php";
 812 }
 813     // $_SERVER["DOCUMENT_ROOT"] 當前運行腳本所在的文檔根目錄
 814 - 能夠經過類名,來推導出類所在的文件名!
 815 - 若是一個項目存在多個自動加載函數時,定義一個能夠完成加載的普通函數,並在函數以前使用spl_autoload_register註冊該函數。
 816 # spl_autoload_register
 817 - 註冊__autoload()函數
 818 bool spl_autoload_register ([ callback $autoload_function ] )
 819 - 能夠註冊多個自動加載函數,先註冊的先執行
 820 - 一旦註冊自動加載函數,__autoload就失效。
 821 - 註冊函數時,參數爲函數名(注意加引號);註冊方法時,參數爲數組
 822 # 註冊類或對象的方法爲自動加載方法時,參數需爲數組:
 823 spl_autoload_register(array(__CLASS__, '__autoload'));
 824 __CLASS__表示當前類名,如果對象可用$this,詳細見手冊
 825 
 826 // 序列化(串行化)
 827 # 數據傳輸均是字符串類型
 828 # 除了資源類型,都可序列化
 829 # 序列化在存放數據時,會存放數據自己,也會存放數據類型
 830 做用:1.在網絡傳輸數據時;2.爲了將數組或對象放在磁盤時
 831 # 序列化
 832 serialize        產生一個可存儲的值的表示
 833 string serialize ( mixed $value )
 834 - 返回字符串,此字符串包含了表示value的字節流,能夠存儲於任何地方。
 835 - 有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。
 836 # 反序列化
 837 unserialize        從已存儲的表示中建立PHP的值
 838 mixed unserialize ( string $str [, string $callback ] )
 839 - 對單一的已序列化的變量進行操做,將其轉換回PHP的值。
 840 
 841 
 842 # 文件的讀寫操做
 843 - file_put_contents        將一個字符串寫入文件
 844 int file_put_contents($file, $data [,$flags])
 845     $flags:FILE_USE_INCLUDE_PATH(覆蓋),FILE_APPEND(追加)
 846 - file_get_contents        將整個文件讀入一個字符串
 847 string file_get_contents($file [, bool $use_include_path [,int $offset [,int $maxlen]]])
 848 
 849 # 對象序列化
 850 - 只能序列化對象內部的數據,即非靜態屬性。
 851 # 需在反序列化對象以前加載類,也能夠觸發自動加載機制。
 852 
 853 __sleep        序列化需序列化的屬性。
 854         - 提交未提交的數據,或相似的清理操做,部分串行化對象。
 855         - 返回一個包含對象中全部應被序列化的變量名稱的數組
 856 __wakeup    反序列化時,預先準備對象須要的資源
 857         - 從新創建數據庫鏈接,或執行其它初始化操做
 858     public function __sleep() {
 859         return array('server', 'username', 'password', 'db');
 860     }
 861     public function __wakeup() {
 862         $this->connect();
 863     }
 864 
 865 // 對象繼承
 866 class 子類名 extends 父類 {}
 867 若是一個對象是子類的對象,那麼同時也是父類的對象。
 868 單繼承:一個類只能繼承一個父類,不能同時繼承多個類。但一個父類能夠被多個子類繼承。
 869 
 870 instanceof    判斷某對象是否爲某類的對象
 871     對象名 instanceof 類名
 872 
 873 // 訪問控制
 874 public        公有的(繼承鏈、本類、外部都可訪問)
 875 protected    保護的(僅繼承鏈、本類可訪問)
 876 private        私有的(僅本類可訪問)
 877 根據成員定義位置、訪問位置判斷。
 878 # 兼容性問題
 879 - 聲明屬性時,var關鍵字聲明的默認爲public權限
 880 - 聲明方法時,省略訪問修飾符,默認爲public權限
 881 
 882 // 重寫 override
 883 $this表明本對象,被誰調用,就表明哪一個對象。
 884 - 繼承時,子類成員名於父類成員名發生衝突,則子類成員會重寫父類成員。
 885 - 屬性和方法都可被子類重寫。
 886 - 當父類的方法或屬性已經不知足子類的需求,則須要重寫。
 887 - 也可能由於命名不規範致使重寫。
 888 
 889 私有屬性不能被重寫,每一個私有屬性都會被記錄。在記錄屬性名的同時,還會記錄類。
 890 
 891 若是有內置函數被重寫,則可調用父類方法。如調用父類構造方法parent::__construct()
 892 
 893 # 重寫限制
 894 訪問限制:
 895     子類的成員的訪問控制必須相等或弱於父類。
 896 方法參數限制:
 897     參數數量必須相同,參數名可不一樣。
 898 
 899 # $this肯定原則
 900 $this爲調用該方法的對象,表示該方法的執行環境對象。
 901     - 對象調用
 902     - 環境的傳遞。若是當前調用時,不能肯定$this的值(靜態調用),此時靜態調用所處對象環境會傳遞到被調用的方法內。
 903 $this並不是永遠表明本對象,而是由方法的執行環境決定。
 904 
 905 # final
 906 若是父類中的方法被聲明爲final,則子類沒法覆蓋(重寫)該方法。
 907 若是一個類被聲明爲final,則不能被繼承。
 908 但加有final關鍵字的類依舊能被實例化!
 909 # 抽象類
 910 關鍵字:abstract
 911 抽象類不能直接被實例化,必須先繼承該抽象類,而後再實例化子類。
 912 抽象類中至少要包含一個抽象方法。非抽象類不能包含抽象方法。
 913 若是類方法被聲明爲抽象的,那麼其中就不能包括具體的功能實現。抽象方法不能包含大括號及方法體。
 914 繼承一個抽象類的時候,子類必須實現抽象類中的全部抽象方法。
 915     即,子類必須重寫抽象父類中的全部抽象方法。
 916 另外,這些方法的可見性必須和抽象類中同樣(或者更爲寬鬆)。
 917     即,若是抽象類中某個抽象方法被聲明爲protected,那麼子類中實現的方法就應該聲明爲protected或者public,而不能定義爲private。
 918 - 抽象類的子類中的普通方法執行方式和其餘類相同。
 919 - 做用:
 920     1. 繼承,爲擴展類,統一公共操做。
 921     2. 限制結構(規範)。規範子類的結構。
 922 
 923 // 接口
 924 關鍵字:interface
 925 - 對象提供的與對象交互的方式就是接口。
 926 - 使用接口能夠指定某個類必須實現哪些方法,但不須要定義這些方法的具體內容。
 927 - 經過interface來定義一個接口,就像定義一個標準的類同樣,但其中定義全部的方法都是空的。 
 928 - 接口中定義的全部屬性和方法都必須是public,可省略public關鍵字。
 929 - 接口中也能夠定義常量(const)。接口常量和類常量的使用徹底相同。
 930     能夠用::訪問。接口名::常量名,實現類::常量名。
 931     它們都是定值,能夠被子類或子接口使用,但不能修改。
 932 - 接口不能定義屬性!
 933 # 定義接口
 934 interface 接口名 {
 935     接口內容(公共方法聲明的集合)
 936 }
 937 # 接口實現
 938 - 要實現一個接口,可使用implements操做符。
 939 - 類中必須實現接口中定義的全部方法,不然會報一個fatal錯誤。
 940 - 若是要實現多個接口,能夠用逗號來分隔多個接口的名稱。
 941 - 實現多個接口時,接口中的方法不能有重名。
 942 - 接口也能夠繼承,經過使用extends操做符。
 943 class 類名 implements 接口名 {
 944     接口方法的實現
 945 }
 946 # 注意
 947     1. 類與抽象類之間是繼承關係,類與接口之間是實現關係。
 948     2. 類與抽象類是單繼承,類與接口是多實現。
 949     3. 接口不是類,限制類的結構。
 950     4. 接口與接口之間是多繼承。用extends關鍵字。
 951         interface I_C extends I_A, I_B {}
 952 
 953 // 靜態延遲綁定
 954 self::,表明本類(當前代碼所在類)
 955     永遠表明本類,由於在類編譯時已經被肯定。
 956     即,子類調用父類方法,self卻不表明調用的子類。
 957 static::,表明本類(調用該方法的類)
 958     用於在繼承範圍內引用靜態調用的類。
 959     運行時,才肯定表明的類。
 960     static::再也不被解析爲定義當前方法所在的類,而是在實際運行時計算的。
 961 
 962 // 對象的遍歷(迭代)
 963 - 對象經過屬性保存數據,故遍歷對象的屬性。
 964 - foreach語言結構,得到屬性名和屬性值。
 965     foreach ($obj as $p_name => $p_value) {}
 966 # 自定義遍歷(迭代器Iterator)
 967 Iterator - 可在內部迭代本身的外部迭代器或類的接口
 968 Iterator::current    — 返回當前元素
 969 Iterator::key        — 返回當前元素的鍵
 970 Iterator::next        — 向前移動到下一個元素
 971 Iterator::rewind    — 返回到迭代器的第一個元素
 972 Iterator::valid        — 檢查當前位置是否有效
 973 
 974 # 對象的克隆
 975 //對象之間的傳值是[引用]傳遞。
 976 克隆:新對象 = clone 舊對象
 977     - 全部的引用屬性仍然會是一個指向原來的變量的引用。 
 978 __clone()方法在對象被克隆時自動調用。
 979 注意:構造方法對應實例化(new),克隆方法對應克隆(clone)。
 980 
 981 // 單例模式
 982 #三私一公
 983 單例模式(Singleton)用於爲一個類生成一個惟一的對象。最經常使用的地方是數據庫鏈接。使用單例模式生成一個對象後,該對象能夠被其它衆多對象所使用。
 984 # 防止一個類被實例化屢次
 985 class MySQLDB {
 986     private static $instance = null; // 存類實例在此屬性中
 987     // 構造方法聲明爲private,防止直接建立對象
 988     private function __construct() {}
 989     public static function getInstance() {
 990         if(! self::$instance instanceof static) {
 991             self::$instance = new static;
 992         }
 993         return self::$instance;
 994     }
 995     private function __clone() {} // 阻止用戶複製對象實例
 996 }
 997 
 998 // 魔術方法
 999 __construct        構造方法
1000 __destruct        析構方法
1001 __clone            克隆對象
1002 __sleep            序列化對象
1003 __wakeup        反序列化對象
1004 __autoload        自動加載,使用類但未找到時
1005 
1006 __toString        對象被看成字符串使用時
1007 __invoke        當嘗試以調用函數的方式調用一個對象時
1008 
1009 # 重載 overload
1010 指動態地"建立"類屬性和方法
1011 用戶能夠自由的爲對象添加額外的屬性,該特性就是重載。
1012 全部的重載方法都必須被聲明爲public。
1013 當調用當前環境下未定義或不可見的類屬性或方法時,重載方法會被調用。
1014 重載相關魔術方法的參數都不能經過引用傳遞。
1015 # 屬性重載
1016 - 處理不可訪問的屬性
1017 屬性重載只能在對象中進行。
1018 # 屬性重載對於靜態屬性無效
1019 在靜態方法中,這些魔術方法將不會被調用。因此這些方法都不能被聲明爲static。
1020 __set        在給不可訪問的屬性賦值時
1021     public void __set(string $name, mixed $value)
1022     做用:批量管理私有屬性,間接保護對象結構
1023 __get        讀取不可訪問的屬性的值時
1024     public mixed __get(string $name)
1025 __isset        當對不可訪問的屬性調用isset()或empty()時
1026     public bool __isset(string $name)
1027 __unset        當對不可訪問的屬性調用unset()時
1028     public void __unset(string $name)
1029 # 方法重載
1030 - 處理不可訪問的方法
1031 __call            當調用一個不可訪問的非靜態方法(如未定義,或者不可見)時自動被調用
1032         public mixed __call(string $name, array $arguments)
1033 __callStatic    當在調用一個不可訪問的靜態方法(如未定義,或者不可見)時自動被調用
1034         public static mixed __callStatic(string $name, array $arguments)
1035 # $name參數是要調用的方法名稱。$arguments參數是一個數組,包含着要傳遞給方法的參數。
1036 
1037 // 類型約束
1038 函數的參數能夠指定只能爲對象或數組
1039 限定爲對象則在形參前加類名,限定爲數組則在形參前加array
1040 類型約束容許NULL值
1041 類型約束不僅是用在類的成員方法裏,也能使用在函數裏。 
1042 
1043 // 三大特性
1044 封裝:隱藏內部是吸納,僅開發接口。
1045 繼承:一個對象的成員被另外一個對象所使用。語法上體現爲代碼的共用。
1046 多態:多種形態。
1047 
1048 // 類與對象·關鍵字
1049 this        表明本對象
1050 public        公有的(繼承鏈、本類、外部都可訪問)
1051 protected    保護的(僅繼承鏈、本類可訪問)
1052 private        私有的(僅本類可訪問)
1053 parent::    表明父類
1054 self::        表明本類(當前代碼所在類)
1055 static::    表明本類(調用該方法的類)
1056 static        靜態成員(屬性、方法),全部對象都可使用,外部也可直接使用或修改,靜態方法不可訪問非靜態成員
1057 final        方法用final不可被子類重載,類用final不可被繼承(方法、類)
1058 const        類常量(屬性)
1059 abstract    抽象類
1060 interface    接口
1061 extends        類繼承(子接口繼承接口、其餘普通類繼承)
1062 implements    接口實現(類實現接口、抽象類實現藉口)(對接口的實現和繼承都可有多個)
1063 Iterator    內置接口(迭代)
1064 clone        克隆
1065 instance    實例
1066 instanceof    某對象是否屬於某類
1067 
1068 /* 【類與對象相關函數】 */
1069 class_alias([$original [,$alias]])  給類取別名
1070 class_exists($class [,$autoload])   檢查類是否已定義
1071 interface_exists($interface [,$autoload])   檢查接口是否已被定義
1072 method_exists($obj, $method)檢查類的方法是否存在
1073 property_exists($class, $property)  檢查對象或類是否具備該屬性
1074 get_declared_classes(void)  返回由已定義類的名字所組成的數組
1075 get_declared_interfaces(void)   返回一個數組包含全部已聲明的接口
1076 get_class([$obj])       返回對象的類名
1077 get_parent_class([$obj])    返回對象或類的父類名
1078 get_class_methods($class)   返回由類的方法名組成的數組
1079 get_object_vars($obj)   返回由對象屬性組成的關聯數組
1080 get_class_vars($class)  返回由類的默認屬性組成的數組
1081 is_a($obj, $class) 若是對象屬於該類或該類是此對象的父類則返回TRUE
1082 is_subclass_of($obj, $class)    若是此對象是該類的子類,則返回TRUE
1083 get_object_vars($obj)   返回由對象屬性組成的關聯數組
1084 
1085 
1086 // 經常使用類
1087 # PHP手冊 -> 預約義類
1088 Closure        閉包類,匿名函數對象的final類
1089 stdClass    標準類,一般用於對象類保存集合數據
1090 __PHP_Incomplete_Class        不完整類,當只有對象而沒有找到類時,則該對象被認爲是該類的對象
1091 Exception    異常類
1092 PDO            數據對象類
1093 
1094 // 魔術常量
1095 __DIR__            文件所在的目錄
1096 __LINE__        文件中的當前行號 
1097 __FILE__        文件的完整路徑(絕對路徑)和文件名
1098 
1099 __CLASS__        類的名稱
1100 __METHOD__        類的方法名,包含類名和方法名
1101 __FUNCTION__    函數名稱,用在方法內只表示方法名
1102 
1103 // 反射機制 Reflection
1104 做用:1. 獲取結構信息        2. 代理執行
1105 ReflectionClass 報告一個類的有關信息
1106 ReflectionMethod 報告一個方法的有關信息
1107 ReflectionClass::export    輸出類結構報告
1108 # 代理執行
1109 實例化 ReflectionFunction 類的對象
1110     $f = new ReflectionFunction('func');    // func爲函數func($p)
1111     $f->invoke('param');
1112 
1113 
1114 /* 頁面跳轉 */
1115 // PHP
1116 header('Loacation: url')
1117 header()執行完畢後,後面的代碼也會繼續執行,故需在該語句後加die結束
1118 沒法給出提示,直接跳轉
1119 // JS方法
1120 location.href = url
1121 // HTML
1122 <meta http-equiv="Refresh" content="表示時間的數值; url=要跳轉的URI"> 
1123 
1124 /* 【Cookie】 */
1125 cookie是一種在遠程瀏覽器端儲存數據並以此來跟蹤和識別用戶的機制。
1126 cookie是HTTP標頭的一部分,所以setcookie()函數必須在其它信息被輸出到瀏覽器前調用,這和對header()函數的限制相似。可使用輸出緩衝函數來延遲腳本的輸出,直到按須要設置好了全部的cookie或者其它HTTP標頭。
1127 
1128 // 新增
1129 setcookie    新增一條cookie信息
1130 setcookie($name [,$value [,$expire [,$path [,$domain [,$secure [,$httponly]]]]]])
1131 #注意:setcookie()函數前不能有輸出!除非開啓ob緩存!
1132 # 參數說明
1133 $name    - cookie的識別名稱
1134     使用$_COOKIE['name']抵用名爲name的cookie
1135 $value    - cookie值,能夠爲數值或字符串,此值保存在客戶端,不要用來保存敏感數據
1136     假定$name參數的值爲'name',則$_COOKIE['name']就可取得該$value值
1137 $expire    - cookie的生存期限(Unix時間戳,秒數)
1138     若是$expire參數的值爲time()+60*60*24*7則可設定cookie在一週後失效。若是未設定該參數,則會話後當即失效。
1139 $path    - cookie在服務器端的指定路徑。當設定該值時,服務器中只有指定路徑下的網頁或程序能夠存取該cookie。
1140     若是該參數值爲'/',則cookie在整個domain內有效。
1141     若是設爲'/foo/',則cookie就在domain下的/foo/目錄及其子目錄內有效。
1142     默認值爲設定cookie的當前目錄及其子目錄。
1143 $domain    - 指定此cookie所屬服務器的網址名稱,預設是創建此cookie服務器的網址。
1144     要是cookie能在如abc.com域名下的全部子域都有效,則該參賽應設爲'.abc.com'1145 $secure    - 指明cookie是否僅經過安全的HTTPS鏈接傳送中的cookie的安全識別常數,若是設定該值則表明只有在某種狀況下才能在客戶端與服務端之間傳遞。
1146     當設成true時,cookie僅在安全的鏈接中被設置。默認值爲false。
1147 
1148 // 讀取
1149 - 瀏覽器請求時會攜帶當前域名下的全部cookie信息到服務器。
1150 - 任何從客戶端發送的cookie都會被自動存入$_COOKIE全局數組1151 - 若是但願對一個cookie變量設置多個值,則需在cookie的名稱後加[]符號。即以數組形態保存多條數據到同一變量。
1152     //設置爲$_COOKIE['user']['name'],注意user[name]的name沒有引號
1153     setcookie('user[name]', 'shocker');
1154 - $_COOKIE也能夠爲索引數組
1155 
1156 // 刪除
1157 方法1:將其值設置爲空字符串
1158     setcookie('user[name]', '');
1159 方法2:將目標cookie設爲「已過時」狀態。
1160     //將cookie的生存時間設置爲過時,則生存期限與瀏覽器同樣,當瀏覽器關閉時就會被刪除。
1161     setcookie('usr[name]', '', time()-1);
1162 
1163 # 注意:
1164 1. cookie只能保存字符串數據
1165 2. $_COOKIE只用於接收cookie數據,不用於設置或管理cookie數據。
1166$_COOKIE進行操做不會影響cookie數據1167     $_COOKIE只會保存瀏覽器在請求時所攜帶的cookie數據1168 3. cookie生命週期:
1169     臨時cookie:瀏覽器關閉時被刪除
1170     持久cookie:$expire參數爲時間戳,表示失效時間。
1171 4. 有效目錄
1172     cookie只在指定的目錄有效。默認是當前目錄及其子目錄。
1173     子目錄的cookie在其父目錄或同級目錄不可獲取。
1174 5. cookie區分域名
1175     默認是當前域名及其子域名有效。
1176 6. js中經過document.cookie得到,類型爲字符串
1177 7. 瀏覽器對COOKIE總數沒有限制,但對每一個域名的COOKIE數量和每一個COOKIE的大小有限,並且不一樣瀏覽器的限制不一樣。
1178 
1179 /* 【session】 */
1180 1. 開啓session機制
1181     session_start()
1182     注意:session_start()函數前不能有輸出!除非開啓ob緩存。
1183 2. 操做數據
1184$_SESSION數組進行操做
1185 3. 瀏覽器端保存SessionID,默認爲當前域名下的全部目錄及其子目錄生效。即默認設置cookie的path值爲'/'
1186 4. 服務器保存session數據
1187     默認保存方式:每一個會話都會生成一個session數據文件,文件名爲:sess_加SessionID
1188 5. session能夠存儲除了資源之外的任何類型數據。
1189     數據被序列化後再保存到文件中。
1190 6. $_SESSION的元素下標不能爲整型1191     由於只對元素值進行序列化。
1192     元素內的數組下標無此要求。
1193 7. 生存週期
1194     默認是瀏覽器關閉
1195         由於瀏覽器保存的cookie變量SessionID是臨時的
1196         可是服務器端的session數據文件不必定消失(須要等待session的垃圾回收機制來處理)
1197     能夠延長cookie中PHPSESSID變量的生命週期。(不推薦)
1198     php.ini配置session.gc_maxlifetime
1199 8. 刪除數據
1200     $_SESSION變量在腳本結束時依然會消失。開啓session機制時會造出$_SESSION變量1201     $_SESSION與保存session數據的文件是兩個空間1202     unset($_SESSION['key'])只是刪除數組內的該元素,不會當即相應到保存session數據的文件上。
1203         等到腳本結束,纔會將$_SESSION的數據寫入到該文件中1204     session_destroy()    銷燬保存session數據的文件,也不會對該文件寫入內容。
1205         並不刪除$_SESSION變量,unset或腳本結束纔會刪除該變量。
1206     如何徹底刪除一個session?需刪除3部分
1207         unset($_SESSION);    
1208             刪除$_SESSION變量後,數據文件並未被改動。若是單獨使用unset,則需先置空$_SESSION = array()
1209         session_destroy();
1210         setcookie('PHPSESSID', '', time()-1); //保險作法是將其生命週期失效
1211     整個腳本週期內,只對數據文件讀一次、寫一次。
1212 
1213 // 重寫session的存儲機制
1214 # session存儲方式
1215 session.save_handler = user|files|memcache
1216 # 因數據文件過多致使的問題,可經過分子目錄保存進行解決
1217 PHP配置文件下session.save_path選項,並需手動建立數據存放目錄。
1218 在該配置選項前加層級。分佈子目錄的原則,利用會話ID的相應字母來分配子目錄。仍需手動建立子目錄。
1219 session.save_path = "2; F:/PHPJob/Temp"
1220 # 多服務器數據共享問題
1221 # 數據存儲操做:
1222     初始化$open、釋放資源$close、讀$read、寫$write、銷燬存儲介質$destroy(調用session_destroy時觸發該操做)、垃圾回收$gc
1223 # 會話ID的長度可變。不一樣的設置方式致使不一樣長度的會話ID。
1224 session.hash_function   容許用戶指定生成會話ID的散列算法。
1225     '0' 表示MD5(128 位),'1' 表示SHA-1(160 位)。
1226 session.hash_bits_per_character    容許用戶定義將二進制散列數據轉換爲可讀的格式時每一個字符存放多少個比特。
1227     可能值爲 '4'(0-9,a-f),'5'(0-9,a-v),以及 '6'(0-9,a-z,A-Z,"-",",")。
1228     總hash長度爲128bit,會話ID長度爲128/可能值,4->32, 5->26, 6->22
1229 # 自定義數據存儲操做方法
1230 # 注意:不用關心PHP如何序列化、反序列化、如何獲得數據和寫入數據,只作與數據存儲相關的操做
1231 session_set_save_handler    設置用戶自定義的會話數據存儲函數
1232     bool session_set_save_handler(callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc)
1233 執行順序:open,  close, read, write, destroy, gc
1234 # 先設置處理器,再開啓會話
1235 
1236 # 經常使用函數
1237 session_start        開啓或恢復會話機制
1238 session_id            獲取或設置當前會話ID
1239 session_destroy        銷燬當前會話的全部數據(銷燬數據文件)
1240 session_name        獲取或設置當前會話名稱(cookie變量名,默認爲PHPSESSID)
1241 session_save_path    獲取或設置當前會話數據文件保存路徑
1242 session_set_save_handler    設置用戶自定義的會話數據存儲函數
1243 session_unset        釋放全部會話變量(清空$_SESSION數組元素)
1244 session_encode        將當前會話數據編碼爲一個字符串
1245 session_decode        將字符串解譯爲會話數據
1246 session_write_close    寫入會話數據並關閉會話
1247 session_register_shutdown    關閉會話
1248 session_set_cookie_params    設置會話cookie變量,必須在session_start()前使用。
1249     session_set_cookie_params(0,"/webapp/"); //設置session生存時間
1250 session_get_cookie_params    獲取會話cookie變量。返回包含當前會話cookie信息的數組
1251 
1252 # 配置php.ini
1253 ini_set($varname, $newvalue);
1254     //該函數的配置只對當前腳本生效
1255     //並不是全部php.ini設置都可用該函數設置
1256 ini_get($varname)   //獲取某配置項信息
1257 ini_get_all([str $extension])   //返回全部配置項信息的數組
1258 
1259 # session擴展配置
1260 session.name    指定會話名以用做cookie的名字。只能由字母數字組成,默認爲PHPSESSID。
1261 session.save_path   定義了傳遞給存儲處理器的參數。
1262     若是選擇了默認的files文件處理器,則此值是建立文件的路徑。默認爲/tmp。
1263     可選的N參數來決定會話文件分佈的目錄深度。
1264     要使用N參數,必須在使用前先建立好這些目錄。在ext/session目錄下有個小的shell腳本名叫mod_files.sh能夠用來作這件事。
1265     若是使用了N參數而且N大於0,那麼將不會執行自動垃圾回收。
1266 session.save_handler    定義了來存儲和獲取與會話關聯的數據的處理器的名字。默認爲files。
1267     若是用戶自定義存儲器,則該值改成user。
1268     ini_set('session.save_handler', 'user');//此設置只針對當前腳本生效。
1269 session.auto_start  指定會話模塊是否在請求開始時自動啓動一個會話。默認爲 0(不啓動)。
1270 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。
1271 
1272 
1273 /* 【圖片生成與處理】 */GD庫
1274 // 畫布生成
1275 # 新建畫布
1276 imagecreate             新建一個基於調色板的圖像
1277     resource imagecreate(int $x_size, int $y_size)
1278 imagecreatetruecolor    新建一個真彩色圖像
1279 # 基於已有文件或URL建立畫布
1280 imagecreatefromgd2      從GD2文件或URL新建一圖像
1281 imagecreatefromgd2part  從給定的GD2文件或URL中的部分新建一圖像
1282 imagecreatefromgd       從GD文件或URL新建一圖像
1283 imagecreatefromgif      由文件或URL建立一個新圖象
1284 imagecreatefromjpeg     由文件或URL建立一個新圖象
1285 imagecreatefrompng      由文件或URL建立一個新圖象
1286 imagecreatefromstring   從字符串中的圖像流新建一圖像
1287 imagecreatefromwbmp     由文件或URL建立一個新圖象
1288 imagecreatefromxbm      由文件或URL建立一個新圖象
1289 imagecreatefromxpm      由文件或URL建立一個新圖象
1290 // 顏色分配
1291 imagecolorallocate          爲一幅圖像分配顏色
1292     int imagecolorallocate(resource $image, int $red, int $green, int $blue)
1293 imagecolorallocatealpha     爲一幅圖像分配顏色 + alpha
1294 imagecolordeallocate        取消圖像顏色的分配
1295 imagecolortransparent       將某個顏色定義爲透明色
1296 imagecolorat            取得某像素的顏色索引值
1297 imagecolorclosest       取得與指定的顏色最接近的顏色的索引值
1298 imagecolorclosestalpha  取得與指定的顏色加透明度最接近的顏色
1299 imagecolorclosesthwb    取得與給定顏色最接近的色度的黑白色的索引
1300 imagecolorexact         取得指定顏色的索引值
1301 imagecolorexactalpha    取得指定的顏色加透明度的索引值
1302 imagecolormatch         使一個圖像中調色板版本的顏色與真彩色版本更能匹配
1303 imagecolorresolve       取得指定顏色的索引值或有可能獲得的最接近的替代值
1304 imagecolorresolvealpha  取得指定顏色 + alpha 的索引值或有可能獲得的最接近的替代值
1305 imagecolorset           給指定調色板索引設定顏色
1306 imagecolorsforindex     取得某索引的顏色
1307 imagecolorstotal        取得一幅圖像的調色板中顏色的數目
1308 // 區域填充
1309 imagefill   區域填充
1310     bool imagefill(resource $image, int $x, int $y, int $color)
1311 imagefilledarc          畫一橢圓弧且填充
1312 imagefilledellipse      畫一橢圓並填充
1313 imagefilledpolygon      畫一多邊形並填充
1314 imagefilledrectangle    畫一矩形並填充
1315 imagefilltoborder       區域填充到指定顏色的邊界爲止
1316 imagesettile    設定用於填充的貼圖
1317 // 圖形建立
1318 imagearc        畫橢圓弧
1319 imagechar       水平地畫一個字符
1320 imagecharup     垂直地畫一個字符
1321 imagedashedline 畫一虛線
1322 imageellipse    畫一個橢圓
1323 imageline       畫一條線段
1324 imagepolygon    畫一個多邊形
1325 imagerectangle  畫一個矩形
1326 imagesetpixel   畫一個單一像素
1327 imagesx         取得圖像寬度
1328 imagesy         取得圖像高度
1329 // 畫筆設置
1330 imagesetbrush   設定畫線用的畫筆圖像
1331 imagesetstyle   設定畫線的風格
1332 imagesetthickness   設定畫線的寬度
1333 // 圖形拷貝
1334 imagecopy           拷貝圖像的一部分
1335 imagecopymerge      拷貝併合並圖像的一部分
1336 imagecopymergegray  用灰度拷貝併合並圖像的一部分
1337 imagecopyresampled  重採樣拷貝部分圖像並調整大小
1338 imagecopyresized    拷貝部分圖像並調整大小
1339 // 字符建立
1340 imagestring         水平地畫一行字符串
1341 imagestringup       垂直地畫一行字符串
1342 imagepsslantfont    傾斜某字體
1343 imagefontheight     取得字體高度
1344 imagefontwidth      取得字體寬度
1345 imagettfbbox        取得使用 TrueType 字體的文本的範圍
1346 imageloadfont       載入一新字體
1347 imagepsencodefont   改變字體中的字符編碼矢量
1348 imagepsextendfont   擴充或精簡字體
1349 // 導出畫布爲圖片
1350 imagegif    以GIF格式將圖像輸出到瀏覽器或文件
1351 imagepng    以PNG格式將圖像輸出到瀏覽器或文件
1352 imagejpeg   以JPEG格式將圖像輸出到瀏覽器或文件
1353 imagewbmp   以WBMP格式將圖像輸出到瀏覽器或文件
1354 經過header()發送 "Content-type: image/圖片格式" 可使PHP腳本直接輸出圖像。
1355     header("Content-type: image/gif"); imagegif($im);
1356 imagegd     將 GD 圖像輸出到瀏覽器或文件
1357 imagegd2    將 GD2 圖像輸出到瀏覽器或文件
1358 // 釋放畫布資源
1359 imagedestroy    銷燬圖像
1360 // 圖像信息
1361 image_type_to_extension     取得圖像類型的文件後綴
1362 getimagesize                取得圖像大小
1363 imagesx                     取得圖像寬度
1364 imagesy                     取得圖像高度
1365 imageistruecolor            檢查圖像是否爲真彩色圖像
1366 imagetypes                  返回當前 PHP 版本所支持的圖像類型
1367 // 圖像設置
1368 imagerotate         用給定角度旋轉圖像
1369 imagealphablending  設定圖像的混色模式
1370 imageantialias      是否使用抗鋸齒(antialias)功能
1371 imagefilter         對圖像使用過濾器
1372 imagegammacorrect   對 GD 圖像應用 gamma 修正
1373 imageinterlace      激活或禁止隔行掃描
1374 
1375 /* 【縮略圖】【水印】 */
1376 imagecopyresampled  重採樣拷貝部分圖像並調整大小
1377     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 )
1378 imagecopymerge      拷貝併合並圖像的一部分
1379     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 )
1380 getimagesize        取得圖像大小
1381     array getimagesize ( string $filename [, array &$imageinfo ] )
1382 
1383 /* 【URL函數】 */
1384 get_headers — 取得服務器響應一個 HTTP 請求所發送的全部標頭
1385 get_meta_tags — 從一個文件中提取全部的 meta 標籤 content 屬性,返回一個數組
1386 http_build_query — 生成 URL-encode 以後的請求字符串
1387 urldecode — 解碼已編碼的URL字符串
1388 urlencode — 編碼URL字符串
1389 parse_url — 解析URL,返回其組成部分
1390     'http://username:password@hostname/path?arg=value#anchor'
1391     scheme(如http), host, port, user, pass, path, query(在問號?以後), fragment(在散列符號#以後)
1392 
1393 
1394 //編碼可用於交換多個變量
1395 $a = '中國';
1396 $b = '四川';
1397 $a = urlencode($a);
1398 $b = urlencode($b);
1399 $a = $a.'&'.$b;
1400 $b = explode('&', $a);
1401 $a = urldecode($b[1]);
1402 $b = urldecode($b[0]);
1403 echo $a, $b;
1404 //list()函數用於交換變量
1405 list($a, $b) = array($b, $a);
1406 
1407 
1408 /* 【文件、目錄】 */
1409 dirname($path)  返回路徑中的目錄部分
1410 basename($path [,$suffix])  返回路徑中的文件名部分
1411 pathinfo($path [,$options]) 返回文件路徑的信息(數組元素:dirname,basename,extension)
1412 realpath($path) 返回規範化的絕對路徑名
1413 
1414 copy($source, $dest)    拷貝文件
1415 unlink($file)   刪除文件
1416 rename($old, $new)  重命名或移動一個文件或目錄
1417 mkdir($path [,$mode [,$recursive]]) 新建目錄
1418     $mode表示權限,默認0777
1419     $recursive表示可建立多級目錄,默認false
1420 rmdir($dir)     刪除目錄(目錄必須爲空,且具備權限)
1421 
1422 file_exists($file)  檢查文件或目錄是否存在
1423 is_file($file)      判斷文件是否存在且爲正常的文件
1424 is_dir($file)       判斷文件名是否存在且爲目錄
1425 is_readable($file)  判斷文件或目錄是否可讀
1426 is_writable($file)  判斷文件或目錄是否可寫
1427 is_executable($file)    判斷給定文件名是否可執行
1428 is_link($file)      判斷給定文件名是否爲一個符號鏈接
1429 
1430 tmpfile(void)   創建一個臨時文件
1431 tempnam($dir, $prefix)  在指定目錄中創建一個具備惟一文件名的文件
1432 
1433 file($file) 把整個文件讀入一個數組中
1434 fopen($filename, $mode [,$use_include_path])
1435     $mode參數:(加入'b'標記解決移植性)
1436         'r'     只讀方式打開,將文件指針指向文件頭。
1437         'r+'    讀寫方式打開,將文件指針指向文件頭。
1438         'w'     寫入方式打開,將文件指針指向文件頭並將文件大小截爲零。若是文件不存在則嘗試建立之。
1439         'w+'    讀寫方式打開,將文件指針指向文件頭並將文件大小截爲零。若是文件不存在則嘗試建立之。
1440         'a'     寫入方式打開,將文件指針指向文件末尾。若是文件不存在則嘗試建立之。
1441         'a+'    讀寫方式打開,將文件指針指向文件末尾。若是文件不存在則嘗試建立之。
1442         'x'     建立並以寫入方式打開,將文件指針指向文件頭。
1443         'x+'    建立並以讀寫方式打開,將文件指針指向文件頭。
1444 fclose($handle) 關閉一個已打開的文件指針
1445 fread($handle, $length) 讀取文件(可安全用於二進制文件)
1446 fwrite($handle, $string [,$length]) 寫入文件(可安全用於二進制文件)
1447 rewind($handle) 倒回文件指針的位置
1448 ftell($handle)  返回文件指針讀/寫的位置
1449 fseek($handle, $offset [,$whence])  在文件指針中定位
1450 feof($handle)   測試文件指針是否到了文件結束的位置
1451 fgets   從文件指針中讀取一行
1452 fgetss  從文件指針中讀取一行並過濾掉HTML標記
1453 flock($handle, $opt) 輕便的諮詢文件鎖定
1454     $opt:LOCK_SH 取得共享鎖定(讀取的程序);LOCK_EX 取得獨佔鎖定(寫入的程序);LOCK_UN 釋放鎖定(不管共享或獨佔)
1455 
1456 
1457 readfile($file) 讀入一個文件並寫入到輸出緩衝
1458 fflush($handle) 將緩衝內容輸出到文件
1459 
1460 touch($file [,$time [,$atime]])   設定文件的訪問和修改時間
1461 fileatime   取得文件的上次訪問時間
1462 filectime   取得文件的inode修改時間
1463 filegroup   取得文件的組
1464 fileinode   取得文件的inode
1465 filemtime   取得文件修改時間
1466 fileowner   取得文件的全部者
1467 fileperms   取得文件的權限
1468 filesize    取得文件大小
1469 filetype    取得文件類型
1470 
1471 
1472 /* fileinfo */ 獲取/設置文件信息
1473 #擴展Fileinfo,配置php.ini
1474 #extension=php_fileinfo.dll
1475 finfo_open([$opt]) //建立一個文件信息資源
1476 finfo_file($finfo, $file [,$opt]) //獲取文件信息
1477 finfo_set_flags($finfo, $opt) //設置文件信息項
1478 finfo_close($finfo) //關閉文件信息資源
1479 
1480 mime_content_type($file) //獲取文件的MIME類型
1481 
1482 $opt參數選項1483 FILEINFO_MIME_ENCODING 文件編碼類型
1484 FILEINFO_MIME_TYPE 文件MIME類型
1485 
1486 
1487 //目錄
1488 chdir($dir)         改變當前目錄
1489 chroot($dir)        將當前目錄改變爲當前進程的根目錄
1490 closedir($handle)   關閉目錄句柄
1491 dir($dir)           返回一個目錄的實例對象
1492 getcwd()            取得當前工做目錄
1493 opendir($path)      打開目錄句柄
1494 readdir($handle)    從目錄句柄中讀取條目
1495 rewinddir($handle)  倒回目錄句柄
1496 scandir($dir [,$order])     列出指定路徑中的文件和目錄
1497 glob($pattern [,$flags])    尋找與模式匹配的文件路徑
1498     $flags1499         GLOB_MARK - 在每一個返回的項目中加一個斜線  
1500         GLOB_NOSORT - 按照文件在目錄中出現的原始順序返回(不排序)  
1501         GLOB_NOCHECK - 若是沒有文件匹配則返回用於搜索的模式  
1502         GLOB_NOESCAPE - 反斜線不轉義元字符  
1503         GLOB_BRACE - 擴充 {a,b,c} 來匹配 'a','b' 或 'c'  
1504         GLOB_ONLYDIR - 僅返回與模式匹配的目錄項 
1505     查找多種後綴名文件:glob('*.{php,txt}', GLOB_BRACE);
1506 
1507 
1508 /* 解壓縮 */
1509 //新建ZipArchive對象
1510 $zip = new ZipArchive;
1511 //打開ZIP文件
1512 $zip->open($file [,$flags]);
1513     $flags1514         ZIPARCHIVE::OVERWRITE 覆蓋(不存在會自動建立)
1515         ZIPARCHIVE::CREATE 添加(不存在會自動建立)
1516         ZIPARCHIVE::EXCL
1517         ZIPARCHIVE::CHECKCONS
1518 //關閉正在處理的ZIP文件
1519 //解壓縮ZIP文件
1520 $zip->extractTo($dest, [$entries]);
1521     $dest:解壓到的文件夾,$entries:解壓的條目
1522 //添加文件到ZIP文件
1523 $zip->addFile($file, [$newname]);   
1524     $newname能夠爲"dir/file",這樣能夠將文件添加到壓縮文件中的某個目錄下。其餘函數也如此。
1525 //添加文件到ZIP文件,而內容來自字符串
1526 $zip->addFromString($file, $str);
1527 //添加空文件夾到ZIP文件
1528 $zip->addEmptyDir($dir);
1529 //經過索引刪除ZIP中的文件或文件夾
1530 $zip->deleteIndex($index);
1531 //經過名稱刪除ZIP中的文件或文件夾
1532 $zip->deleteName($name);
1533 //設置ZIP文件註釋
1534 $zip->setArchiveComment($str);
1535 //獲取ZIP文件註釋
1536 $zip->getArchiveComment();
1537 //經過索引獲取文件內容
1538 $zip->getFromIndex($index);
1539 //經過名稱獲取文件內容
1540 $zip->getFromName($name);
1541 //獲取索引文件的文件名稱
1542 $zip->getNameIndex($index);
1543 //經過索引重命名文件
1544 $zip->renameIndex($index, $newname);
1545 //經過名稱重命名文件
1546 $zip->renameName($name, $newname);
1547 
1548 //若將文件夾內容打包成ZIP文件,需循環文件夾的全部目錄及文件
1549 function addFileToZip($path, $zip) {
1550     //打開當前文件夾$path
1551     $handle = opendir($path);
1552     //循環讀取子文件夾及文件
1553     //爲防止文件名自己可被轉換爲false的狀況(好比爲"0"),則需用不全等!==
1554     while ($file = readdir($handle) !== false) {
1555         //過濾假文件夾
1556         if ($file != '.' && $file != '..') {
1557             //對於子文件夾則遞歸調用本函數
1558             if (is_dir($path . '/' . $file)) {
1559                 addFileToZip($path.'/'.$file, $zip);
1560             } else {
1561                 //將文件添加到ZIP對象
1562                 $zip->addFile($path . '/' . $file);
1563             }
1564         }
1565     }
1566     //關閉文件夾$path
1567     closedir($path);
1568 }
1569 // ----- END 解壓縮 ----- //
1570 
1571 
1572 /* 【文件上傳】 */
1573 enctype="multipart/form-data"   //FORM標籤必須的屬性
1574 $_FILES 上傳文件信息數組變量
1575 error   上傳錯誤信息
1576   無錯誤
1577   文件大小超過php.ini配置
1578         1) upload_max_filesize 容許上傳的最大文件大小
1579         2) post_max_size 最大的POST數據大小
1580         3) memory_limit 每一個腳本可以使用的最大內存數量(默認128MB)
1581   文件大小超過瀏覽器表單配置
1582         MAX_FILE_SIZE   表示表單數據最大文件大小,該元素需在文件上傳域以前。(默認2M)
1583         <input type="hidden" name="MAX_FILE_SIZE" value="102400">
1584   文件只有部分被上傳
1585   文件沒有被上傳
1586     6,7 臨時文件寫入時失敗
1587   找不到臨時文件
1588   文件寫入失敗
1589 name    文件名
1590 type    文件類型
1591 tmp_name    上傳文件臨時路徑
1592 size    文件大小
1593 move_uploaded_file($path, $newpath);    //將上傳的文件移動到新位置
1594 is_uploaded_file($file) //判斷是否爲POST上傳的文件
1595 //多文件上傳
1596 <input type="file" name="updfile[]" /> //HTML中以數組提交
1597 $_FILES['updfile']['tmp_name'][0]   //服務器端可訪問第一個文件的臨時路徑,其餘屬性相似
1598 
1599 
1600 //php.ini配置
1601 file_uploads = On 是否容許HTTP上傳文件
1602 upload_max_filesize 上傳文件大小限制,默認爲2M
1603 post_max_size   post方式表單數據總大小限制,默認爲8M
1604 upload_tmp_dir  上傳文件臨時目錄,默認是系統臨時目錄
1605     需設置上傳文件臨時目錄,給其最小權限
1606 GET方式的最大傳輸量爲2K
1607 
1608 
1609 /* 【批量提交】 */
1610 FORM表單中的name值可用名稱加中括號的形式,在$_POST獲取表單數據時,可多項提交造成數組。
1611 好比多文件上傳file,複選框提交checkbox等。
1612 <input type="checkbox" name="id[]" value="值1" />
1613 <input type="checkbox" name="id[]" value="值2" />
1614 $id = $_POST['id']; //則可得到所有被選中的複選框值,造成索引數組
1615 若是name值爲:
1616 <input type="checkbox" name="id[one]" value="值1" />
1617 <input type="checkbox" name="id[two]" value="值2" />
1618 $id = $_POST['id'];  //則可獲取全部name爲id[...]的值,造成管理數組
1619 
1620 
1621 /* iconv */
1622 //php.ini配置iconv
1623 [iconv]
1624 ;iconv.input_encoding = ISO-8859-1
1625 ;iconv.output_encoding = ISO-8859-1
1626 ;iconv.internal_encoding = ISO-8859-1
1627 iconv_set_encoding($type, $charset);
1628     $type:input_encoding,output_encoding,internal_encoding
1629 iconv_get_encoding([$type = "all"])
1630     $type:all,input_encoding,output_encoding,internal_encoding
1631 
1632 
1633 
1634 iconv($in_charset, $out_charset, $str) //將字符串轉換爲目標編碼
1635 
1636 指定編碼,可解決中文字符的統計、查詢、截取等!
1637 iconv_strlen($str [,$charset]) //統計字符串的字符數
1638 iconv_strpos($str, $needle, $offset [,$charset]) //查找子串首次出現的位置
1639 iconv_strrpos($str, $needle [,$charset]) //查找子串最後一次出現的位置
1640 iconv_substr($str, $offset [,$len [,$charset]]) //截取子串
1641 
1642 
1643 /* 【字符串函數】*/
1644 addslashes($str)    //使用反斜線轉移字符串
1645 stripcslashes($str) //反引用一個使用addcslashes轉義的字符串
1646 stripslashes($str)  //反引用一個引用字符串
1647 chr($ascii) //返回ASCII碼的字符
1648 ord($char)  //返回字符的ASCII碼
1649 substr_count($haystack, $needle)    //計算子串出現的次數
1650 count_chars($str [,$mode])  統計每一個字節值出現的次數
1651     //0 - 以全部的每一個字節值做爲鍵名,出現次數做爲值的數組。  
1652     //1 - 與0相同,但只列出出現次數大於零的字節值。  
1653     //2 - 與0相同,但只列出出現次數等於零的字節值。  
1654     //3 - 返回由全部使用了的字節值組成的字符串。  
1655     //4 - 返回由全部未使用的字節值組成的字符串。 
1656 crypt($str, [$salt])    //單向字符串散列
1657 str_split($str [,$len]) //將字符串按長度分割爲數組
1658 explode($separ, $str)   //使用一個字符串分割另外一個字符串
1659 implode([$glue,] $arr)  //將數組元素的值根據$glue鏈接成字符串
1660 chunk_split($str [,$len [,$end]])   //將字符串分割成小塊
1661     $len:每段字符串的長度,$end:每段字符串末尾加的字符串(如"\r\n")
1662 html_entity_decode($str [,$flags [,$encoding]]) //將HTML實體轉成字符信息
1663 htmlentities($str [,$flags [,$encoding]])   //將字符信息轉成HTML實體
1664 htmlspecialchars_decode($str)   //將特殊HTML實體轉成字符信息
1665 htmlspecialchars($str [,$flags [,$encoding]])   //將字符信息轉成特殊HTML實體
1666 lcfirst($str)   //將字符串首字母轉成小寫
1667 ucfirst($str)   //將字符串首字母轉成大寫
1668 ucwords($str)   //將字符串中每一個單詞的首字母轉換爲大寫
1669 strtolower($str)    //將字符串轉化爲小寫
1670 strtoupper($str)    //將字符串轉化爲大寫
1671 trim($str [,$charlist]) //去除字符串首尾處的空白字符(或者其餘字符)
1672 ltrim($str [,$charlist])    //去除字符串首段的空白字符(或者其餘字符)
1673 rtrim($str [,$charlist])    //去除字符串末端的空白字符(或者其餘字符)
1674 md5_file($file) //計算指定文件的MD5散列值
1675 md5($str)   //計算字符串的MD5散列值
1676 money_format($format, $num) //將數字格式化爲貨幣形式
1677 number_format($num) //格式化數字
1678 nl2br($str) //在字符串全部新行以前插入HTML換行標記<br />
1679 parse_str($str, [$arr]) //解析字符串
1680 print($str) //輸出字符串
1681 printf      //輸出格式化字符串
1682 sprintf($format [,$args...])    //格式化字符串
1683 sha1_file   //計算文件的sha1散列值
1684 sha1        //計算字符串的sha1散列值
1685 similar_text($first, $second [,$percent])   //計算兩個字符串的類似度
1686     返回在兩個字符串中匹配字符的數目,$percent存儲類似度百分比
1687 str_replace($search, $replace, $str [,$count [,$type]])  //子字符串替換
1688 str_ireplace    //字符串替換(忽略大小寫)
1689 str_pad($str, $len [,$pad [,$type]])  //使用另外一個字符串填充字符串爲指定長度
1690     $type:在何處填充。STR_PAD_RIGHT,STR_PAD_LEFT 或 STR_PAD_BOTH
1691 str_repeat($str, $num)  //重複一個字符串
1692 str_shuffle($str)   //隨機打亂一個字符串
1693 str_word_count($str [,$format [,$charlist]])    //返回字符串中單詞的使用狀況
1694 strcasecmp($str1, $str2)    //二進制安全比較字符串(不區分大小寫)
1695     若是str1小於str2,返回負數;若是str1大於str2,返回正數;兩者相等則返回0。
1696 strcmp($str1, $str2)    //二進制安全字符串比較
1697 strcoll($str1, $str1)   //基於區域設置的字符串比較(區分大小寫,非二進制安全)
1698 strcspn($str1, $str1 [,$start [,$len]])   //獲取不匹配遮罩的起始子字符串的長度
1699 strip_tags($str)    //從字符串中去除HTML和PHP標記
1700 strpos($haystack, $needle [,$offset])   //查找字符串首次出現的位置
1701 stripos($haystack, $needle [,$offset])    //查找字符串首次出現的位置(不區分大小寫)
1702 strripos($haystack, $needle [,$offset])   //計算指定字符串在目標字符串中最後一次出現的位置(不區分大小寫)
1703 strrpos($haystack, $needle [,$offset])   //計算指定字符串在目標字符串中最後一次出現的位置
1704 strlen($str)    //獲取字符串長度
1705 strpbrk($haystack, $str)    //在字符串中查找一組字符的任何一個字符
1706 strrev($str)    //反轉字符串
1707     join('', array_reverse(preg_split("//u", $str))); //實現對UTF-8字符串的反轉
1708 strspn$subject, $mask)  //計算字符串中所有字符都存在於指定字符集合中的第一段子串的長度。
1709 strstr($haystack, $needle)   //查找字符串的首次出現
1710 stristr($haystack, $needle)   //查找字符串的首次出現(不區分大小寫)
1711 strrchr($haystack, $needle) //查找指定字符在字符串中的最後一次出現
1712 strtok($str, $token)    //標記分割字符串
1713 substr_compare($main_str, $str, $offset [,$len) //二進制安全比較字符串(從偏移位置比較指定長度)
1714 substr_replace$str, $replace, $start [,$len]    //替換字符串的子串
1715 strtr($str, $from, $to) //轉換指定字符
1716 substr($str, $start [,$len])    //返回字符串的子串
1717 vfprintf$handle, $format, $args)    //將格式化字符串寫入流
1718 vprintf($format, $args) //輸出格式化字符串
1719 vsprintf($format, $args) //返回格式化字符串
1720 wordwrap($str [,$width=75 [,$break='\n']])  //打斷字符串爲指定數量的字串
1721 
1722 crc32($str) //計算一個字符串的crc32多項式
1723     crc32算法[循環冗餘校驗算法]
1724     生成str的32位循環冗餘校驗碼多項式。將數據轉換成整數。
1725 
1726 /* mbstring(多字節字符串) */
1727 //需開啓mbstring擴展
1728 mb_strimwidth($str, $start, $width [,$trim [,$encoding]])   //保留指定的子串(並補充)
1729 mb_stripos($str, $needle [,$offset [,$encoding]])   //查找子串首次出現的位置(忽略大小寫)
1730 mb_strpos($str, $needle [,$offset [,$encoding]])   //查找子串首次出現的位置
1731 mb_strripos($str, $needle [,$offset [,$encoding]])   //查找子串最後一次出現的位置(忽略大小寫)
1732 mb_strrpos($str, $needle [,$offset [,$encoding]])   //查找子串最後一次出現的位置
1733 mb_strstr($str, $needle [,$before [,$encoding]])    //返回子串首次出現位置以後(前)的字符串
1734 mb_stristr($str, $needle [,$before [,$encoding]])    //返回子串首次出現位置以後(前)的字符串(忽略大小寫)
1735 mb_strrchr($str, $needle [,$before [,$encoding]])    //返回字符最後一次出現位置以後(前)的字符串
1736 mb_strrichr($str, $needle [,$before [,$encoding]])    //返回字符最後一次出現位置以後(前)的字符串(忽略大小寫)
1737 
1738 mb_strtoupper($str [,$encoding])    //轉換成大寫
1739 mb_strtolower($str [,$encoding])    //轉換成小寫
1740 
1741 mb_strlen($str [,$encoding])    //獲取字符串長度
1742 mb_split($pattern, $str [,$limit])  //將字符串分割成數組
1743 mb_substr($str, $start [,$len [,$encoding]])    //獲取字符串的子串
1744 mb_strcut($str, $start [,$len [,$encoding]])    //獲取字符串的子串
1745 mb_strwidth($str [,$encoding])  //獲取字符串的寬度
1746 mb_substr_count($str, $needle [,$encoding]) //子串在字符串中出現的次數
1747 
1748 
1749 /* PCRE函數 */
1750 preg_filter($pattern, $replace, $subject [,$limit [,&$count]])  執行一個正則表達式搜索和替換
1751 preg_replace($pattern, $replace, $subject [,$limit [,&$count]])  執行一個正則表達式搜索和替換
1752 preg_replace_callback($pattern, $callback, $subject [,$limit [,&$count]])   執行一個正則表達式搜索而且使用一個回調進行替換
1753 preg_grep($pattern, $input [,$flags])   返回匹配模式的數組條目
1754 preg_match($pattern, $subject [,&$matches [,$flags [,$offset]]]) 執行一個正則表達式匹配
1755 preg_match_all($pattern, $subject [,&$matches [,$flags [,$offset]]]) 執行一個全局正則表達式匹配
1756     $matches存放返回的結果
1757         $matches[0][n] (n>=0) 表示存放第n+1個匹配到的結果
1758         $matches[m][n] (m>=1, n>=0) 表示存放第n+1個匹配到結果的第m個表達式的內容
1759 preg_split($pattern, $subject [,$limit [,$flags]])  經過一個正則表達式分隔字符串
1760     $limit表示限制分隔獲得的子串最多隻有limit個,-1表示不限制
1761     $flags參數1762         PREG_SPLIT_NO_EMPTY:將返回分隔後的非空部分
1763         PREG_SPLIT_DELIM_CAPTURE:用於分隔的模式中的括號表達式將被捕獲並返回
1764         PREG_SPLIT_OFFSET_CAPTURE:對於每個出現的匹配返回時將會附加字符串偏移量
1765 preg_quote($str [,$delimiter])  轉義正則表達式字符
1766 preg_last_error()   返回最後一個PCRE正則執行產生的錯誤代碼
1767 
1768 
1769 /* Math函數 */
1770 base_convert($number, $frombase, $tobase)   //在任意進制之間轉換數字
1771 ceil($float)    //向上取整
1772 floor($float)   //向下取整
1773 exp($float) //計算e的指數
1774 hypot($x, $y)   //計算直角三角形的斜邊長
1775 is_nan($val)    //判斷是否爲合法數值
1776 log($arg [,$base=e])  //天然對數
1777 max($num1, $num2, ...)  //找出最大值
1778     max($arr)   //找出數組中的最大值
1779 min($num1, $num2, ...)  //找出最小值
1780 rand([$min], $max)  //產生一個隨機整數
1781 srand([$seed])  //播下隨機數發生器種子
1782 mt_rand([$min], $max)   //生成更好的隨機數
1783 mt_srand($seed)     //播下一個更好的隨機數發生器種子
1784 pi()    //獲得圓周率值
1785 pow($base, $exp)    //指數表達式
1786 sqrt($float)    //求平方根
1787 deg2rad($float) //將角度轉換爲弧度
1788 rad2deg($float) //將弧度數轉換爲相應的角度數
1789 round($val [,$pre=0]) //對浮點數進行四捨五入
1790 fmod($x, $y) //返回除法的浮點數餘數
1791 
1792 
1793 
1794 /* 【MySQL函數】 */
1795 mysql_client_encoding([$link])  //返回字符集的名稱
1796 mysql_set_charset($charset [,$link])    //設置客戶端字符集編碼
1797 mysql_connect($host, $user, $pass)  //打開一個到MySQL服務器的鏈接
1798 mysql_create_db($db [,$link])   //新建一個MySQL數據庫
1799 mysql_pconnect($host, $user, $pass) //打開一個到MySQL服務器的持久鏈接
1800 mysql_ping([$link]) //Ping一個服務器鏈接,若是沒有鏈接則從新鏈接
1801 mysql_close([$link])    //關閉MySQL鏈接
1802 
1803 mysql_data_seek($result, $row)  //移動內部結果的指針
1804 mysql_errno([$link])    //返回上一個MySQL操做中的錯誤信息的數字編碼
1805 mysql_error([$link])    //返回上一個MySQL操做產生的文本錯誤信息
1806 mysql_affected_rows([$link])  //取得前一次MySQL操做所影響的記錄行數
1807 mysql_info([$link]) //取得最近一條查詢的信息
1808 mysql_insert_id([$link])    //取得上一步INSERT操做產生的ID
1809 
1810 mysql_query($sql [,$link])  //發送一條MySQL查詢
1811 mysql_unbuffered_query($sql [,$link])   //向MySQL發送一條SQL查詢,並不獲取和緩存結果的行
1812 mysql_db_query($db, $sql [,$link])  //發送一條MySQL查詢
1813 
1814 mysql_escape_string($str)   //轉義一個字符串用於mysql_query
1815 mysql_real_escape_string($str)  //轉義SQL語句中使用的字符串中的特殊字符,並考慮到鏈接的當前字符集
1816 
1817 mysql_fetch_array($result [,$type]) //從結果集中取得一行做爲關聯數組,或數字數組,或兩者兼有
1818 mysql_fetch_assoc($result)  //從結果集中取得一行做爲關聯數組
1819 mysql_fetch_object($result) //從結果集中取得一行做爲對象
1820 mysql_fetch_row($result)    //從結果集中取得一行做爲枚舉數組
1821 mysql_fetch_field($result)  //從結果集中取得列信息並做爲對象返回
1822 mysql_num_fields($result)   //取得結果集中字段的數目
1823 mysql_num_rows($result) //取得結果集中行的數目
1824 
1825 mysql_fetch_lengths($result)    //取得結果集中每一個輸出的長度
1826 mysql_field_flags($result, $field_offset)    //從結果中取得和指定字段關聯的標誌
1827 mysql_field_len($result, $field_offset)    //返回指定字段的長度
1828 mysql_field_name($result, $field_offset)    //取得結果中指定字段的字段名
1829 mysql_field_seek($result, $field_offset)    //將結果集中的指針設定爲制定的字段偏移量
1830 mysql_field_table($result, $field_offset)   //取得指定字段所在的表名
1831 mysql_field_type($result, $field_offset)    //取得結果集中指定字段的類型
1832 mysql_free_result($result)  //釋放結果內存
1833 
1834 mysql_list_dbs([$link]) //列出MySQL服務器中全部的數據庫
1835 mysql_list_fields($db, $table [,$link]) //列出MySQL結果中的字段
1836 mysql_list_processes([$link])   //列出MySQL進程
1837 mysql_list_tables($db [,$link]) //列出MySQL數據庫中的表
1838 
1839 mysql_result($result, $row [$field])    //取得結果數據
1840 mysql_select_db($db [,$link])   //選擇MySQL數據庫
1841 mysql_tablename($result, $i)    //取得表名
1842 mysql_db_name($result, $row [,$field])  //取得mysql_list_dbs()調用所返回的數據庫名
1843 
1844 mysql_stat([$link]) //取得當前系統狀態
1845 mysql_thread_id([$link])    //返回當前線程的ID
1846 mysql_get_client_info() //取得MySQL客戶端信息
1847 mysql_get_host_info()   //取得MySQL主機信息
1848 mysql_get_proto_info()  //取得MySQL協議信息
1849 mysql_get_server_info() //取得MySQL服務器信息
1850 
1851 
1852 /* 【SQL注入】 */
1853 特殊字符致使的問題:
1854     1. 轉義:mysql_real_escape_string()
1855         對外來數據(GPC: GET, POST, COOKIE)進行轉義
1856     2. 先查詢當前記錄行,再匹配用戶名
1857 
1858 //魔術引號機制
1859 自動爲全部提交到服務器的數據增長特殊符號的轉義。
1860 當打開時,全部的單引號,雙引號,反斜線和NULL字符都會被自動加上一個反斜線進行轉義。這和addslashes()做用徹底相同。
1861 php.ini配置:
1862     magic_quotes_gpc = Off
1863 get_magic_quotes_gpc()  獲取當前魔術引號機制的配置信息
1864 
1865 /* 【錯誤處理】 */
1866 解析錯誤、運行錯誤
1867 //標準錯誤:
1868     級別、信息、文件、行號
1869     trigger_error   觸發一個用戶自定義的error/warning/notice錯誤信息
1870 
1871 //php.ini配置,ini_set()
1872 error_reporting         設置報告哪些級別的錯誤
1873 # 錯誤報告:顯示到頁面
1874     display_errors = On 是否顯示錯誤報告
1875 # 錯誤日誌:存放到文件
1876     log_errors = on     是否開啓錯誤日誌
1877     error_log           發送錯誤信息到錯誤日誌文件
1878 - 錯誤報告和錯誤日誌可同時啓用!
1879 
1880 自定義錯誤處理器
1881 set_error_handler — 註冊自定義錯誤處理器函數
1882 - 自定義處理器函數包含4個參數,分別是級別、信息、文件、行號
1883 - 開啓自定義錯誤處理器,則系統內置的錯誤報告和錯誤日誌則不會執行。
1884 - 自定義錯誤處理器函數返回false,則自定義函數結束後系統內置的會繼續執行。
1885 - 用戶定義的錯誤級別(E_USER_ERROR),能夠被自定義的錯誤處理器所捕獲並繼續執行。系統內置的錯誤,則腳本會當即中止。
1886 restore_error_handler — 恢復預約義錯誤處理器函數
1887 error_get_last — 獲取最近的錯誤信息
1888 
1889 //錯誤處理函數
1890 debug_backtrace 產生一條回溯跟蹤
1891     返回數組,包含的鍵值:function, line, file, class, object, type, args
1892 debug_print_backtrace 打印一條回溯
1893 
1894 //錯誤常量
1895 手冊>錯誤處理
1896 
1897 #生產模式
1898 關閉錯誤報告,記錄錯誤日誌。
1899 #開發模式
1900 關閉錯誤日誌,開啓錯誤報告。
1901 
1902 //異常
1903 面向對象語法中的錯誤處理方式。
1904 一個異常就是一個包含當前異常信息的對象。
1905 預約義異常類Exception及其擴展類。
1906 #拋出異常
1907 觸發一個異常的錯誤
1908 throw new UserException();
1909 若是沒有被捕獲,則報告致命錯誤。
1910 #監視異常
1911 try {代碼段}
1912 #捕獲異常
1913 catch (UserException $obj) {代碼段}
1914 須要經過當前異常的類型匹配纔可悲捕獲。
1915 #異常處理器
1916 用以處理未被捕獲的異常。
1917 異常處理器函數與catch相似,參數也是含類型的對象。
1918 set_exception_handler — 註冊異常處理器函數
1919 restore_exception_handler — 恢復預約義的異常處理器函數
1920 
1921 
1922 #自定義異常
1923 用戶定義的異常類須繼承自Exception類。
1924 
1925 //異常相關屬性
1926 protected string $message 異常消息內容
1927 protected int $code 異常代碼
1928 protected string $file 拋出異常的文件名
1929 protected int $line 拋出異常在該文件中的行號
1930 //異常相關方法
1931 Exception::__construct — 異常構造函數
1932 Exception::getMessage — 獲取異常消息內容
1933 Exception::getPrevious — 返回異常鏈中的前一個異常
1934 Exception::getCode — 獲取異常代碼
1935 Exception::getFile — 獲取發生異常的程序文件名稱
1936 Exception::getLine — 獲取發生異常的代碼在文件中的行號
1937 Exception::getTrace — 獲取異常追蹤信息
1938 Exception::getTraceAsString — 獲取字符串類型的異常追蹤信息
1939 Exception::__toString — 將異常對象轉換爲字符串
1940 Exception::__clone — 異常克隆
1941 
1942 /* 【數據庫抽象層】 */
1943 PDO:PHP Data Objects
1944 PHO抽象層默認被加載,但需加載相應數據庫的驅動。
1945 PDO是OOP語法,提供三個類:
1946 PDO:PDO自身
1947 PDOStatement:PDO語句類,提供對語句的後續處理
1948 PDOException:PDO異常類,提供對錯誤的異常處理
1949 
1950 //鏈接數據庫
1951 PDO::__construct(str $dsn [,str $username [,str $password [,arr $driver_options]]])
1952 DSN:Data Source Name,數據源
1953 $dsn = 'mysql:dbname=testdb;host=127.0.0.1;port=3306';
1954 //執行沒有返回結果的SQL語句
1955 int PDO::exec(str $statement)   //返回影響的記錄數
1956 //執行有返回結果集的SQL語句
1957 PDOStatement PDO::query (string $statement) //返回PDOStatement對象
1958 //處理結果集(PDOStatement對象)
1959 array PDOStatement::fetchAll([int $fetch_style [,mixed $fetch_argument [,array $ctor_args = array()]]])    //默認返回關聯+索引數組
1960 mixed PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )  //返回一行
1961 string PDOStatement::fetchColumn ([ int $column_number = 0 ] )  //返回一列
1962 //釋放資源
1963 unset($pdo) 或 $pdo = null
1964 
1965 //錯誤報告
1966 靜默模式:silent mode,出現錯誤,不主動報告錯誤(默認)
1967 array PDO::errorInfo(void)
1968 警告模式:warning mode,出現錯誤,觸發一個警告級別的錯誤
1969 異常錯誤:exception mode,出現錯誤,拋出異常
1970 bool PDO::setAttribute(int $attribute, mixed $value)    //設置PDO類屬性值
1971 PDO::setAttribute('PDO::ATTR_ERRMODE', 'PDO::ERRMODE_SILENT | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION')
1972 
1973 //預處理式執行SQL
1974 可對數據自動轉義,可有效抵制SQL注入。
1975 PDOStatement PDO::prepare(string $statement [,array $driver_options=array()])
1976 bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
1977 bool PDOStatement::execute ([ array $input_parameters ] )
1978 
1979 
1980 /* 【AR模式】 */
1981 表  ->1982 字段 ->  類屬性
1983 數據 ->  對象
1984 
1985 
1986 /* Date/Time */
1987 date($format [,$timestamp]) //格式化一個本地時間/日期,$timestamp默認爲time()
1988     Y:4位數字完整表示的年份
1989     m:數字表示的月份,有前導零
1990     d:月份中的第幾天,有前導零的2位數字
1991     j:月份中的第幾天,沒有前導零
1992     H:小時,24小時格式,有前導零
1993     h:小時,12小時格式,有前導零
1994     i:有前導零的分鐘數
1995     s:秒數,有前導零
1996     L:是否爲閏年,若是是閏年爲1,不然爲0
1997     M:三個字母縮寫表示的月份,Jan到Dec
1998     W:年份中的第幾周,每週從星期一開始
1999     z:年份中的第幾天
2000     N:數字表示的星期中的第幾天
2001     w:星期中的第幾天,數字表示
2002     e:時區標識
2003     T:本機所在的時區
2004     U:從Unix紀元開始至今的秒數(時間戳)
2005 time() //返回當前的Unix時間戳(秒)
2006 microtime([$get_as_float]) //返回當前Unix時間戳和微秒數
2007     $get_as_float參數存在而且其值等價於TRUE,將返回一個浮點數
2008 strtotime($time [,$now]) //將任何英文文本的日期時間描述解析爲Unix時間戳
2009     date("Y-m-d H:i:s", strtotime("-1 day")); //格式化前一天的時間戳
2010     "now"
2011     "10 September 2000"
2012     "+1 week"
2013     "+1 week -2 days 4 hours 2 seconds"
2014     "last Monday"
2015     "next Thursday"
2016 gmdate($format [,$timestamp]) //格式化一個GMT/UTC 日期/時間
2017 mktime([$hour = date("H") [,$minute = date("i") [,$second = date("s") [,$month = date("n") [,$day = date("j") [,$year = date("Y") [,$is_dst = -1]]]]]]]) //取得一個日期的Unix時間戳
2018 strftime($format [,$timestamp]) //根據區域設置格式化本地時間/日期
2019 date_default_timezone_get($timezone) //獲取默認時區
2020 date_default_timezone_set($timezone) //設置默認時區
2021 
2022 
2023 /* DateTime */
2024 //date()函數能處理有效時間戳範圍是格林威治時間 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07(由於32位系統能最大正整數限制)
2025 DateTime::__construct([$time="now"]) //構造方法
2026     $time如果時間戳,則在時間戳前加@符號,如'@2345678'
2027 DateTime::setTimezone($timezone) //設置時區
2028     eg: $date->setTimezone(new DateTimeZone('PRC'));
2029 DateTime::format($format) //格式化時間戳,格式化字符串形式同date()函數
2030 
2031 
2032 /* $_SERVER */
2033 //示例URL:http://desktop/dir/demo.php?a=aaa&b=bbb
2034 PHP_SELF 當前執行腳本的文件名 // /dir/demo.php
2035 GATEWAY_INTERFACE 服務器使用的CGI規範的版本 // CGI/1.1
2036 SERVER_ADDR 當前運行腳本所在的服務器的IP地址 // 127.0.0.1
2037 SERVER_NAME 當前運行腳本所在的服務器的主機名 // desktop
2038 SERVER_SOFTWARE 服務器標識字符串 // Apache/2.2.22 (Win32) PHP/5.3.13
2039 SERVER_PROTOCOL 請求頁面時通訊協議的名稱和版本 // HTTP/1.1
2040 REQUEST_METHOD 訪問頁面使用的請求方式 // GET
2041 REQUEST_TIME 請求開始時的時間戳 // 1386032633
2042 QUERY_STRING 查詢字符串(參數) // a=aaa&b=bbb
2043 DOCUMENT_ROOT 當前運行腳本所在的文檔根目錄 // C:/Users/Administrator/Desktop
2044 HTTP_ACCEPT 當前請求頭中Accept:項的內容 // text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
2045 HTTP_ACCEPT_CHARSET 當前請求頭中Accept-Charset:項的內容 // UTF-8,*
2046 HTTP_ACCEPT_ENCODING 當前請求頭中Accept-Encoding:項的內容 // gzip, deflate
2047 HTTP_ACCEPT_LANGUAGE 當前請求頭中Accept-Language:項的內容 // zh-cn,zh;q=0.5
2048 HTTP_CONNECTION 當前請求頭中Connection:項的內容 // keep-alive
2049 HTTP_HOST 當前請求頭中Host:項的內容 // desktop
2050 HTTP_REFERER 引導用戶代理到當前頁的前一頁的地址
2051 HTTP_USER_AGENT 當前請求頭中User-Agent:項的內容 // Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
2052 HTTPS 若是腳本是經過HTTPS協議被訪問,則被設爲一個非空的值
2053 REMOTE_ADDR 瀏覽當前頁面的用戶的IP地址 // 127.0.0.1
2054 REMOTE_HOST 瀏覽當前頁面的用戶的主機名
2055 REMOTE_PORT 用戶機器上鍊接到Web服務器所使用的端口號 // 49197
2056 REMOTE_USER 經驗證的用戶
2057 REDIRECT_REMOTE_USER 驗證的用戶,若是請求已在內部重定向
2058 SCRIPT_FILENAME 當前執行腳本的絕對路徑 // C:/Users/Administrator/Desktop/dir/demo.php
2059 SERVER_ADMIN 該值指明瞭Apache服務器配置文件中的SERVER_ADMIN參數 //admin@shocker.com
2060 SERVER_PORT Web服務器使用的端口 // 80
2061 SERVER_SIGNATURE 包含了服務器版本和虛擬主機名的字符串
2062 PATH_TRANSLATED 當前腳本所在文件系統(非文檔根目錄)的基本路徑
2063 SCRIPT_NAME 當前腳本的路徑 // /dir/demo.php
2064 REQUEST_URI URI用來指定要訪問的頁面 // /dir/demo.php?a=aaa&b=bbb
2065 PHP_AUTH_DIGEST 客戶端發送的「Authorization」 HTTP頭內容
2066 PHP_AUTH_PW 用戶輸入的密碼
2067 AUTH_TYPE 認證的類型
2068 PATH_INFO 包含由客戶端提供的、跟在真實腳本名稱以後而且在查詢語句(query string)以前的路徑信息
2069 ORIG_PATH_INFO 在被PHP處理以前,「PATH_INFO」的原始版本
2070 
2071 
2072 
2073 
2074 /* 緩存 */
2075 1. ob緩存(輸出緩存)(需開啓)
2076     php.ini設置中開啓並設置輸出緩存大小:output_buffering = 4096
2077     ob_start()  開啓當前腳本頁面的輸出緩存
2078     若是輸出緩存打開,則輸出的數據先放到輸出緩存(header函數前能夠有輸出),不然直接放入程序緩存。
2079     header()函數發送的內容直接放入程序緩存。
2080     開啓輸出緩存後,輸出緩存數據會刷新到程序緩存,而後有Apache封裝成http響應包返回給瀏覽器。
2081     輸出緩存:存放的數據是從開啓輸出緩存開始返回給瀏覽器的全部靜態頁面數據!
2082 2. 程序緩存(內部緩存,必須存在,不能關閉)
2083 3. 瀏覽器緩存
2084 
2085 /* ob緩存(輸出控制) */ Output Buffering
2086 ob_start()  //打開一個輸出緩衝區,全部的輸出信息再也不直接發送到瀏覽器,而是保存在輸出緩衝區裏面。
2087     ob_start('ob_gzhandler'); //將gz編碼的數據發送到支持壓縮頁面的瀏覽器
2088 
2089 ob_clean();            //刪除內部緩衝區的內容,不關閉緩衝區(不輸出)。
2090 ob_end_clean();        //刪除內部緩衝區的內容,關閉緩衝區(不輸出)。
2091 ob_get_clean();        //返回內部緩衝區的內容,關閉緩衝區。至關於執行ob_get_contents()與ob_end_clean()
2092 ob_flush();            //發送內部緩衝區的內容到瀏覽器,刪除緩衝區的內容,不關閉緩衝區。
2093 ob_end_flush();        //發送內部緩衝區的內容到瀏覽器,刪除緩衝區的內容,關閉緩衝區。
2094 ob_get_flush();        //返回內部緩衝區的內容,並關閉緩衝區,再釋放緩衝區的內容。至關於ob_end_flush()並返回緩衝區內容。
2095 flush();               //將當前爲止程序的全部輸出發送到用戶的瀏覽器
2096 
2097 ob_get_contents();     //返回緩衝區的內容,不輸出。
2098 ob_get_length();       //返回內部緩衝區的長度,若是緩衝區未被激活,該函數返回FALSE。
2099 ob_get_level();        //Return the nesting level of the output buffering mechanism.
2100 ob_get_status();       //獲取ob狀態信息
2101 
2102 ob_implicit_flush();   //打開或關閉絕對刷新,默認爲關閉,打開後ob_implicit_flush(true),所謂絕對刷新,即當有輸出語句(e.g: echo)被執行時,便把輸出直接發送到瀏覽器,而再也不須要調用flush()或等到腳本結束時才輸出。
2103 
2104 ob_gzhandler               //ob_start回調函數,用gzip壓縮緩衝區的內容。
2105 ob_list_handlers           //List all output handlers in use
2106 output_add_rewrite_var     //Add URL rewriter values
2107 output_reset_rewrite_vars  //Reset URL rewriter values
2108 
2109 這些函數的行爲受php_ini設置的影響:
2110 output_buffering       //該值爲ON時,將在全部腳本中使用輸出控制;若該值爲一個數字,則表明緩衝區的最大字節限制,當緩存內容達到該上限時將會自動向瀏覽器輸出當前的緩衝區裏的內容。
2111 output_handler         //該選項可將腳本全部的輸出,重定向到一個函數。例如,將 output_handler 設置爲 mb_output_handler() 時,字符的編碼將被修改成指定的編碼。設置的任何處理函數,將自動的處理輸出緩衝。
2112 implicit_flush         //做用同ob_implicit_flush,默認爲Off。
2113 
2114 //ob緩存做用
2115 1)防止在瀏覽器有輸出以後再使用setcookie()、header()或session_start()等發送頭文件的函數形成的錯誤。其實這樣的用法少用爲好,養成良好的代碼習慣。
2116 2)捕捉對一些不可獲取的函數的輸出,好比phpinfo()會輸出一大堆的HTML,可是咱們沒法用一個變量例如$info=phpinfo();來捕捉,這時候ob就管用了。
2117 3)對輸出的內容進行處理,例如進行gzip壓縮,例如進行簡繁轉換,例如進行一些字符串替換。
2118 4)生成靜態文件,其實就是捕捉整頁的輸出,而後存成文件。常常在生成HTML,或者整頁緩存中使用。
2119 
2120 
2121 /* 網站併發 */
2122 測試工具:apache/bin/ab.exe
2123 用法:cmd{%apache-bin%}>ab.exe -n 執行訪問次數 -c 用戶併發數量 URL地址
2124 MPM(多路處理模塊):perfork(預處理模式), worker(工做者模式), winnt(Win系統)
2125 MPM配置:httpd-mpm.conf
2126 查看當前MPM模式:httpd –l    mpm_xxx.c中xxx表示當前模式類型
2127 httpd.conf配置(開啓MPM):#Include conf/extra/httpd-mpm.conf
2128 #參考配置
2129 #配置文件:extra/httpd-mpm.conf
2130 #mpm_winnt.c
2131 <IfModule mpm_winnt_module>
2132     ThreadsPerChild      1000   #中型網站1500-5500合理
2133     MaxRequestsPerChild  0
2134 </IfModule>
2135 #mpm_prefork.c
2136 <IfModule mpm_prefork_module>
2137     StartServers    5       #預先啓動
2138     MinSpareServers 5
2139     MaxSpareServers 10      #最大空閒進程
2140     ServerLimit     1500    #用於修改apache編程參數
2141     MaxClients      1000    #最大併發數
2142     MaxRequestsPerChild 0   #一個進程對應的線程數,對worker更用
2143 </IfModule>
2144 #若是你的網站pv值上百萬
2145 ServerLimit     2500   #用於修改apache編程參數
2146 MaxClients      2000   #最大併發數
2147 
2148 
2149 /* 靜態化 */
2150 1. 頁面URL長度不超過255字節
2151 2. meta信息儘可能完整,keywords5個左右
2152 3. 前端不要使用框架
2153 4. 圖片alt屬性添加信息
2154 5. 靜態頁面不要帶動態值
2155 
2156 <script type="text/javascript" language="javascript" src="url"></script>
2157 url能夠是js/php/圖片等,返回的數據替換<script>標籤所在位置的內容!至關於簡單的Ajax
2158 
2159 
2160 /* Apache壓縮 */
2161 gzip/deflate
2162 
2163 
2164 /* XSS攻擊 */
2165 #惡意JS代碼
2166 #不規則HTML代碼
2167 
2168 開源過濾器:htmlpurifier
2169 
2170 //獲取COOKIE
2171 <script>
2172 var c = document.cookie; //獲取COOKIE
2173 var script = document.createElement('script'); //建立script標籤
2174 script.src = 'demo.php?c=' + c; //發送到指定的文件接收
2175 document.body.appendChild(script); //添加到DOM對象中生效
2176 </script>
2177 
2178 
2179 /* 命令行CLI */
2180 //顯示幫助信息
2181 php -h
2182 //解析並運行-f選項給定的文件名
2183 php [-f] <file> [--] [args...]
2184 //在命令行內運行單行PHP代碼
2185 php [options] -r <code> [--] [args...]
2186 無需加上PHP的起始和結束標識符,不然將會致使語法解析錯誤
2187 //調用phpinfo()函數並顯示出結果
2188 php -i/--info
2189 //檢查PHP語法
2190 php -l/--syntax-check
2191 //打印出內置以及已加載的PHP及Zend模塊
2192 php -m/--modules
2193 //將PHP,PHP SAPI和Zend的版本信息寫入標準輸出
2194 php -v/--version
2195 
2196 //參數接收
2197 $argv    傳遞給腳本的參數數組
2198     第一個參數老是當前腳本的文件名,所以$argv[0]就是腳本文件名
2199 $argc    傳遞給腳本的參數數目
2200     腳本的文件名老是做爲參數傳遞給當前腳本,所以$argc的最小值爲1
2201 包含當運行於命令行下時傳遞給當前腳本的參數的數組
2202 此兩個變量僅在register_argc_argv打開時可用
2203 
2204 
2205 /* 設計模式 */
2206 單例模式:爲一個類生成一個惟一的對象。使用單例模式生成一個對象後,該對象能夠被其它衆多對象所使用。
2207 工廠模式:封裝對象的創建過程。能夠在對象自己建立對象工廠或者是一個額外的工廠類
2208 MVC模式:用戶->控制器->模型->控制器->視圖->控制器->用戶
2209 
2210 
2211 /* 配置選項 */
2212 set_time_limit($seconds) //設置腳本最大執行時間(默認30秒),0表示不限制
2213 ini_get($varname) //獲取一個配置選項的值
2214 ini_set($varname, $newvalue) //爲一個配置選項設置值
2215 extension_loaded($ext_name) //檢測一個擴展是否已經加載
2216 get_extension_funcs($ext_name) //返回模塊函數名的數組
2217 
2218 
2219 /* 【其餘】 */
2220 version_compare(str $ver1, str $ver2 [,str $operator])  //比較版本號
2221     $operator表示操做符,可選:<, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne
2222     若是省略$operator,返回兩個版本號的差值。
2223 符號@    用於抑制系統運行錯誤的報告顯示
2224 memory_get_usage    //獲取當期內存使用狀況
2225 memory_get_peak_usage   //獲取內存使用的峯值
2226 getrusage   //獲取CPU使用狀況(Windows不可用)
2227 uniqid([$prefix])   //獲取一個帶前綴、基於當前時間微秒數的惟一ID
2228 highlight_string($str [,$return])   //字符串的語法高亮
2229     $return:設置爲TRUE,高亮後的代碼不會被打印輸出,而是以字符串的形式返回。高亮成功返回TRUE,不然返回FALSE。
2230 highlight_file($file [,$return])    //語法高亮一個文件
2231 __halt_compiler     //中斷編譯器的執行
2232 get_browser     //獲取瀏覽器具備的功能
2233     get_browser ([ string $user_agent [, bool $return_array = false ]] )
2234     若是設置爲 TRUE,該函數會返回一個 array,而不是 object
2235 eval($code) //把字符串做爲PHP代碼執行
2236 gzcompress($str [,$level=-1])   //壓縮字符串
2237 gzuncompress($str)  //解壓縮字符串
2238 gzencode($str [,$level=-1])   //壓縮字符串
2239 gzdecode($str)  //解壓縮字符串
2240 ignore_user_abort($bool) //設置客戶端斷開鏈接時是否中斷腳本的執行

 

//語法錯誤(syntax error)在語法分析階段,源代碼並未被執行,故不會有任何輸出。

/* 【命名規則】 */常量名 類常量建議全大寫,單詞間用下劃線分隔    // MIN_WIDTH變量名建議用下劃線方式分隔            // $var_name函數名建議用駝峯命名法                // varName定界符建議全大寫                 // <<<DING, <<<'DING'文件名建議全小寫和下劃線、數字        // func_name.php私有屬性名、方法名建議加下劃線        // private $_name _func接口名建議加I_                    // interface I_Name
/* 語言結構 */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位平臺時值爲2147483647PHP_INT_SIZE                   INT字長,32位平臺時值爲4(4字節)M_PI    //圓周率值M_E     //天然數
//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、webjames

/* 大小寫問題 */- 類名、方法名、屬性名、函數名:不區分大小寫- 變量名、常量名、元素下標:區分大小寫
/* 可變標識符 */可變變量  $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();
/* 可變變量 */* 用於業務邏輯判斷獲得某些具體信息    $var_name = "class_name";    $$var_name = "PHP0913";        // $class_name = "PHP0913";$class_name已存入內存中    var_dump($class_name);        // var_dump($$var_name);
/* 變量函數 */get_defined_vars    //返回由全部已定義變量所組成的數組(包括環境變量、服務器變量和用戶定義的變量)

/* unset() */* unset()僅刪除當前變量名和引用,其值並未被刪除* 引用傳遞中,刪除一個變量及其引用,其餘變量及引用均存在,且值依然存在
     echo "<br />";    $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('-_-');

/* 常量相關函數 */definedget_defined_constants

/* 預約義常量 */__FILE__            所在文件的絕對路徑__LINE__            文件中的當前行號__DIR__            文件所在目錄__FUNCTION__        函數名稱__CLASS__            類的名稱__METHOD__        類的方法名__NAMESPACE__        當前命名空間的名稱

/* 整型 */整型佔用4字節,共4*8=32位,最大值爲2147483647,最小值爲-2147483648,最小值的絕對值比最大值的大1最高爲表示正負,1表示負,0表示正

/* 進制轉換函數 */只能十進制與其餘進制進行轉換,只有六種轉換時,參數應是字符串(即不可含八進制的「0」或十六進制的「0x」)    dec     bin     oct    hexhexdec()    十六進制轉十進制        也可寫hex2dec()dechex()    十進制轉十六進制        也可寫dec2hex()bindec()    二進制轉十進制        也可寫bin2dec()decbin()    十進制轉二進制        也可寫dex2bin()octdec()    八進制轉十進制        也可寫oct2dec()decoct()    十進制轉八進制        也可寫dec2oct()

/* 浮點數 */浮點數不能比較大小 !!!幾乎全部小數,在保存時都是近似值而不是精確值!最大值:+/- 1.8E308PHP所能保存的最長小數位: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];   // decho $str{0};   // a

/* 【類型操做函數】 *///獲取/設置類型gettype($var) //獲取變量的數據類型settype($var, $type) //設置變量的數據類型
//類型判斷is_intis_floatis_nullis_stringis_resourceis_arrayis_boolis_object       is_numeric      檢測變量是否爲數字或數字字符串
//轉換成指定的數據類型boolvalfloatvalintvalstrval
//強制轉換類型(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; 等endifendwhileendforendforeachendswitch

/* 【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 錯誤,腳本繼續執行。
#不建議使用require_once/include_once

/* 【相對路徑】 */當前瀏覽器請求的哪一個腳本,當前位置就是屬於哪一個腳本。./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    使腳本睡眠到指定的時間爲止

/* 【函數】 */1. 函數的聲明是在編譯時,故先定義再調用,定義與調用無前後關係!2. 文件只是代碼的載體,程序均在內存中執行!3. 若是函數的定義在須要載入的文件內,則須要先載入該文件,不然調用出錯!4. 函數的定義能夠出如今其餘的代碼段中,此時函數不會在編譯階段被執行    只有被執行到時纔會被定義!只有獨立定義時纔會被編譯在內存中!    若是出如今其餘函數體內,也須要外層函數被調用時才被定義並生效!5. 函數名不區分大小寫6. 不容許重名,包括系統函數7. 【可變函數】    函數名能夠用其餘變量代替    $func_name = "sayHello";    $func_name();       //此時調用sayHello()函數    注意:只有在調用時才能使用變量,定義時不容許!8. 變量可做爲函數名調用函數,數組元素值也能夠!9. 形式參數parameter,實際參數argument    能夠對參數傳遞 null,表示該形參不想傳遞值    形參與實參之間既可值傳遞,也可引用傳遞。    引用傳遞參數,應該在定義函數時就在形式參數前加上 & 符號,而此時調用函數實參必須爲變量    如何選擇使用哪一種傳遞方式?        a. 是否須要保證原始數據的完整性        b. 是否須要增長效率        c. 對大數據引用傳遞可節省內存10. 參數默認值        a. 函數的參數默認值必須是已經肯定的值,不能是變量!            只要在調用以前定義該常量,則可使用常量做爲參數默認值        b. 函數默認值能夠有多個,建議將有默認值的參數放在參數列表的最後面           這樣能夠在調用函數時,不賦予後面有默認值的參數值,不然會出錯        c. 默認參數能夠是非標量類型,好比數組、null        d. 任何默認參數必須放在任何非默認參數的右側11. 參數數量    a. 形參數量多於實參數量        報告警告級別錯誤,並以NULL代替    b. 實參多於形參        不報告錯誤,依次爲形參賦值    c. 不肯定參數數量        1) 一個形參都不定義,永遠都是實參多於形參        2) 【可變數量參數】            func_get_args() 獲取當前函數被調用時全部實參的值,返回一個全部實參值組成的數組            func_get_arg()  獲取某個實參的值,經過索引值標識,e.g: func_get_arg(0)            func_num_args() 獲取全部實參的數量12. 【return】返回值    a. 函數只有一個返回值,能夠經過返回一個數組來獲得相似的結果,但能夠有多條return語句    b. return語句會當即停止函數的運行,並將控制權交回調用該函數的代碼行    c. 能夠返回包括數組和對象的任意類型    d. 函數的返回也分值傳遞和引用傳遞(返回的是一個變量纔可)        1) 默認是值傳遞方式        2) 引用傳遞方式:            - 定義函數時,函數名前加上& 表示該函數能夠返回引用            - 調用函數時,函數名前加上& 表示取得函數返回的引用                此時,函數外修改返回值,會修改函數內的該返回變量的值            - 若是函數需返回引用,則須要返回一個變量才能夠            - 從函數返回一個引用,必須在函數聲明和指派返回值給一個變量時都使用引用操做符&                function &returns_reference(){return $someref;}                $newref =& returns_reference();        3) 返回引用的做用

/* 【變量做用域】 */a. 全局變量和局部變量    1) 做用域之間不重疊,即不一樣做用域的變量,之間不可訪問    2) 全局做用域  - 函數以外的區域    3) 局部做用域  - 函數內的區域,每一個函數都是一個獨立的做用域
b. 超全局變量,既能夠在全局也可在局部使用,僅能用系統自帶的,均是數組變量。    $GLOBALS    $_COOKIE    $_ENV       $_FILES $_GET    $_POST      $_REQUEST   $_SERVER    $_SESSIONc. $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) 被載入文件中定義的變量做用域取決於被載入的位置。        函數外被載入就是全局,函數內被載入就是局部!

/* 【變量生命週期】 */1. 腳本結束時,全局變量消失2. 函數執行完時,局部變量消失3. 靜態變量    static關鍵字        靜態變量僅在局部函數域中存在,但當程序執行離開此做用域時,其值並不丟失。        靜態變量僅會被初始化一次,其餘局部變量每次被調用時都會被從新賦值。        static聲明的靜態變量的生命週期會被一直延續。

/* 【迭代和遞歸】 */迭代比遞歸效率高!迭代是一種思想(算法),結構和使用上如同循環!遞歸是一種思想(算法),將大問題拆分紅小問題,逐一解決小問題以解決大問題    要求大問題和小問題的解決方案是一致的!    遞歸的結構和語法體現如圖函數。函數體內調用函數自己!    遞歸出口:當該問題能夠解決時,則不用再遞歸

/* 【匿名函數/閉包函數】 */匿名函數,也叫閉包函數(closures),容許臨時建立一個沒有指定名稱的函數。
1. 定義匿名函數時,不需增長函數名。2. PHP對匿名函數的管理,以一個對象的方式進行處理。3. 匿名函數應該存放到變量內。4. 匿名函數經過Closure類來實現5. 可使用函數做爲函數的參數和返回值6. 聲明函數時可使用 use($param) 來向函數中傳入函數外的變量,結合變量引用來實現閉包7. 能夠用變量引用函數$func = function ($e) {    echo $e;};   //結束時,需分號結束,如同變量賦值var_dump($func);     //使用匿名函數$func('ITCAST');     //函數的調用    這不是可變函數,而是對象。Closure閉包類//use語法匿名函數傾向於值的概念,可能出如今任何地方。use可使得匿名函數使用其外部做用域的變量。非全局!use與全局的區別:    use使用其外部做用域的變量function out() {    $v = "in out";    $func = function () use (& $v) {        var_dump($v);    }}    use相似參數的自動傳遞,也支持值與引用的傳遞方式。//做用    常做爲'臨時函數'被調用(只在某個地方被調用的函數)    例如:        PHP存在一個array_map()函數,功能是針對一個函數內每一個元素,去調用某個函數        操做結果(array) = array_map(操做函數, 操做數組);        $result_arr = array_map(function ($v) {return $v3}, $arr);
//閉包用法實例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;});
//將函數保存爲數組元素$x = 'outer param.';$arr = array();$arr[] = function($str)use($x){ return $str.$x; };echo $arr[0]('test fun in arr,');

/* 【數組】 */關聯數組:鍵和值有關聯,鍵表示值的邏輯含義。索引數組:鍵和值無關聯,鍵表示值的位置。一般下標從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');
1. 複製數組,其指針位置也會被複制。    特例:若是數組指針非法,則拷貝的數組指針會重置,而原數組的指針不變。    【指針問題】        誰第一個進行寫操做,就會開闢一個新的值空間。與變量(數組變量)值傳遞給誰無關。        數組函數current()被定義爲寫操做,故會出現問題。        foreach遍歷的是數組的拷貝,當被寫時,纔會開闢一個新的值空間。            即,foreach循環體對原數組進行寫操做時,纔會出現指針問題。            若是開闢新空間時指針非法,則會初始化指針。2. 若是指針位置出現問題,則reset()初始化一下就可解決。

/* 【遍歷數組】 */* 先找到元素,再獲取鍵和值
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...eachwhile (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        鏈接並認證數據庫#發送SQL語句,接收執行結果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            關閉鏈接

/* 【類和對象】 */# 成員:    類成員:類常量、靜態屬性、靜態方法    對象成員:非靜態屬性、非靜態方法    # 除此外,類不能包含任何其餘東西!!!
# 類名、方法名、屬性名均不區分大小寫# $this表明本對象,self表明本類,parent表明父類# 類和函數都可被事先編譯(僅做爲最外層時)# 類的定義必須在單一的PHP區塊內,不能被多個PHP標籤分割
// 構造方法- 具備構造函數的類會在每次建立新對象時先調用此方法void __construct([ mixed $args [, $... ]] )- 構造方法所需參數由new實例化對象時,給類增長參數值。- 構造方法也能夠被手動調用。- 5.3.3版本之前,支持於類名同名的方法做爲構造方法。- 兩種衝突時,__construct 優先
// 析構方法- 析構函數會在到某個對象的全部引用都被刪除或者當對象被顯式銷燬時執行。void __destruct( void )# 做用:釋放對象所佔用的資源# 調用的時機     - 腳本結束時全部資源均被釋放,包括對象    - 手動刪除對象時    - 保存對象的變量被賦予新值時(任何值,包括null)    - 在使用exit()終止腳本運行時也會被調用
// 靜態成員(static關鍵字)    - 聲明類成員或方法爲static,就能夠不實例化類而直接訪問。    - 靜態成員(屬性或方法)均屬於類,故不能經過$this或->訪問。    - 靜態成員是全部對象共享,屬於類。    - 靜態成員用類調用,非靜態成員用對象調用。# 靜態屬性    - 靜態屬性不能夠由對象經過->操做符來訪問。    - 靜態屬性只能被初始化爲一個字符值或一個常量,不能使用表達式。 因此你能夠把靜態屬性初始化爲整型或數組,但不能指向另外一個變量或函數返回值,也不能指向一個對象。# 靜態方法    - 因爲靜態方法不須要經過對象便可調用,因此僞變量$this在靜態方法中不可用。    - 用::方式調用一個非靜態方法會致使一個E_STRICT級別的錯誤。
// 訪問解析操做符(::)    - 能夠用於訪問靜態成員、方法和常量,還能夠用於覆蓋類中的成員和方法。     - 當在類的外部訪問這些靜態成員、方法和常量時,必須使用類的名字。     - self 和 parent 這兩個特殊的關鍵字是用於在類的內部對成員或方法進行訪問的。
// 訪問辨析- 對象成員,內部經過$this指定,外部經過對象名指定,均用->訪問,訪問屬性時不需加$。    對象名->屬性名    對象名->方法名()    $this->屬性名        $this->方法名()- 類成員,內部經過self或parent指定,外部經過類名指定,均用::訪問,訪問屬性時需加$。    類名::$屬性名    類名::方法名()        self::$屬性名        self::方法名()- 特殊:也能夠經過對象訪問類成員。(不建議)    對象名::$類屬性名    $this::$類屬性名    對象名::$類方法名()    $this::類方法名()# 對象成員訪問用->,類成員訪問用::
- 不管是靜態方法仍是非靜態方法,都可經過類或對象進行訪問。- 靜態屬性經過類訪問,靜態方法經過對象訪問。- 只有使用對象調用非靜態方法時,$this纔可使用!- 靜態方法不可以使用$this。- 類能夠調用對象方法,但注意方法內不能有$this。- 非靜態方法能夠調用靜態屬性或靜態方法,反之不能夠。
// 類常量- 常量的值將始終保持不變。- 在定義和使用常量的時候不須要使用$符號。- 常量的值必須是一個定值,不能是變量,類屬性或其它操做(如函數調用)的結果。# 定義:const 常量名 = 常量值;- 不須要加public等訪問修飾限定符- 類常量屬於類,使用類訪問,類名::類常量 或 self::類常量
// 自動加載對象- 在試圖使用還沒有被定義的類時自動調用 __autoload 函數- 自動加載使用到的類名文件(根據類名找相應名稱的文件,故需類名與類文件名一致)- 每一個須要加載類的文件都須要存在__autoload函數- 將__autoload函數寫入單獨的文件,每一個須要用到類的文件再require該函數文件- __autoload 參數是類名function __autoload($class_name) {    require_once $_SERVER["DOCUMENT_ROOT"] . "/class/$class_name.php";}    // $_SERVER["DOCUMENT_ROOT"] 當前運行腳本所在的文檔根目錄- 能夠經過類名,來推導出類所在的文件名!- 若是一個項目存在多個自動加載函數時,定義一個能夠完成加載的普通函數,並在函數以前使用spl_autoload_register註冊該函數。# spl_autoload_register- 註冊__autoload()函數bool spl_autoload_register ([ callback $autoload_function ] )- 能夠註冊多個自動加載函數,先註冊的先執行- 一旦註冊自動加載函數,__autoload就失效。- 註冊函數時,參數爲函數名(注意加引號);註冊方法時,參數爲數組# 註冊類或對象的方法爲自動加載方法時,參數需爲數組:spl_autoload_register(array(__CLASS__, '__autoload'));__CLASS__表示當前類名,如果對象可用$this,詳細見手冊
// 序列化(串行化)# 數據傳輸均是字符串類型# 除了資源類型,都可序列化# 序列化在存放數據時,會存放數據自己,也會存放數據類型做用:1.在網絡傳輸數據時;2.爲了將數組或對象放在磁盤時# 序列化serialize        產生一個可存儲的值的表示string serialize ( mixed $value )- 返回字符串,此字符串包含了表示value的字節流,能夠存儲於任何地方。- 有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。# 反序列化unserialize        從已存儲的表示中建立PHP的值mixed unserialize ( string $str [, string $callback ] )- 對單一的已序列化的變量進行操做,將其轉換回PHP的值。

# 文件的讀寫操做- file_put_contents        將一個字符串寫入文件int file_put_contents($file, $data [,$flags])    $flags:FILE_USE_INCLUDE_PATH(覆蓋),FILE_APPEND(追加)- file_get_contents        將整個文件讀入一個字符串string file_get_contents($file [, bool $use_include_path [,int $offset [,int $maxlen]]])
# 對象序列化- 只能序列化對象內部的數據,即非靜態屬性。# 需在反序列化對象以前加載類,也能夠觸發自動加載機制。
__sleep        序列化需序列化的屬性。        - 提交未提交的數據,或相似的清理操做,部分串行化對象。        - 返回一個包含對象中全部應被序列化的變量名稱的數組__wakeup    反序列化時,預先準備對象須要的資源        - 從新創建數據庫鏈接,或執行其它初始化操做    public function __sleep() {        return array('server', 'username', 'password', 'db');    }    public function __wakeup() {        $this->connect();    }
// 對象繼承class 子類名 extends 父類 {}若是一個對象是子類的對象,那麼同時也是父類的對象。單繼承:一個類只能繼承一個父類,不能同時繼承多個類。但一個父類能夠被多個子類繼承。
instanceof    判斷某對象是否爲某類的對象    對象名 instanceof 類名
// 訪問控制public        公有的(繼承鏈、本類、外部都可訪問)protected    保護的(僅繼承鏈、本類可訪問)private        私有的(僅本類可訪問)根據成員定義位置、訪問位置判斷。# 兼容性問題- 聲明屬性時,var關鍵字聲明的默認爲public權限- 聲明方法時,省略訪問修飾符,默認爲public權限
// 重寫 override$this表明本對象,被誰調用,就表明哪一個對象。- 繼承時,子類成員名於父類成員名發生衝突,則子類成員會重寫父類成員。- 屬性和方法都可被子類重寫。- 當父類的方法或屬性已經不知足子類的需求,則須要重寫。- 也可能由於命名不規範致使重寫。
私有屬性不能被重寫,每一個私有屬性都會被記錄。在記錄屬性名的同時,還會記錄類。
若是有內置函數被重寫,則可調用父類方法。如調用父類構造方法parent::__construct()
# 重寫限制訪問限制:    子類的成員的訪問控制必須相等或弱於父類。方法參數限制:    參數數量必須相同,參數名可不一樣。
# $this肯定原則$this爲調用該方法的對象,表示該方法的執行環境對象。    - 對象調用    - 環境的傳遞。若是當前調用時,不能肯定$this的值(靜態調用),此時靜態調用所處對象環境會傳遞到被調用的方法內。$this並不是永遠表明本對象,而是由方法的執行環境決定。
# final若是父類中的方法被聲明爲final,則子類沒法覆蓋(重寫)該方法。若是一個類被聲明爲final,則不能被繼承。但加有final關鍵字的類依舊能被實例化!# 抽象類關鍵字:abstract抽象類不能直接被實例化,必須先繼承該抽象類,而後再實例化子類。抽象類中至少要包含一個抽象方法。非抽象類不能包含抽象方法。若是類方法被聲明爲抽象的,那麼其中就不能包括具體的功能實現。抽象方法不能包含大括號及方法體。繼承一個抽象類的時候,子類必須實現抽象類中的全部抽象方法。    即,子類必須重寫抽象父類中的全部抽象方法。另外,這些方法的可見性必須和抽象類中同樣(或者更爲寬鬆)。    即,若是抽象類中某個抽象方法被聲明爲protected,那麼子類中實現的方法就應該聲明爲protected或者public,而不能定義爲private。- 抽象類的子類中的普通方法執行方式和其餘類相同。- 做用:    1. 繼承,爲擴展類,統一公共操做。    2. 限制結構(規範)。規範子類的結構。
// 接口關鍵字:interface- 對象提供的與對象交互的方式就是接口。- 使用接口能夠指定某個類必須實現哪些方法,但不須要定義這些方法的具體內容。- 經過interface來定義一個接口,就像定義一個標準的類同樣,但其中定義全部的方法都是空的。 - 接口中定義的全部屬性和方法都必須是public,可省略public關鍵字。- 接口中也能夠定義常量(const)。接口常量和類常量的使用徹底相同。    能夠用::訪問。接口名::常量名,實現類::常量名。    它們都是定值,能夠被子類或子接口使用,但不能修改。- 接口不能定義屬性!# 定義接口interface 接口名 {    接口內容(公共方法聲明的集合)}# 接口實現- 要實現一個接口,可使用implements操做符。- 類中必須實現接口中定義的全部方法,不然會報一個fatal錯誤。- 若是要實現多個接口,能夠用逗號來分隔多個接口的名稱。- 實現多個接口時,接口中的方法不能有重名。- 接口也能夠繼承,經過使用extends操做符。class 類名 implements 接口名 {    接口方法的實現}# 注意    1. 類與抽象類之間是繼承關係,類與接口之間是實現關係。    2. 類與抽象類是單繼承,類與接口是多實現。    3. 接口不是類,限制類的結構。    4. 接口與接口之間是多繼承。用extends關鍵字。        interface I_C extends I_A, I_B {}
// 靜態延遲綁定self::,表明本類(當前代碼所在類)    永遠表明本類,由於在類編譯時已經被肯定。    即,子類調用父類方法,self卻不表明調用的子類。static::,表明本類(調用該方法的類)    用於在繼承範圍內引用靜態調用的類。    運行時,才肯定表明的類。    static::再也不被解析爲定義當前方法所在的類,而是在實際運行時計算的。
// 對象的遍歷(迭代)- 對象經過屬性保存數據,故遍歷對象的屬性。- foreach語言結構,得到屬性名和屬性值。    foreach ($obj as $p_name => $p_value) {}# 自定義遍歷(迭代器Iterator)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        當嘗試以調用函數的方式調用一個對象時
# 重載 overload指動態地"建立"類屬性和方法用戶能夠自由的爲對象添加額外的屬性,該特性就是重載。全部的重載方法都必須被聲明爲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)# $name參數是要調用的方法名稱。$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) 若是對象屬於該類或該類是此對象的父類則返回TRUEis_subclass_of($obj, $class)    若是此對象是該類的子類,則返回TRUEget_object_vars($obj)   返回由對象屬性組成的關聯數組

// 經常使用類# PHP手冊 -> 預約義類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');

/* 頁面跳轉 */// PHPheader('Loacation: url')header()執行完畢後,後面的代碼也會繼續執行,故需在該語句後加die結束沒法給出提示,直接跳轉// JS方法location.href = url// HTML<meta http-equiv="Refresh" content="表示時間的數值; url=要跳轉的URI"> 
/* 【Cookie】 */cookie是一種在遠程瀏覽器端儲存數據並以此來跟蹤和識別用戶的機制。cookie是HTTP標頭的一部分,所以setcookie()函數必須在其它信息被輸出到瀏覽器前調用,這和對header()函數的限制相似。可使用輸出緩衝函數來延遲腳本的輸出,直到按須要設置好了全部的cookie或者其它HTTP標頭。
// 新增setcookie    新增一條cookie信息setcookie($name [,$value [,$expire [,$path [,$domain [,$secure [,$httponly]]]]]])#注意:setcookie()函數前不能有輸出!除非開啓ob緩存!# 參數說明$name    - cookie的識別名稱    使用$_COOKIE['name']抵用名爲name的cookie$value    - cookie值,能夠爲數值或字符串,此值保存在客戶端,不要用來保存敏感數據    假定$name參數的值爲'name',則$_COOKIE['name']就可取得該$value值$expire    - cookie的生存期限(Unix時間戳,秒數)    若是$expire參數的值爲time()+60*60*24*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。
// 讀取- 瀏覽器請求時會攜帶當前域名下的全部cookie信息到服務器。- 任何從客戶端發送的cookie都會被自動存入$_COOKIE全局數組。- 若是但願對一個cookie變量設置多個值,則需在cookie的名稱後加[]符號。即以數組形態保存多條數據到同一變量。    //設置爲$_COOKIE['user']['name'],注意user[name]的name沒有引號    setcookie('user[name]', 'shocker');- $_COOKIE也能夠爲索引數組
// 刪除方法1:將其值設置爲空字符串    setcookie('user[name]', '');方法2:將目標cookie設爲「已過時」狀態。    //將cookie的生存時間設置爲過時,則生存期限與瀏覽器同樣,當瀏覽器關閉時就會被刪除。    setcookie('usr[name]', '', time()-1);
# 注意:1. cookie只能保存字符串數據2. $_COOKIE只用於接收cookie數據,不用於設置或管理cookie數據。    對$_COOKIE進行操做不會影響cookie數據。    $_COOKIE只會保存瀏覽器在請求時所攜帶的cookie數據。3. cookie生命週期:    臨時cookie:瀏覽器關閉時被刪除    持久cookie:$expire參數爲時間戳,表示失效時間。4. 有效目錄    cookie只在指定的目錄有效。默認是當前目錄及其子目錄。    子目錄的cookie在其父目錄或同級目錄不可獲取。5. cookie區分域名    默認是當前域名及其子域名有效。6. js中經過document.cookie得到,類型爲字符串7. 瀏覽器對COOKIE總數沒有限制,但對每一個域名的COOKIE數量和每一個COOKIE的大小有限,並且不一樣瀏覽器的限制不一樣。
/* 【session】 */1. 開啓session機制    session_start()    注意:session_start()函數前不能有輸出!除非開啓ob緩存。2. 操做數據    對$_SESSION數組進行操做3. 瀏覽器端保存SessionID,默認爲當前域名下的全部目錄及其子目錄生效。即默認設置cookie的path值爲'/'4. 服務器保存session數據    默認保存方式:每一個會話都會生成一個session數據文件,文件名爲:sess_加SessionID5. session能夠存儲除了資源之外的任何類型數據。    數據被序列化後再保存到文件中。6. $_SESSION的元素下標不能爲整型!    由於只對元素值進行序列化。    元素內的數組下標無此要求。7. 生存週期    默認是瀏覽器關閉        由於瀏覽器保存的cookie變量SessionID是臨時的        可是服務器端的session數據文件不必定消失(須要等待session的垃圾回收機制來處理)    能夠延長cookie中PHPSESSID變量的生命週期。(不推薦)    php.ini配置session.gc_maxlifetime8. 刪除數據    $_SESSION變量在腳本結束時依然會消失。開啓session機制時會造出$_SESSION變量。    $_SESSION與保存session數據的文件是兩個空間。    unset($_SESSION['key'])只是刪除數組內的該元素,不會當即相應到保存session數據的文件上。        等到腳本結束,纔會將$_SESSION的數據寫入到該文件中。    session_destroy()    銷燬保存session數據的文件,也不會對該文件寫入內容。        並不刪除$_SESSION變量,unset或腳本結束纔會刪除該變量。    如何徹底刪除一個session?需刪除3部分        unset($_SESSION);                刪除$_SESSION變量後,數據文件並未被改動。若是單獨使用unset,則需先置空$_SESSION = array()        session_destroy();        setcookie('PHPSESSID', '', 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# 會話ID的長度可變。不一樣的設置方式致使不一樣長度的會話ID。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# 自定義數據存儲操做方法# 注意:不用關心PHP如何序列化、反序列化、如何獲得數據和寫入數據,只作與數據存儲相關的操做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            獲取或設置當前會話IDsession_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信息的數組
# 配置php.iniini_set($varname, $newvalue);    //該函數的配置只對當前腳本生效    //並不是全部php.ini設置都可用該函數設置ini_get($varname)   //獲取某配置項信息ini_get_all([str $extension])   //返回全部配置項信息的數組
# session擴展配置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    新建一個真彩色圖像# 基於已有文件或URL建立畫布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     爲一幅圖像分配顏色 + alphaimagecolordeallocate        取消圖像顏色的分配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表示可建立多級目錄,默認falsermdir($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   取得文件的inodefilemtime   取得文件修改時間fileowner   取得文件的全部者fileperms   取得文件的權限filesize    取得文件大小filetype    取得文件類型

/* fileinfo */ 獲取/設置文件信息#擴展Fileinfo,配置php.ini#extension=php_fileinfo.dllfinfo_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)        <input type="hidden" name="MAX_FILE_SIZE" value="102400">  文件只有部分被上傳  文件沒有被上傳    6,7 臨時文件寫入時失敗  找不到臨時文件  文件寫入失敗name    文件名type    文件類型tmp_name    上傳文件臨時路徑size    文件大小move_uploaded_file($path, $newpath);    //將上傳的文件移動到新位置is_uploaded_file($file) //判斷是否爲POST上傳的文件//多文件上傳<input type="file" name="updfile[]" /> //HTML中以數組提交$_FILES['updfile']['tmp_name'][0]   //服務器端可訪問第一個文件的臨時路徑,其餘屬性相似

//php.ini配置file_uploads = On 是否容許HTTP上傳文件upload_max_filesize 上傳文件大小限制,默認爲2Mpost_max_size   post方式表單數據總大小限制,默認爲8Mupload_tmp_dir  上傳文件臨時目錄,默認是系統臨時目錄    需設置上傳文件臨時目錄,給其最小權限GET方式的最大傳輸量爲2K

/* 【批量提交】 */FORM表單中的name值可用名稱加中括號的形式,在$_POST獲取表單數據時,可多項提交造成數組。好比多文件上傳file,複選框提交checkbox等。<input type="checkbox" name="id[]" value="值1" /><input type="checkbox" name="id[]" value="值2" />$id = $_POST['id']; //則可得到所有被選中的複選框值,造成索引數組若是name值爲:<input type="checkbox" name="id[one]" value="值1" /><input type="checkbox" name="id[two]" value="值2" />$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-1iconv_set_encoding($type, $charset);    $type:input_encoding,output_encoding,internal_encodingiconv_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換行標記<br />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_BOTHstr_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_querymysql_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])    //返回當前線程的IDmysql_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 = Offget_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 — 註冊自定義錯誤處理器函數- 自定義處理器函數包含4個參數,分別是級別、信息、文件、行號- 開啓自定義錯誤處理器,則系統內置的錯誤報告和錯誤日誌則不會執行。- 自定義錯誤處理器函數返回false,則自定義函數結束後系統內置的會繼續執行。- 用戶定義的錯誤級別(E_USER_ERROR),能夠被自定義的錯誤處理器所捕獲並繼續執行。系統內置的錯誤,則腳本會當即中止。restore_error_handler — 恢復預約義錯誤處理器函數error_get_last — 獲取最近的錯誤信息
//錯誤處理函數debug_backtrace 產生一條回溯跟蹤    返回數組,包含的鍵值:function, line, file, class, object, type, argsdebug_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 ObjectsPHO抽象層默認被加載,但需加載相應數據庫的驅動。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=bbbPHP_SELF 當前執行腳本的文件名 // /dir/demo.phpGATEWAY_INTERFACE 服務器使用的CGI規範的版本 // CGI/1.1SERVER_ADDR 當前運行腳本所在的服務器的IP地址 // 127.0.0.1SERVER_NAME 當前運行腳本所在的服務器的主機名 // desktopSERVER_SOFTWARE 服務器標識字符串 // Apache/2.2.22 (Win32) PHP/5.3.13SERVER_PROTOCOL 請求頁面時通訊協議的名稱和版本 // HTTP/1.1REQUEST_METHOD 訪問頁面使用的請求方式 // GETREQUEST_TIME 請求開始時的時間戳 // 1386032633QUERY_STRING 查詢字符串(參數) // a=aaa&b=bbbDOCUMENT_ROOT 當前運行腳本所在的文檔根目錄 // C:/Users/Administrator/DesktopHTTP_ACCEPT 當前請求頭中Accept:項的內容 // text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8HTTP_ACCEPT_CHARSET 當前請求頭中Accept-Charset:項的內容 // UTF-8,*HTTP_ACCEPT_ENCODING 當前請求頭中Accept-Encoding:項的內容 // gzip, deflateHTTP_ACCEPT_LANGUAGE 當前請求頭中Accept-Language:項的內容 // zh-cn,zh;q=0.5HTTP_CONNECTION 當前請求頭中Connection:項的內容 // keep-aliveHTTP_HOST 當前請求頭中Host:項的內容 // desktopHTTP_REFERER 引導用戶代理到當前頁的前一頁的地址HTTP_USER_AGENT 當前請求頭中User-Agent:項的內容 // Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1HTTPS 若是腳本是經過HTTPS協議被訪問,則被設爲一個非空的值REMOTE_ADDR 瀏覽當前頁面的用戶的IP地址 // 127.0.0.1REMOTE_HOST 瀏覽當前頁面的用戶的主機名REMOTE_PORT 用戶機器上鍊接到Web服務器所使用的端口號 // 49197REMOTE_USER 經驗證的用戶REDIRECT_REMOTE_USER 驗證的用戶,若是請求已在內部重定向SCRIPT_FILENAME 當前執行腳本的絕對路徑 // C:/Users/Administrator/Desktop/dir/demo.phpSERVER_ADMIN 該值指明瞭Apache服務器配置文件中的SERVER_ADMIN參數 //admin@shocker.comSERVER_PORT Web服務器使用的端口 // 80SERVER_SIGNATURE 包含了服務器版本和虛擬主機名的字符串PATH_TRANSLATED 當前腳本所在文件系統(非文檔根目錄)的基本路徑SCRIPT_NAME 當前腳本的路徑 // /dir/demo.phpREQUEST_URI URI用來指定要訪問的頁面 // /dir/demo.php?a=aaa&b=bbbPHP_AUTH_DIGEST 客戶端發送的「Authorization」 HTTP頭內容PHP_AUTH_PW 用戶輸入的密碼AUTH_TYPE 認證的類型PATH_INFO 包含由客戶端提供的、跟在真實腳本名稱以後而且在查詢語句(query string)以前的路徑信息ORIG_PATH_INFO 在被PHP處理以前,「PATH_INFO」的原始版本



/* 緩存 */1. ob緩存(輸出緩存)(需開啓)    php.ini設置中開啓並設置輸出緩存大小:output_buffering = 4096    ob_start()  開啓當前腳本頁面的輸出緩存    若是輸出緩存打開,則輸出的數據先放到輸出緩存(header函數前能夠有輸出),不然直接放入程序緩存。    header()函數發送的內容直接放入程序緩存。    開啓輸出緩存後,輸出緩存數據會刷新到程序緩存,而後有Apache封裝成http響應包返回給瀏覽器。    輸出緩存:存放的數據是從開啓輸出緩存開始返回給瀏覽器的全部靜態頁面數據!2. 程序緩存(內部緩存,必須存在,不能關閉)3. 瀏覽器緩存
/* ob緩存(輸出控制) */ Output Bufferingob_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 useoutput_add_rewrite_var     //Add URL rewriter valuesoutput_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#參考配置#配置文件:extra/httpd-mpm.conf#mpm_winnt.c<IfModule mpm_winnt_module>    ThreadsPerChild      1000   #中型網站1500-5500合理    MaxRequestsPerChild  0</IfModule>#mpm_prefork.c<IfModule mpm_prefork_module>    StartServers    5       #預先啓動    MinSpareServers 5    MaxSpareServers 10      #最大空閒進程    ServerLimit     1500    #用於修改apache編程參數    MaxClients      1000    #最大併發數    MaxRequestsPerChild 0   #一個進程對應的線程數,對worker更用</IfModule>#若是你的網站pv值上百萬ServerLimit     2500   #用於修改apache編程參數MaxClients      2000   #最大併發數

/* 靜態化 */1. 頁面URL長度不超過255字節2. meta信息儘可能完整,keywords5個左右3. 前端不要使用框架4. 圖片alt屬性添加信息5. 靜態頁面不要帶動態值
<script type="text/javascript" language="javascript" src="url"></script>url能夠是js/php/圖片等,返回的數據替換<script>標籤所在位置的內容!至關於簡單的Ajax

/* Apache壓縮 */gzip/deflate

/* XSS攻擊 */#惡意JS代碼#不規則HTML代碼
開源過濾器:htmlpurifier
//獲取COOKIE<script>var c = document.cookie; //獲取COOKIEvar script = document.createElement('script'); //建立script標籤script.src = 'demo.php?c=' + c; //發送到指定的文件接收document.body.appendChild(script); //添加到DOM對象中生效</script>

/* 命令行CLI *///顯示幫助信息php -h//解析並運行-f選項給定的文件名php [-f] <file> [--] [args...]//在命令行內運行單行PHP代碼php [options] -r <code> [--] [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])   //獲取一個帶前綴、基於當前時間微秒數的惟一IDhighlight_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,而不是 objecteval($code) //把字符串做爲PHP代碼執行gzcompress($str [,$level=-1])   //壓縮字符串gzuncompress($str)  //解壓縮字符串gzencode($str [,$level=-1])   //壓縮字符串gzdecode($str)  //解壓縮字符串ignore_user_abort($bool) //設置客戶端斷開鏈接時是否中斷腳本的執行javascript

相關文章
相關標籤/搜索