PHP基礎知識總結


1. 引用變量

<?php
$a = range(0, 1000);
var_dump(memory_get_usage());
// COW: Copy On Write 有修改操作才會進行copy
// $b = $a;
$b = &$a;
var_dump(memory_get_usage());
$a = range(0, 1000);
var_dump(memory_get_usage()); 

// zval變量容器
$c = range(0, 3);
// 需安裝xdebug擴展
xdebug_debug_zval('c');
$d = $c;
xdebug_debug_zval('c');
$c = range(0, 3);
xdebug_debug_zval('c');

// unset 只會取消引用,不會銷毀空間

// 對象本身就是引用傳遞
class Person
{
  public $name = "zhangsan";
}
$p1 = new Person;
xdebug_debug_zval('p1');
$p2 = $p1;
xdebug_debug_zval('p1');
$p2->name = "lisi";
xdebug_debug_zval('p1');

 

  概念:用不同的名字訪問同一個變量內容

  定義方式:&

  工作原理:

 

2.  常量及數據類型

  字符串的定義方式:單引號,雙引號,heredoc和newdoc  區別:單引號不能解析變量,不能解析轉義字符,只能解析單引號和反斜線本身,效率比雙引號高;雙引號可以解析變量,變量可以使用特殊字符和{}包含,可以解析所有轉義字符;heredoc和newdoc分別類似於雙和單引號,都用來處理大文本

  數據類型:標量,復合,特殊  
  1. 浮點類型不能運用到比較運算中;
  2. boolean的false的七種情況;
  3. 超全局數組:$GLOBALS,$_GET,$_POST,$_REQUEST,$_SESSION,$_COOKIE,$_SERVER,$_FILES,$_ENV
  4. NULL的三種情況:直接賦值,未定義的變量,unset銷毀的變量

  常量:const更快,是語言結構,可以定義類常量;define是函數,不能用於類常量的定義;常量一經定義,不能被修改和刪除  預定義常量:__FILE__,LINE DIR FUNCTION CLASS TRAIT METHOD  NAMESPACE

3. 運算符

     錯誤控制符@:放置在一個表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉。

  運算符優先級:++/-- > ! > 算術運算符 > 大小比較 > (不)相等比較 > 引用>^>|>邏輯與>邏輯或>三目>賦值>and > xor > or 

  比較運算符:==和===的區別;等值判斷(false的7種情況都是等值)

  ++/--:不影響boolean值;--NULL沒有效果,++NULL為1

  邏輯運算符:短路作用;||和&&與or和and優先級不同

4. 流程控制

  遍歷數組的3種方式及各自的區別:for循環只能遍歷索引數組;foreach可以遍歷索引和關聯數組,會reset();聯合使用list(),each()和while循環同樣可以遍歷索引和關聯數組,不會reset()操作(將數組指針回到開頭)。

  分支:使用elseif時,總把優先范圍小的條件放在前面處理;switch后面的控制表達式的數據類型只能是整形,浮點或字符串;continue作用到switch的作用類似於break;跳出switch外的循環可以使用continue 2;switch...case...會生成跳轉表,直接跳轉到對應case

5. 自定義函數和內部函數

  變量作用域:它定義的上下文背景(也是它的生效范圍),大部分變量只有一個單獨的范圍,跨度同樣包含了include和require引入的文件;global關鍵字的作用;$GLOBALS及其他超全局數組;

  靜態變量:僅在局部函數域中存在,程序執行離開此作用域時其值不會消失;static:僅初始化一次,初始化時需要賦值,每次執行函數該值會保留,修飾的變量是局部的,僅在函數內部有效,可以記錄函數的調用次數,從而在某些條件下終止遞歸,初始static變量未賦值時值為NULL

  函數的參數:默認情況下通過值傳遞;如果希望允許函數修改它的值,必須通過引用傳遞參數

  函數的返回值:可返回包括數組和對象的任意類型;省略return,返回值為NULL,不可有多個返回值;從函數返回一個引用,必須在函數聲明和指派返回值給一個變量時都使用&

  外部文件的導入:include/require包含並運行指定文件;如果給出路徑名按照路徑查找,否則從include_path中查找,再沒有則從調用腳本文件所在的目錄和當前工作目錄下尋找;當一個文件被包含時,其中所包含的代碼繼承了include所在行的變量范圍;加載過程中未找到文件則include會發出一條警告,后者會發出一個致命錯誤;include(require)/include_once(require_once)唯一區別是會檢查該文件是否已經被包含過,如果是則不會再次包含

  系統內置函數:
  時間日期:date() strtotime() mktime() time() microtime() 
  IP處理:ip2long() long2ip()
  打印處理:print() printf() print_r() echo sprintf() var_dump() var_export()
  序列化及反序列化函數:serialize() unserialize() 
  字符串處理:implode() explode() join() strrev() trim() strstr() number_format()
  數組處理:array_keys() values() diff() intersect() merge() shift() unshift() pop() push() sort() rand()

6. 正則表達式

  作用:分割,查找,匹配,替換字符串

  分隔符:/,#,~

  通用原子:\d \D \w \W \s \S

  元字符:. * ^ $ + {n} {n,} {n,m} [] () [^] | [-]

  模式修正符:i m e s U x A D u

  后向引用:'/<b>(.*)<\/b>/' preg_replace($pattern, '\\1', $str)

  貪婪模式:'/<b>.*?<\/b>/' 或者'/<b>.*<\/b>/U' preg_replace_all($pattern, '\\1', $str)

  PCRE函數:preg_match() preg_match_all() preg_replace() preg_split()

  中文匹配:UTF-8漢字編碼范圍是0x4e00-0x9fa5,在ANSI(gb2312)環境下0xb0-0xf7,0xa1-0xfe,utf-8要使用u模式修正符使模式字符串被當成utf-8,在ANSI(gb2312)環境下要使用chr將ascii碼轉換為字符

7. 文件及目錄處理

  文件讀取/寫入操作:fopen() 打開模式:r/r++,w/w++,a/a++,x/x++,b,t 
  寫入函數:fwrite() fputs() 
  讀取函數:fread() fgets() fgetc() 
  關閉文件函數:fclose() 
  不需要fopen()打開的函數:file_get_contents() file_put_contents() 
  其它讀取函數:file() readfile() 
  訪問遠程文件:開啟allow_url_fopen(),HTTP協議連接只能使用只讀,FTP協議可以使用只讀或者只寫

  目錄操作函數:
  名稱相關:basename() dirname() pathinfo()
  目錄讀取:opendir() readdir() closedir() rewinddir()
  目錄刪除:rmdir()
  目錄創建:mkdir()
  文件大小:filesize()
  目錄大小:disk_free_space() disk_total_space()
  文件拷貝:copy()
  刪除文件:unlink()
  文件類型:filetype()
  重命名文件或者目錄:rename()
  文件截取:ftruncate()
  文件屬性:file_exists() is_readable() is_writeable() is_executable() filectime() fileatime() filemtime()  
  文件鎖:flock()
  文件指針:ftell() fseek() rewind()

8. 會話控制

  通過GET參數傳遞,信息會暴露,參數可能丟失

  cookie:有服務器發送給客戶端的片段信息
  操作:setcookie() $_COOKIE 
  優缺點:不占用服務器資源,效率高些;不建議保存敏感信息,用戶有權禁用

  session:基於cookie,利用cookie傳遞的sessionID信息在服務器中查找對應文件
  操作:session_start() $_SESSION session_destory() session.auto_start  .cookie_domain .cookie_lifetime .cookie_path .name  .save_path  .use_cookies  .use_trans_sid  .gc_probability  .gc_devisor  .gc_maxlifetime  .save_handler
  優缺點:信息安全,占用服務器資源

  傳遞sessionID的問題:session_name()  session_id() SID

  session存儲:session_set_save_handler()   mysql,memcache,redis等

9. 面向對象

  類權限控制修飾符:public protected private    

  封裝:成員訪問權限

       繼承:單一繼承;方法重寫 parent::

  多態:抽象類的定義;接口的定義

  魔術方法:__construct(),destruct,call,callStatic,get,set,isset,unset,sleep,wakeup,toString,clone

  常見設計模式:工廠,單例,注冊樹,適配器,觀察者,策略

10. 網絡協議

  HTTP協議狀態碼:五類響應 1XX:信息類,接收請求狀態處理 2XX:成功,請求正常處理完畢 3XX:重定向,需要附加操作以完成請求 4XX:客戶端錯誤,服務器無法處理請求 5XX:服務器錯誤狀態碼,服務器處理請求出錯  常見狀態碼:200 204 206 301 302 303 304 307 400 401 403 404 500 503

  OSI7層模型:物理: 建立,維護,斷開物理連接  數據鏈路:建立邏輯鏈接,進行硬件地址尋址,差錯校驗等功能  網絡:進行邏輯地址尋址,實現不同網絡之間的路徑選擇  傳輸:定義傳輸數據的協議端口號,以及流控和差錯校驗  會話:建立管理終止會話  表示:數據表示安全壓縮  應用:網絡服務與最終用戶的一個接口

  HTTP協議的工作特點和工作原理:基於B/S模式,通信開銷小,簡單快速,傳輸成本低,使用靈活,可使用超文本傳輸協議,節省傳輸時間,無狀態; 客戶端發送請求給服務器,創建一個TCP連接,指定端口號,默認80,連接到服務器,服務器監聽瀏覽器請求,一旦監聽到客戶端請求,分析請求類型后,服務器會向客戶端返回狀態信息和數據內容

  HTTP協議常見請求/響應頭:Content-Type, Accept, Origin, Cookie, Cache-control,   User-Agent, Referrer, X-Forwarder-For, Access-Control-Allow-Origin, Last-Modified

  HTTP協議的請求方法:GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE
  GET和POST的區別:GET在后退和刷新沒有變化,無害;POST會重新提交。GET可以收藏為書簽,POST不行。GET可以在瀏覽器緩存,POST不行。GET編碼類型Appication- ,POST還有multipart- ,文件上傳時需改為post。GET參數會保存在歷史記錄中,POST不會。GET向url添加數據長度受限,POST無限制。GET只允許ascii字符,POST無限制。GET安全性差。

  HTTPS的工作原理:一種基於SSL/TLS的HTTP協議,所有的HTTP數據都是在SSL/TLS協議封裝之上傳輸的。在HTTP協議基礎上,添加了SSL/TLS握手以及數據加密傳輸,也屬於應用層協議。

  常見網絡協議含義及端口:FTP21Telnet23 SMTP25 POP3110 HTTP80 DNS53 

11. 開發環境及配置

  版本控制軟件:集中式 CVS和SVN 和分布式Git 容災性,不用連接網絡?

  PHP的運行原理:Nginx+PHP-FPM(FastCGI的進程管理器,master監聽端口和worker處理PHP代碼)
  CGI:PHP解析器和webserver的連接 FastCGI:每次處理完請求后不會kill掉進程,使其一次處理多個請求,不用重新fork一個進程

  PHP常見配置項:register_globals, allow_url_fopen, allow_url_include, date.timezone, display_errors, error_reporting, safe_mode, upload_max_filesize, max_file_uploads, post_max_size 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM