程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php核心知識綱要總結以及學習路線

php核心知識綱要總結以及學習路線

編輯:PHP綜合
    • php介紹
      • 縮寫:Personal Home Page ==>>PHP:HypeText Preprocessor
      • 歷史
        • 1995PHP/FI,Rasmus Lorderf,Personal Home Page
        • 1997PHP/FI2.0,1998PHP3,2000PHP4,2005PHP5
      • 應用范圍:
        • web服務器端腳本
        • 命令行腳本
        • 應用程序圖形界面
    • php運行環境
      • BS軟件模式
        • 浏覽器軟件若干
        • web服務器軟件若干
        • 後台程序語言若干
        • web運行流程:
          • 浏覽器輸入地址,回車(發送請求)
          • 根據規則找到對應web服務器。規則如下:
            • 首先在本機hosts文件中找對應IP
            • 如果hosts中沒有找到,則到互聯網上找對應IP
            • 如果還是沒有找到,則終止請求,返回“找不到服務器”提示
          • web服務器取得對應文件
          • 如有需要,對該文件進行一定的處理(比如php代碼執行)
          • 將文件(或執行結果文件)返回給浏覽器(返回應答)
          • 浏覽器接收到文件
          • 浏覽器處理文件(顯示/執行)
      • PHP的命令行運行模式:
        • 運行php文件:php.exe -f "php文件路徑"
        • 運行php代碼:php.exe -r "php腳本代碼"
      • web服務器運行模式
        • 安裝apache軟件
          • 測試apache
        • 將php配置為apache模塊:loadModule php5_module "php5apache2_2.dll路徑"
        • 告知apache何時調用php模塊
          • 方式1:FilesMatch〉setHandler "application/x-httpd-php"
          • 方式2:addType application/x-httpd-php .php .php3
          • 測試php運行:
      • 配置php
        • 使用phpinfo()測試。
        • 確定php的配置文件
          • PHPIniDir 設定php.in文件位置
        • 修改php配置
          • 設置時區:timezone=PRC
          • 設置擴展庫目錄:extension_dir
          • 打開擴展庫:mysql, mysqli
    • 安裝mysql數據庫
      • 安裝過程:
      • 相關配置過程:
        • 設置環境變量以方便登錄
        • 對php.ini,可以打開對應擴展mysql
      • 操作mysql數據庫的基本流程
        • 客戶端連接mysql服務器
        • 客戶端發送命令(操作語句)
        • 服務器執行語句
        • 服務器返回執行結果
        • 客戶端展示執行結果
        • 斷開連接(退出登錄)
    • 虛擬主機基本配置
      • 端口監聽設置
      • 主機配置的關鍵項
        • 主機名:
        • 主機目錄:
      • 目錄的訪問設置
        • Options
        • Order
        • Allow和Deny
        • AllowOverride
        • .htaccess文件
      • 其他相關設置
        • 默認頁設置DirectoryIndex
        • 主機別名設置ServerAlias
        • 目錄別名設置Alias
      • 多域名虛擬主機配置:
        • 打開主配置文件中的httpd-vhosts.conf開關
        • 編輯多域名配置文件httpd-vhosts.conf
        • 設定要進行多域名配置的IP及端口:NameVirtualHost *:80
        • 一個一個主機進行配置:
          • 設定主機域名:ServerName
          • 設定主機目錄:DocumentRoot
          • 設定目錄訪問:Directory權限設定
    • PHP運行基本環境配置與設定
      • 確定配置文件所在位置:用phpinfo.php查看
      • 修改php的時區設定
      • 設定php的標記形式:
        • 典型(標准)標記形式
        • 腳本形式<script language="php">
        • 短標記形式:short_open_tag
        • 結束標記有時可以省略
    • php基本語法形式:
      • 區分大小寫
        • 是指變量名區分大小寫
        • 但函數名不區分
        • 而系統中使用的關鍵字也不區分大小寫,比如if, else, for
      • 一條語句使用一個分號結束
        • 最後一個分號可省略
        • php結束標記省略則不能省略最後一個分號
      • php注釋形式
        • 單行注釋
          • //常規風格(推薦)
          • #配置文件風格
        • 多行注釋
          • 多行注釋技巧1:/*.... //*/
          • 多行注釋技巧2:if語句
    • 變量:
      • 含義:包含名稱和值一個標識符
        • 名稱和值的關系可以稱為“引用” (指向)
        • 使用一個變量名其實是指使用該變量所“引用”(指向)的值
      • 形式:變量必須以$開頭,後面緊跟變量名
      • 基本操作:
        • 定義變量(賦值):
        • 取值:
        • 判斷變量是否存在isset()
        • 修改變量值(賦值):
        • 刪除unset():就是斷開變量名跟數據之間的“引用關系”
      • 變量命名基本規則
        • 以字母或下劃線開頭
        • 後跟任意數量(含0個)的字母,數字和下劃線
      • 命名推薦規則(行業規則):
        • 駱駝命名法:
        • 帕斯卡命名法:
        • 下劃線間隔法:
      • 變量間傳值方式:
        • 賦值傳值(值傳遞):在php中,變量之間默認都是“值傳遞”,即將一個變量的“內容”復制一份再賦值給另一個變量。
        • 引用傳值(引用傳遞):可以使用“&”運算符來強制引用傳值,語法形式為:$v1 = &$v2;
          • 例:$v1 = 10; $v2 = &$v1;
          • $v2 = 20;
          • 則:echo $v1;//結果是20,這就是引用。
        • 注意事項:對象和資源在某些語句中有時會被“誤認為”是引用傳值,其實不是的。例如:
          • $obj1 = new c1(); $obj1.age = 10; $obj2 = $obj1;
          • $obj2.age = 20;
          • echo $obj1.age;//結果是20,也改變了:這就好像是引用傳值一樣。但其實不是,因為變量中存儲的並不是對象本身,而是對象的一個“標識符”,該標識符才指向(引用)對象本身。即“new”的時候,創建了一個對象的同時,也生成了一個標識符,該標識符指向了該對象,同時將該標識符賦值給了變量$obj1。賦值的時候,是“復制”了該標識符,然後再賦值給了另一個變量。
      • 可變變量:
      • 預定義變量(超全局變量/數組):
        • 綜述:
          • 主要有:$_GET, $_POST, $_REQUEST, $_SERVER, $GLOBALS
          • 均是數組
          • 系統定義與維護
          • 具有超全局作用域
          • 不同情形下可能具有不同的值
        • $_GET:get請求(發送數據)的4種形式
          • <form  method=”get” >
          • <a  href=”abc.php?a=5&b=xyz”>內容</a>
          • location.href=”abc.php?a=5&b=xyz” ;
          • location.assign(“abc.php?a=5&b=xyz”);
        • $_POST
          • 基本形式:<form  method=”post” >
          • 注意特殊的表單項的寫法:多選通常要使用數組形式命名
          • 另外,post方式時在action中還可以帶參數,且作為get方式
        • $_REQUEST
          • 實際是$_GET和$_POST的合集
          • 如果兩者有重名項,默認是$_POST項覆蓋$_GET項
          • 可以在php.ini配置文件中設定先後順序,後者覆蓋前者:request_order=GP
          • $_GET, $_POST, $_REQUEST三種數據是相互獨立的。
        • $_SERVER:保存了服務器或客戶端的有關信息。
          • 常用的有:REMOTE_ADDR, DOCUMENT_ROOT, PHP_SELF
          • 輸出所有項(可能每台服務器有所差異)
        • $GLOBALS:保存了用戶定義的所有全局變量的數據
    • 常量:

      • 含義:
      • 定義形式:
        • 使用define()函數定義
          • 推薦常用名使用全大寫形式
        • 使用const語法定義
          • 但const語法只能在“最頂層”的代碼域中使用
          • 也即,const語法不能在函數中或條件語句中或其他表示一個“范圍”的語句中使用
      • 使用(取值):
        • 直接使用名字
        • 或使用constant()函數
      • 常量和變量的區別
        • 定義形式不同:
        • 使用形式不同:常量無需$符號
        • 可變程度不同:常量的值不可以改變,常量也不可以銷毀
        • 作用范圍不同:常量具有超全局作用域 (函數內外都可以直接使用)
        • 可用類型不同:常量只能存儲標量類型
      • 判斷常量是否存在:defined()
      • 使用一個未定義的常量(特殊情況):
      • 預定義常量:
        • 比如M_PI, PHP_OS, PHP_VERSION,PHP_INT_MAX
        • 參考手冊〉保留字列表〉預定義常量
      • 魔術常量
        • 比如:__DIR__,__FILE__,__LINE__
        • 魔術常量其實類似變量,其值隨著不同代碼而變化,不區分大小寫
        • 參考手冊〉語言參考〉常量〉魔術常量
    • 數據類型:
      • 類型總體劃分:
        • 標量類型: int, float, string, bool
        • 復合類型: array, object
        • 特殊類型: null, resouce
      • 整數類型:int, integer
        • 整數的3種進制寫法:
          • 十進制寫法:123
          • 八進制寫法: 0123
          • 十六進制寫法: 0x123
        • 進制轉換問題
          • 十進制轉二進制decbin(),除2取余倒著寫
          • 十進制轉八進制decoct(),除8取余倒著寫
          • 十進制轉十六進制dechex(),除16取余倒著寫
          • 二進制轉十進制bindec(),每位數值乘以2的權值然後相加
          • 八進制轉十進制octdec() ,每位數值乘以8的權值然後相加
          • 十六進制轉十進制hexdec() ,每位數值乘以16的權值然後相加
          • 注意:十進制轉為其他進制結果是字符串,其他進制轉為十進制要求給定數據是字符串形式
      • 浮點數類型:float,double ,real
        • 浮點數的2種寫法:
          • 小數寫法:
          • 科學計數法:
        • 關於浮點數的細節知識
          • 浮點數不應進行大小比較
          • 小數轉二進制的做法:乘2並順序取整數部分
          • 當整數運算的結果超出整數的范圍後,會自動轉換為浮點數。
      • 字符串類型:string
        • 單引號字符串:
        • 雙引號字符串:
        • 定界符字符串heredoc:
        • 定界符字符串nowdoc:
        • 字符串中的變量:雙引號和heredoc形式中可以識別
      • 布爾類型:bool, boolean
        • 被當作false的數據 :null, "", 0, 0.0, "0", array(), 未定義
        • 其他的都會當作true
      • 數組類型: array
        • 定義:
        • 賦值:
        • 取值:
        • 下標,鍵,key
        • 值,value
        • 元素順序問題
      • 對象類型: object
        • 定義類:
        • 創建對象:
        • 對象屬性操作:
        • 對象方法操作:
      • 資源類型:resource
        • 含義:基本上都是指對外部數據的引用。
          不是PHP語言通過某種語法形式“創造”的數據,而是外部本來就有該數據(比如數據庫,文件,圖片),PHP只是通過某種語法(或方式)來對其進行某些操作。
      • 空類型:null
      • 類型轉換問題:
        • 自動轉換: 根據數據所使用的具體環境而可能會發生自動轉換, 常見的自動轉換情形如:
          • if(數據){}:轉為bool類型
          • 算術運算符:轉為數字類型
          • 連接運算符:轉為字符串類型
          • 比較運算符:轉為布爾類型或數字類型
        • 強制轉換:
          • 語法:(目標類型)數據
          • 常見:(int), (float), (string), (bool)
      • 類型相關的系統函數:
        • var_dump()
        • getType(), setType();
        • isset(), empty(), unset();
        • is_XX類型() 系列函數:
    • 運算符
      • 算術運算符:
        • 一般
        • 注意取余運算%,先取整,再取余
        • 自增自減運算符
          • 常規:對數字進行自加1或自減1。
          • 字符串: 只能自增,且自增的效果就是“下一個字符”
          • 布爾值遞增遞減無效
          • null遞減無效,遞增結果為1
        • 前自增和後自增的區別(自減類似):
          • 前++:先完成變量的遞增運算,再取得該變量的值參與別的運算。
          • 後++:先將原來變量的值臨時存儲,再將變量值遞增,最後再將臨時存儲的值參與別的運算。
          • 推論1:如果獨立語句中進行自加運算,前自加後自加沒有區別 。
          • 推論2:如果前自加後自加是放在別的語句中,則會有所區別。
          • 推論3: 前加加比後加加效率略高(在循環中建議使用前加加)。
      • 比較運算符:
        • 一般比較:
        • ==和===比較
        • 不要對浮點數直接進行大小比較
        • 常見不同類型的比較
          • 有布爾值,轉為布爾值比較
          • 有數字轉為數字比較
          • 兩邊都是純數字字符串,轉為數字比較
          • 否則就按字符串比較
      • 邏輯運算符:
        • 短路現象
          • 邏輯與短路:
          • 邏輯或短路:
      • 字符串運算符:
      • 賦值運算符:
        • 標准賦值
        • 自賦值
      • 條件(三目)運算符:
      • 位運算符:
        • 位運算符基本規則:
          • & : 兩個都是1,結果才是1(有一個是0,結果就是0)
          • | : 兩個都是0,結果才是0(有一個是1,結果就是1)
          • ~ : 取二進制數字的相反值,即:~1的結果是0,~0的結果是1。
        • 按位與運算(&):
        • 按位或運算(|):
        • 按位非運算(~):
        • 按位左移運算(<<):
        • 按位右移運算(>>):
        • 按位異或運算(^):
        • 補充介紹:原碼,反碼,補碼
          • 原碼:一個數字的原始二進制形式,人可理解
          • 反碼:正數的反碼是其本身(即不變),負數的反碼:符號位不變,各位取反
          • 補碼:正數的補碼是其本身(即不變),負數的補碼:符號位不變,各位取反後加1(即反碼加1)
          • 補碼還原:正數無需還原,負數:符號位不變,各位取反加1
          • 計算機cpu中的運算,只有加法運算,沒有減法運算
          • 用補碼來表示一個數,就可以將減法轉換為加法:15-13相當於15+(-13)
          • 舉例計算:5+3, 5-3
        • 應用:管理一組對象(事物)的開關狀態
          • 有些事物(數據)只有2個狀態(值),此時可以稱為“開關狀態”,比如燈的亮滅狀態,商品是否推薦狀態
          • 用二進制原理可以方便輕松管理多個該類事物的狀態:
          • 每個事物的狀態用一個變量值來表示:$S1=1,$S2=2,$S3=4,$S4=8,$S5=16,...
          • 則所有燈的總狀態變量:$state = "11111"(2進制)就表示他們都是“開”的。$state = "10110"(2進制)就表示第一第四盞燈是關的,其余是開的。
          • 判斷某盞燈的狀態(亮或滅):如果($state & $Sn)>0,則表示亮,否則表示滅(其中$Sn代表某盞燈,即$S1,$S2,$S3,$S4,$S5之一,下同)。
          • 對於任意的初始狀態,想要打開某盞燈:$state = $state | $Sn。
          • 對於任意的初始狀態,想要關閉某盞燈:$state = $state & ~$Sn。
      • 數組運算符:+  ==   !=   <>    ===    !==
        • 聯合(+):將右邊的數組項合並到左邊數組的後面,得到一個新數組。如有重復鍵,則結果以左邊的為准
        • 相等(==): 如果兩個數組具有相同的鍵名和鍵值(可以順序不同,或類型不同),則返回true
        • 不相等(!=, <>) :如果兩個數組不是相等(==),則返回true
        • 全等(===):如果兩個數組具有相同的鍵名和鍵值且順序和類型都一樣,則返回true
        • 不全等(!==) : 如果兩個數組不是全等(===),則返回true
      • 錯誤控制運算符@:用於一個表達式的前面,以抑制該表達式可能產生的報錯信息。
      • 運算符的優先級問題
        • 要意識到運算符有優先級問題
        • 括號最優先,賦值最落後(通常)
        • 先乘除後加減
        • 大致:算術運算符〉比較運算符〉邏輯運算符(除了“非”運算)
    • 流程控制:
    • 流程圖基本符號:開始結束,語句(塊),判斷,輸入輸出,走向
      • 分支結構
        • if
        • if else
        • if else if(推薦)
        • if elseif
        • if else if else
        • switch
          • break的作用
          • 不使用break的技巧
      • 循環結構:
        • while
        • do while
        • for
        • foreach(用於數組遍歷循環)
        • 循環的中斷
          • break
          • continue
          • 中斷層級
      • 部分流程控制的替換語法:
        • if ( ... ) :   。。。。  endif;
        • if ( ... ) :  。。。else: 。。。 endif;
        • if ( ... ): 。。。elseif( ... ) : 。。。 elseif( ... ): 。。。 else: 。。。 endif;
        • switch( ... ) : case ... case ... endSwitch;
        • while(...): 。。。endwhile;
        • for(...; ...; ...): :。。。 endfor;
      • goto語句:
        • 基本形式: goto Flag; ... Flag: .....
        • 注意事項:
          • 不能跳入循環中
          • 不能跳入函數中
          • 不能跳出函數外
          • 不能跳出文件外
      • 控制腳本執行進度
        • die() / exit();
        • sleep()
    • 文件加載
      • 綜述和基本語法:include, require, include_once, require_once:
      • 文件路徑問題
        • 相對路徑: ./    ../
        • 絕對路徑: c:/abc/def/ 或:http://www.abc.com
        • 無路徑設定(只給出文件名,不推薦)
          • 先在include_path設定的目錄中找
          • 沒找到,則在網頁文件所在目錄下找(當前工作目錄)
          • 沒找到,則在當前include命令所在文件的目錄下找
        • include_path設置,set_include_path(), get_include_path()
      • 文件載入和執行過程:
        • 從include語句處退出php腳本模式(進入html代碼模式)
        • 載入include語句所設定的文件中的代碼,並執行之(如同在當前文件中一樣)
        • 退出html模式重新進入php腳本模式,繼續之後的代碼
      • include_once 和include的區別
      • require 和 include的區別:引用失敗(出錯)時,include警告並繼續,require終止。
      • require 和 require_once的區別
      • 在被載入文件中 return 關鍵字的作用
        • 默認情況下include載入成功返回1,載入失敗返回false
        • 但被包含的文件中可以使用return語句返回數據值並終止該文件的後續部分的執行
        • return返回的數據如同函數返回值一樣可以進一步處理(比如賦值給其他變量)
    • 錯誤處理:
      • 錯誤的分類:
        • 語法錯誤:程序沒法運行,直接提示語法錯誤
        • 運行時錯誤:只有程序運行到某行,或在某些特定的情形下運行才會發生的錯誤。
        • 邏輯錯誤:程序從頭到尾運行都沒有發生(並提示)錯誤,但程序運行計算的結果是錯誤的。
      • 錯誤分級與代號: 不同的錯誤會導致不同程度的程序運行反應,這就是錯誤的分級。 錯誤代號其實只是一個系統內部常量。也就是說,這些錯誤代號是一個系統預先定義好的數據,然後系統根據發生的不同錯誤情形,而分配不同的值供程序員使用來判斷錯誤類型。
        • 系統錯誤:E_ERROR, E_WARNING, E_NOTICE
        • 用戶錯誤:E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE
        • 所有錯誤: E_ALL | E_STRICT
        • PHP手冊〉函數參考〉影響PHP行為的擴展〉錯誤處理〉預定義常量
      • 錯誤的觸發:
        • 程序運行時觸發。
        • 程序中通過觸發函數來人為觸發3種用戶錯誤
          • trigger_error("錯誤提示文字", 錯誤類型T)
          • 錯誤類型T:E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE之一
        • 其中,系統關鍵錯誤(E_ERROR)或用戶關鍵錯誤(E_USER_ERROR)一旦發生,則程序停止執行。
      • 顯示錯誤報告:
        • display_errors = On || Off ,或 ini_set("display_errors", 0或1);
        • error_reporting = E_ALL,或ini_set('error_reporting', E_ALL);
      • 記錄錯誤日志:
        • log_errors = On||Off, 或ini_set('log_errors', 1或0);
        • error_log = "錯誤日志文件名", 或ini_set('error_log', "錯誤日志文件名");
        • error_log = "syslog"則會將錯誤信息記錄到系統日志去。
      • 自定義錯誤處理器:
        • 設定錯誤由我們自定義函數來處理:set_error_handler("函數名");
        • 定義該函數,帶4個參數:function errorHandler($errNo, $errMsg, $errFile, $errLine){...}
        • 這樣,發生錯誤之後,就會調用該函數來處理該錯誤
        • 但如果發生系統關鍵錯誤(E_ERROR),則不會去調用自定義錯誤處理函數,而是會直接停止運行,並按php.ini的設定顯示或記錄錯誤信息。
        • 除了系統關鍵錯誤,其他錯誤發生後則不會再去顯示或記錄錯誤了,而是按照自定義錯誤處理函數中的代碼執行。
    • 函數
      • 基本使用
        • 函數定義形式
        • 函數調用形式
        • 函數調用流程分析
          • 開始調用:實際參數傳數據給形式參數
          • 程序執行流程進入到函數中(一個獨立的運行空間),跟全局執行空間是隔離的
          • 按常規的程序邏輯執行函數中的代碼
          • 如果碰到return語句,則終止函數的執行,跳回函數開始調用的位置;
          • 如果執行到函數的最後位置,也同樣跳回函數開始調用的位置
      • 函數參數
        • 形式參數,形參,parameter
        • 實際參數,實參,arguement
        • 參數的默認值
          • 形式:形式參數上給其賦值(就是默認值)
          • 要求:
            • 默認值不能是對象或資源類型;
            • 默認值只能是常量表達式,或常量,不能是變量
            • 默認值參數必須放在非默認值參數的右邊
            • 調用函數的時候,對應有默認值的參數可以給值,也可以不給值
              • 如果給值,則該對應形式參數使用給定的值
              • 如果不給值,則該對應形式參數使用默認
        • 參數傳值問題
          • 默認情況下,參數傳值采用的是“值傳遞”的方式進行傳值。
          • 可以在形式參數的前面使用“&”符號,來達到“引用傳遞”的傳值方式。
          • 注意1:如果是引用傳值,則實參只能是一個“變量”——也即變量跟變量之間才有引用傳值方式問題。
          • 注意2:引用傳值的形參變量,在函數內部改變該形參變量的值,則對應實參變量的值也就改變。
        • 參數的數量問題
          • 常規:實際參數數量跟形式參數一致;
          • 實際參數數量多於形式參數,不報錯(很多其他語言是報錯的);
          • 實際參數數量少於形式參數,則分為:
            • 實際參數數量少於形式參數的非默認參數數量,則報錯
            • 實際參數數量不少於形式參數的非默認參數數量,則不報錯,不夠部分,使用默認參數值
          • 不定參數數量的情形:
            • 類似:var_dump()可以傳遞不定個數的參數,如何做實現?
            • 定義的時候不定義形式參數
            • 在函數內部,使用func_get_args()獲取所有傳遞過來的實際參數值,結果是一個數組
            • 在函數內部,使用func_get_arg(n)獲得第n個參數(n從0開始)
            • 在函數內部,使用func_num_args()獲得所有實際參數的個數
      • 函數的返回值
        • 在函數中,使用return語句後面跟一個數據(直接數據或變量數據或常量數據),就可以返回該數據(值)。
        • 通常情況下,函數返回的數據都是以“值傳遞”的形式返回。
        • 我們還可以使用強制引用返回(&)的形式來定義一個函數的返回值的返回方式,做法:
          • 定義函數使用&符號:function &f1(){....}
          • 調用函數使用&符號:$v1 = &f1();
          • 要求:return語句返回的值必須是變量值(即變量)。
          • 舉例:函數中的一個靜態變量的值,使用引用返回,則外部也可以修改其值。
      • 函數的其他形式
        • 可變函數:一個變量名後面帶括號,則會被識別為可變函數:找到與該變量的值同名的函數並執行之。
        • 匿名函數:沒有名字的一個函數,可將其賦值給一個變量,然後該變量後面加括號就可以調用該函數
          • $f1 = function($p1, $p2) { ........ }
          • call_user_func_array($f1, array(1, 2));
        • 或純粹是一個沒有名字的函數,且直接當作其他函數的參數(即改函數的參數是一個函數)。
          • call_user_func_array( function($p1, $p2) { ........ } , array(1, 2) )
          • 這種當作其他函數參數的函數,通常稱為“callable”(可調函數),或“callback”(回調函數)。
      • 變量作用域
        • 局部作用域(局部變量)
          • 靜態局部變量:靜態變量只能賦值為一個直接的標量值,不能是計算值,或另一個變量值。
        • 全局作用域(全局變量)
        • 超全局作用域(超全局變量)
        • 局部訪問全局變量
          • 使用$GLOBALS超全局數組
          • global關鍵字:本質是設定一個局部變量來引用某個全局變量,刪掉該局部變量,全局變量仍然存在
          • $GLOBALS數組中的元素跟全局變量是一一對應關系。刪掉(unset)一個,另一個也就沒有了
          • 使用$GLOBALS數組的一個新元素,則可以“創造”全局變量,如:$GLOBALS['vvv'] = 1; #假設之前沒有$vvv這個全局變量,則這一行之後就有了。
        • 全局訪問局部
          • 通過引用傳遞的方式向形參傳遞一個引用實參變量
          • 使用函數的引用返回形式
          • 函數中使用global關鍵字來首次引用一個全局變量,則函數結束後在全局范圍就可以使用該變量了
      • 有關函數的系統函數
        • function_exists()
        • func_get_arg()
        • func_get_args()
        • func_num_args()
      • 函數相關編程思想
        • 遞歸思想
        • 遞推思想(迭代思想)
      • 常用內部函數:
        • 字符串函數:
          • 輸出與格式化:echo , print, printf, print_r, var_dump.
          • 字符串去除與填充:trim, ltrim, rtrim, str_pad
          • 字符串連接與分割:implode, join, explode, str_split
          • 字符串截取:substr, strchr, strrchr,
          • 字符串替換:str_replace, substr_replace
          • 字符串長度與位置: strlen, strpos, strrpos,
          • 字符轉換:strtolower, strtoupper, lcfirst, ucfirst, ucwords
          • 特殊字符處理:nl2br, addslashes, htmlspecialchars, htmlspecialchars_decode,
        • 時間函數:
          • time, microtime, mktime, date, idate, strtotime, date_add, date_diff, date_default_timezone_set, date_default_timezone_get
        • 數學函數:
          • max, min, round, ceil, floor, abs, sqrt, pow, round, rand
    • 數組
      • 數組基礎
        • 定義(多種形式)
        • 取值
        • 賦值(多種形式)
      • 數組分類
        • 從鍵值關系來分
          • 關聯數組
          • 索引數組
        • 從數組層次來分
          • 一維數組
          • 多維數組
          • 混合數組
          • “維”的本質
      • 數組遍歷
        • foreach基本語法
        • 數組指針操作與遍歷原理
        • foreach遍歷流程圖
        • for+next遍歷數組
        • while+each()+list()遍歷數組
        • foreach遍歷的細節探討:
          • foreach也是正常的循環語法結構,可以有break和continue等操作。
          • 遍歷過程中值變量默認的傳值方式是值傳遞。
          • 遍歷過程中值變量可以人為設定為引用傳遞:foreach($arr as $key => &$value){ ... }
          • foreach默認是原數組上進行遍歷。但如果在遍歷過程中對數組進行了某種修改或某種指針性操作,則會復制數組後在復制的數組上繼續遍歷循環。
          • foreach中如果值變量是引用傳遞,則無論如何都是在原數組上進行。
      • 數組函數
        • 指針操作函數: current, key, next, prev, reset, end, each
        • 單元操作函數: array_pop,array_push, array_shift, array_unshift, array_slice, array_splice
        • 排序函數: sort, asort, ksort, usort, rsort, arsort , krsort , shuffle,
        • 查找函數: in_array, array_key_exists, array_search
        • 其他函數: count, array_reverse, array_merge, array_sum, array_keys, array_values,array_map, array_walk, range
      • 數組排序算法
        • 冒泡排序
        • 選擇排序
        • 插入排序
        • 快速排序
      • 數組查找算法
        • 順序查找
        • 二分查找
    • 面向對象編程
      • 面向對象編程思想介紹:
        • 傳統的面向過程的編程思想:
          • 將要實現的功能描述為一個從開始到結束的連續的“步驟(過程)”。
          • 依次逐步完成這些步驟。如果步驟較大,又可以將該步驟再次細分為子步驟,以此類推。
          • 程序從頭開始執行一直到結尾並得到所需結果。
          • 例子:完成來傳智“報名學習”這件事,可以分為以下幾步:
            • 學生: 提出要報名,並提供姓名和照片
            • 咨詢老師: 接收照片並登記學生姓名
            • 學生:繳費(付款到學校賬號)並獲得繳費憑證
            • 咨詢老師:驗證憑證並分配班級
            • 結果:報名完成,學生可以在規定的時間到規定的班級(教室)上課,數據庫中就有了該學生的信息。
        • 現代的面向對象的編程思想:
          • 將要實現的功能描述為一個“對象/物體”完成的任務——現實中也是如此:功能的實現都是依賴於一個實體的“行動/操作/動作”。
          • 完成該最終功能的過程中需要實現其他中間功能(過程),則再去調用其它對象(或也可能是自己本身)來實現該中間功能。
          • 整個系統的完成(功能的實現)看作是一個一個對象在發揮其各自的“能力”並在內部進行協調有序的調用過程。
          • 例子:完成來傳智“報名學習”這件事,可以這樣來處理:
            • 學生對象:有姓名有照片,有所屬班級,能“提出報名”,能“繳費”
            • 咨詢老師對象:能接收照片並登記姓名,能分配班級。
            • 班級對象:有班號,有開班日期,有教室。
      • 面向對象基本概念:
        • 類與對象:
          • 類是描述一類事物的一個總稱,是具有相同特征特性的該類事物的一個通用名字(稱呼);
          • 比如人就是一個類(人類),狗也是一個類(狗類),它們又屬於一個更大的類(哺乳類),桌子,手機,書都是一個類;
          • 對象是一個明確的具體的“物體”,是某個類中的一個“實物”(相對來說,類就是一種抽象的泛稱)。對象離不開類,或者說,對象一定隸屬於某個類——有類才有對象,先有類再有對象。
          • 比如“黃曉明”就是“人”這個類的一個具體對象,“阿黃”是“狗”這個類的一個具體對象。
          • 一個類決定了一個對象所具有的所有特征特性信息,比如我是人類,則我有:姓名,性別,年齡,我還能吃飯,走路,說話。
          • 一個對象的所有特征特性信息,都是由其所屬的類決定的,但每個對象又很有可能有自己不同的特征特性信息,比如有個對象的名字叫吳六奇,性別男,會寫程序,另一個對象可能叫章子怡,性別女,會演戲。
          • 語法上,一個類內部可以具有自己的“變量”和“函數”,但此時在技術術語上就對應地稱為“屬性”和“方法”。一個類也可以有自己的常量。這些屬性,方法和常量就都稱為“類”的“成員”。
        • 類的定義:
        • 類中屬性property:
        • 類中方法method:
        • 對象的創建:就是由一個類“創建”出一個具體的“物體”——專業說法就是對象。創建對象的語法可以有:
          • new 類名();
          • new 變量名(); //該變量的內容是一個表示類名的字符串。
          • new 對象名();//創建該對象所屬類的一個新對象
          • new self; //用於在類的方法內部創建一個該類對象。
          • 類名::getNew();//定義類的一個靜態方法用於獲取該類的一個對象
        • 對象的使用:要麼使用其屬性,要麼使用其方法。使用屬性,就可以當作一個變量看待。使用方法,就可以當作一個函數看待。
        • 對象的傳值:
      • 類中成員member:
        • 一個類中能且只能包含如下3種成員(代碼):變量(稱為屬性),函數(稱為方法),常量(稱為類常量)。
        • 一般屬性:
          • 屬性就是定義在類中的變量,需要使用public或var來修飾(定義),也可以使用protected或private來修飾(見後續知識)。
          • 定義的時候可以不賦值,也可以賦(初)值,但只能是一個“直接值”(常量值)或常量,不能是變量值或計算值或函數調用返回值等。
          • 屬性的使用形式:對象名->屬性名;
          • 屬性是可讀可寫的(可取值賦值)。
        • 一般方法:
          • 方法就是定義在類中的函數,但函數前可以使用public,protected, private修飾(見後續知識),也可以省略。
          • 但該方法的調用(使用)不能獨立進行,而是需要通過對象來調用。
          • 方法中$this關鍵字具有特定含義:表示調用該方法的對象。
          • 獲取$this的所屬類:get_class($this)
        • 靜態屬性:
          • 一個僅僅隸屬於(依附於)類的屬性,其是通過類名直接來取用的。
          • 定義形式:[訪問修飾符] static $靜態屬性名 [ = 初值];//訪問修飾符省略則默認為public,初值也應該是直接值或常量
          • 使用形式:類名::$靜態屬性名;//可取值可賦值;
        • 靜態方法:
          • 一個僅僅隸屬於(依附於)類的方法,其是通過類名直接調用的(不過新版php已經可以使用該類的對象名來調用了)
          • 定義形式:[訪問修飾符] static function $靜態方法名(...){ ...... }
          • 使用形式:類名::靜態方法名(...);其中類名也可以用該類的對象名,一個內容為該類名的字符串變量名,self等來代替。
          • self關鍵字:用在方法中,表示該方法所在的類。
          • static關鍵字:代替self關鍵字的位置,除了具有self作用外,還具有更靈活的作用,那就是所謂“後期靜態綁定”。
          • 注意1:$this在靜態方法中不能使用。
          • 注意2:靜態方法中不應調用非靜態方法。
        • 類常量:
          • 一個僅僅隸屬於(依附於)類的常量,其是通過類名直接來取用的(不過新版php已經可以使用該類的對象名來調用了)
          • 定義形式:const 常量名 = 初值;//必須賦初值
          • 使用形式:類名::常量名;其中類名也可以用該類的對象名,一個內容為該類名的字符串變量名,self等來代替。
        • 構造方法(函數):
          • 構造方法是一個類在進行實例化(new一個對象出來)的時候,會首先自動調用的方法。
          • 構造方法適用於創建對象時(使用對象前)對該對象做一些初始化工作。
          • 定義形式:[訪問修飾符] function __construct(...){ ...... };//訪問修飾符通常總是需要public(或省略)。
          • 調用形式:實際上,沒有直接的調用形式,而是在new一個對象的時候就調用了:new C1("小花",18,"女");
          • 如果一個類中定義了構造方法,則實例化該類時就會調用該方法,且實例化時的參數需要跟構造方法的參數匹配。
          • 如果一個類中沒有定義構造方法,則會自動調用其父類的構造方法(如果有),則實例化時的參數需跟父類的構造方法的參數匹配。
          • 也可以在當前類的構造方法中調用父類的構造方法:parent::__construct();
        • 析構方法(函數):
          • 析構方法是在一個對象被銷毀的時候會自動調用(執行)的方法;對象銷毀的幾種情況:
            • 腳本程序運行結束,自動銷毀;
            • 明確地unset()一個對象變量,則被銷毀;
            • 改變對象變量的值,被銷毀;
          • 析構方法適用於銷毀對象時對對象中使用的一些資源進行清理(銷毀)——不過實際上現代PHP已經內具了垃圾回收機制,一般無需清理。。
          • 定義形式:function __destruct(){ ...... };//注意:只能是public的,且不能有參數
          • 調用形式:無需在代碼中手工調用,而是在代碼運行結束時自動被調用(執行)。
          • 如果一個類中定義了析構方法,則銷毀對象時就會調用該方法。
          • 如果一個類中沒有定義析構方法,則銷毀對象時就會調用其父類的析構方法(如果有)
      • 類的繼承:
        • 基本含義:類是用來描述現實世界中同一種事物的共有特性的抽象模型。但現實世界中,不同種類的事物之間有往往有一些上下級或大小范圍的關系。比如,動物是一個“類”,具有某些特性。但脊椎動物也是一個類,也具有一些特性,且同時具有動物類的所有特性。哺乳動物還是一個類,具有一些特性,並同時具有脊椎動物的所有特性。如此等等,則面向對象編程中,我們定義的類也同樣可以具有類似的關系特征,這就是類的繼承。
        • 基本語法:extends
        • 基本概念:
          • 繼承:一個類從另一個已有的類獲得其特性,稱為繼承。
          • 派生:從一個已有的類產生一個新的類,稱為派生。
          • 父類/子類:已有類為父類,新建類為子類。
          • 單繼承:一個類只能從一個上級類繼承其特性信息。PHP和大多數面向對象的語言都是單繼承模式。C++是多繼承。
          • 擴展:在子類中再來定義自己的一些新的特有的特性信息(屬性,方法和常量)。沒有擴展,繼承也就沒有意義了。
        • 訪問控制修飾符:
          • public公共的:在所有位置都可訪問(使用)。
          • protected受保護的:只能再該類內部和該類的子類或父類中訪問(使用)。
          • private私有的:只能在該類內部訪問(使用)。
        • parent關鍵字:在類的內部用來表示(代表)該類的父類。可以用來訪問父類的屬性或方法或常量。
        • 構造和析構方法中的調用上級同樣方法的問題:
          • 子類中沒有定義構造方法時,會自動調用父類的構造方法。因此實例化子類時,需按照父類的構造方法的形式進行。
          • 子類定義了自己的構造方法,則不會自動調用父類的構造方法,但可以手動調用:parent::__construct();
          • 子類中沒有定義析構方法時,會自動調用父類的析構方法。
          • 子類定義了自己的析構方法,則不會自動調用父類的析構方法,但可以手動調用:parent::__destruct()
        • 重寫override
          • 什麼是重寫?重寫又叫“覆蓋”,就是將從父類繼承下來的屬性或方法重新定義。只有保護的或公有的屬性或方法能夠被覆蓋。
          • 為什麼要重寫?因為父類的某個屬性可能對於子類來說不夠具體或詳細,子類想要同樣特性或功能的更准確或詳細信息。
          • 重寫的基本要求:訪問控制權限,方法的參數形式。
          • 私有屬性和私有方法的重寫問題:私有屬性和方法都不能覆蓋,但其實子類可以定義跟父類私有的同名屬性或方法。只是當作一個自身的新的屬性或方法來看待而已。不過方法的參數必須一致。
          • 構造方法的重寫問題:構造方法不但可以像其他普通方法一樣重寫,而且,比普通方法更寬松:重寫的時候參數可以不一致。
        • 最終類final class:
        • 最終方法final method:
      • 設計模式:
        • 工廠模式:一種專門用於“生產”其他各種類的對象的一個類
        • 單例模式:一種只能從中實例化出來一個對象的類
      • 類的“擴大化”技術:
        • 抽象類,抽象方法:
          • 一個類可以使用關鍵字abstract聲明為抽象類;抽象類是不能實例化的類,只用作其他類的父類。
          • 一個方法可以使用關鍵字abstract聲明為抽象方法;抽象方法只需要聲明方法頭,不需要大括號部分的方法體。
          • 一個類中有抽象方法,則該類必須聲明為抽象類。
          • 子類繼承自一個抽象類,則子類必須實現父類中的所有抽象方法,除非子類也繼續作為抽象類。
          • 子類實現抽象父類的方法時,訪問控制修飾符的范圍不能降低,且方法的參數也須一致。
        • 重載技術overloading:
          • 屬性重載:__set(), __get(), __isset(), __unset()
          • 方法重載:__call(), __callstatic();
        • 接口interface:
          • 什麼是接口?
          • 為什麼需要接口?
          • 接口的定義形式:
          • 接口的實現:使用接口被稱為接口的“實現”(implements),其實就是類似“繼承”
          • 接口的多實現:
          • 接口常量:
          • 接口繼承:
      • 有關類或對象的其他相關技術:
        • 類的自動加載:__autoload(), spl_autoload_register();
        • 對象的復制(克隆):
        • 對象的遍歷:
        • PHP內置標准類:
        • 對象的類型轉換: 將得到一個標准類stdClass的對象
          • 對象轉換為對象:沒有變化;
          • 數組轉換為對象:數組的鍵名當作屬性名,值為對應值;
          • null轉換為對象:空對象;
          • 其他標量數據轉換為對象:屬性名為固定的“scalar”,值為該變量的值
        • 類型約束:可以對函數(方法)的參數設定必須使用的類型。只能對對象,接口,數組進行約束。
        • 與類有關的魔術常量:__CLASS__, __METHOD__
        • 與類有關的其他魔術方法:
          • 已學過的魔術方法:__construct, __destruct, __set(), __get(), __isset(), __unset(), __call(), __callstatic()
          • __sleep()和__wakeup(): 序列化操作的時候,會先調用__sleep()方法,反序列化操作的時候會先調用__wakeup()方法。
          • __tostring():將對象當作字符串來使用的時候,會自動調用該方法,以此來作為對象轉換為字符串的結果數據。
          • __invoke():將對象當作函數來使用的時候,會自動調用該方法。
        • 與類有關的系統函數:class_exists(), interface_exists(), get_class(),get_parent_class(), get_class_methods(), get_class_vars(), get_declared_classes()
        • 與對象有關的系統函數:is_object(),get_object_vars()
        • 與類有關的運算符:new,instanceof
        • 面向對象編程思想的3個特征:封裝,繼承,多態。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved