關於PHP,筆者在本科的時候就聽到了太多太多,惋惜雖然看了不少的教材,聽到了無數遍,也沒有系統性的整理過和學習過這方面的知識,這點不管何時想起來都是一種遺憾,因而筆者打算總結一下PHP的簡單使用。其實對於一門語言的學習來講,只要掌握了語言特性,其餘的都是迎刃而解的,語言無外乎順序、分支、循環語句,這是從功能上面進行劃分的,適用於任何的語言,其實學過了編譯原理以後,在咱們的大腦之中就不該該有語言的概念了,而是應該從更高的層次,從語言的簡潔性、可移植性、執行的效率、設計的初衷、方便作的事情、語言之中包含的理念和哲學思惟這些方面來思考一門語言的好壞。php
PHP是一種開源,解釋和麪向對象的腳本語言運行在服務端。而且具備開源、獨立平臺、兼容性、嵌入式腳本等特色,愈來愈多的被用於Web開發。大多數狀況下,運行在服務端的PHP腳本要依賴Apache、Nginx這樣的Web服務器來運行。PHP 是一種建立動態交互性站點的強有力的服務器端腳本語言。PHP 是免費的,而且使用很是普遍。
html
PHP 表明 PHP: Hypertext Preprocessor PHP 是一種使用普遍的開源的腳本語言 PHP 腳本在服務器上執行 PHP 可免費下載使用 PHP 文件可包含文本、HTML、JavaScript代碼和 PHP 代碼 PHP 代碼在服務器上執行,結果以純 HTML 形式返回給瀏覽器 PHP 文件的默認文件擴展名是 ".php" PHP 能夠生成動態頁面內容 PHP 能夠建立、打開、讀取、寫入、關閉服務器上的文件 PHP 能夠收集表單數據 PHP 能夠發送和接收 cookies PHP 能夠添加、刪除、修改您的數據庫中的數據 PHP 能夠限制用戶訪問您的網站上的一些頁面 PHP 能夠加密數據
PHP 可在不一樣的平臺上運行(Windows、Linux、Unix、Mac OS X 等)
PHP 與目前幾乎全部的正在被使用的服務器相兼容(Apache、IIS 等)
PHP 提供了普遍的數據庫支持
PHP 便於於學習,並可高效地運行在服務器
經過 PHP,再也不限於輸出 HTML。還能夠輸出圖像、PDF 文件,甚至 Flash 電影和任意的文本,好比 XHTML和 XML。mysql
其實很簡單,最快捷的方法就是下載一個wamp,這個軟件是windows+Apache+mysql+php的縮寫,php運行須要一個服務器,而且還須要mysql數據庫,而這個軟件將這些須要的環境早就集成到一塊兒了,咱們能夠直接安裝和使用。算法
在使用的時候須要將咱們的php文件放到wamp安裝目錄的www目錄之下,這樣咱們經過瀏覽器訪問localhost+保存的文件夾+文件名就能夠了。sql
PHP 腳本能夠放置在文檔中的任何位置,以 <?php 開始,以 ?> 結束。PHP 文件的默認文件擴展名是 ".php"。PHP 文件一般包含 HTML 標籤和一些 PHP 腳本代碼。數據庫
1 <!DOCTYPE html> 2 <html> 3 <body> 4 5 <h1>My first PHP page</h1> 6 7 <?php 8 echo "Hello World!"; 9 ?> 10 11 </body> 12 </html>
PHP 中的每一個代碼行都必須以分號結束。分號是一種分隔符,用於把指令集區分開來。經過 PHP,有兩種在瀏覽器輸出文本的基礎指令:echo 和 print。
PHP 是一門鬆散類型的語言,PHP 變量規則:windows
變量以 $ 符號開始,後面跟着變量的名稱 變量名必須以字母或者下劃線字符開始 變量名只能包含字母數字字符以及下劃線(A-z、0-9 和 _ ) 變量名不能包含空格 變量名是區分大小寫的($y 和 $Y 是兩個不一樣的變量) PHP 沒有聲明變量的命令。 變量在您第一次賦值給它的時候被建立。
PHP 變量做用域:變量的做用域是腳本中變量可被引用/使用的部分。PHP 有四種不一樣的變量做用域:數組
local global static parameter
局部和全局做用域
在全部函數外部定義的變量,擁有全局做用域。除了函數外,全局變量能夠被腳本中的任何部分訪問,要在一個函數中訪問一個全局變量,須要使用 global 關鍵字。在 PHP 函數內部聲明的變量是局部變量,僅能在函數內部訪問。 瀏覽器
1 <html> 2 <body> 3 4 <?php 5 echo "=======局部和全局做用域======="; 6 echo "<br>"; 7 $x=5; // global scope 8 9 function myTest1() 10 { 11 $y=10; // local scope 12 echo "<p>Test variables inside the function:<p>"; 13 echo "Variable x is: $x"; 14 echo "<br>"; 15 echo "Variable y is: $y"; 16 } 17 myTest1(); 18 echo "<br>"; 19 20 echo "<p>Test variables outside the function:<p>"; 21 echo "Variable x is: $x"; 22 echo "<br>"; 23 echo "Variable y is: $y"; 24 echo "<br>"; 25 26 echo '========PHP global 關鍵字========='; 27 echo "<br>"; 28 29 $g_x=5; 30 $g_y=10; 31 32 function myTest2() 33 { 34 global $g_x,$g_y; 35 $g_y=$g_x+$g_y; 36 } 37 38 myTest2(); 39 echo $g_y; // 輸出 15 40 41 echo "<br>"; 42 echo "==========\$GLOBALS[]==========="; 43 echo "<br>"; 44 /*PHP 將全部全局變量存儲在一個名爲 $GLOBALS[index] 的數組中。 index 保存變量的名稱。這個數組能夠在函數內部訪問,也能夠直接用來更新全局變量。 45 上面的實例能夠寫成這樣:*/ 46 $temp_x=5; 47 $temp_y=10; 48 49 function myTest3() 50 { 51 $GLOBALS['temp_y']=$GLOBALS['temp_x']+$GLOBALS['temp_y']; 52 } 53 54 myTest3(); 55 echo $temp_y; 56 echo "<br>"; 57 58 echo "========Static 做用域========="; 59 echo "<br>"; 60 function add() 61 { 62 static $add_x=0; 63 echo $add_x; 64 echo "<br>"; 65 $add_x++; 66 } 67 68 add(); 69 add(); 70 add(); 71 72 ?> 73 74 </body> 75 </html>
PHP 並置運算符:在 PHP 中,只有一個字符串運算符。並置運算符 (.) 用於把兩個字符串值鏈接起來。 PHP strlen() 函數:有時知道字符串值的長度是頗有用的。strlen() 函數返回字符串的長度(字符數)。 PHP strpos() 函數:strpos() 函數用於在字符串內查找一個字符或一段指定的文本。若是在字符串中找到匹配,該函數會返回第一個匹配的字符位置。若是未找到匹配,則返回 FALSE。
addcslashes() 返回在指定的字符前添加反斜槓的字符串。 addslashes() 返回在預約義的字符前添加反斜槓的字符串。 bin2hex() 把 ASCII 字符的字符串轉換爲十六進制值。 chop() 移除字符串右側的空白字符或其餘字符。 chr() 從指定 ASCII 值返回字符。 chunk_split() 把字符串分割爲一連串更小的部分。 convert_cyr_string() 把字符串由一種 Cyrillic 字符集轉換成另外一種。 convert_uudecode() 對 uuencode 編碼的字符串進行解碼。 convert_uuencode() 使用 uuencode 算法對字符串進行編碼。 count_chars() 返回字符串所用字符的信息。 crc32() 計算一個字符串的 32 位 CRC(循環冗餘校驗)。 crypt() 單向的字符串加密法(hashing)。 echo() 輸出一個或多個字符串。 explode() 把字符串打散爲數組。 fprintf() 把格式化的字符串寫入到指定的輸出流。 get_html_translation_table() 返回 htmlspecialchars() 和 htmlentities() 使用的翻譯表。 hebrev() 把希伯來(Hebrew)文本轉換爲可見文本。 hebrevc() 把希伯來(Hebrew)文本轉換爲可見文本,並把新行(\n)轉換爲 <br>。 hex2bin() 把十六進制值的字符串轉換爲 ASCII 字符。 html_entity_decode() 把 HTML 實體轉換爲字符。 htmlentities() 把字符轉換爲 HTML 實體。 htmlspecialchars_decode() 把一些預約義的 HTML 實體轉換爲字符。 htmlspecialchars() 把一些預約義的字符轉換爲 HTML 實體。 implode() 返回一個由數組元素組合成的字符串。 join() implode() 的別名。 lcfirst() 把字符串中的首字符轉換爲小寫。 levenshtein() 返回兩個字符串之間的 Levenshtein 距離。 localeconv() 返回本地數字及貨幣格式信息。 ltrim() 移除字符串左側的空白字符或其餘字符。 md5() 計算字符串的 MD5 散列。 md5_file() 計算文件的 MD5 散列。 metaphone() 計算字符串的 metaphone 鍵。 money_format() 返回格式化爲貨幣字符串的字符串。 nl_langinfo() 返回指定的本地信息。 nl2br() 在字符串中的每一個新行以前插入 HTML 換行符。 number_format() 經過千位分組來格式化數字。 ord() 返回字符串中第一個字符的 ASCII 值。 parse_str() 把查詢字符串解析到變量中。 print() 輸出一個或多個字符串。 printf() 輸出格式化的字符串。 quoted_printable_decode() 把 quoted-printable 字符串轉換爲 8 位字符串。 quoted_printable_encode() 把 8 位字符串轉換爲 quoted-printable 字符串。 quotemeta() 引用元字符。 rtrim() 移除字符串右側的空白字符或其餘字符。 setlocale() 設置地區信息(地域信息)。 sha1() 計算字符串的 SHA-1 散列。 sha1_file() 計算文件的 SHA-1 散列。 similar_text() 計算兩個字符串的類似度。 soundex() 計算字符串的 soundex 鍵。 sprintf() 把格式化的字符串寫入一個變量中。 sscanf() 根據指定的格式解析來自一個字符串的輸入。 str_getcsv() 把 CSV 字符串解析到數組中。 str_ireplace() 替換字符串中的一些字符(大小寫不敏感)。 str_pad() 把字符串填充爲新的長度。 str_repeat() 把字符串重複指定的次數。 str_replace() 替換字符串中的一些字符(大小寫敏感)。 str_rot13() 對字符串執行 ROT13 編碼。 str_shuffle() 隨機地打亂字符串中的全部字符。 str_split() 把字符串分割到數組中。 str_word_count() 計算字符串中的單詞數。 strcasecmp() 比較兩個字符串(大小寫不敏感)。 strchr() 查找字符串在另外一字符串中的第一次出現。(strstr() 的別名。) strcmp() 比較兩個字符串(大小寫敏感)。 strcoll() 比較兩個字符串(根據本地設置)。 strcspn() 返回在找到任何指定的字符以前,在字符串查找的字符數。 strip_tags() 剝去字符串中的 HTML 和 PHP 標籤。 stripcslashes() 刪除由 addcslashes() 函數添加的反斜槓。 stripslashes() 刪除由 addslashes() 函數添加的反斜槓。 stripos() 返回字符串在另外一字符串中第一次出現的位置(大小寫不敏感)。 stristr() 查找字符串在另外一字符串中第一次出現的位置(大小寫不敏感)。 strlen() 返回字符串的長度。 strnatcasecmp() 使用一種"天然排序"算法來比較兩個字符串(大小寫不敏感)。 strnatcmp() 使用一種"天然排序"算法來比較兩個字符串(大小寫敏感)。 strncasecmp() 前 n 個字符的字符串比較(大小寫不敏感)。 strncmp() 前 n 個字符的字符串比較(大小寫敏感)。 strpbrk() 在字符串中搜索指定字符中的任意一個。 strpos() 返回字符串在另外一字符串中第一次出現的位置(大小寫敏感)。 strrchr() 查找字符串在另外一個字符串中最後一次出現。 strrev() 反轉字符串。 strripos() 查找字符串在另外一字符串中最後一次出現的位置(大小寫不敏感)。 strrpos() 查找字符串在另外一字符串中最後一次出現的位置(大小寫敏感)。 strspn() 返回在字符串中包含的特定字符的數目。 strstr() 查找字符串在另外一字符串中的第一次出現(大小寫敏感)。 strtok() 把字符串分割爲更小的字符串。 strtolower() 把字符串轉換爲小寫字母。 strtoupper() 把字符串轉換爲大寫字母。 strtr() 轉換字符串中特定的字符。 substr() 返回字符串的一部分。 substr_compare() 從指定的開始位置(二進制安全和選擇性區分大小寫)比較兩個字符串。 substr_count() 計算子串在字符串中出現的次數。 substr_replace() 把字符串的一部分替換爲另外一個字符串。 trim() 移除字符串兩側的空白字符和其餘字符。 ucfirst() 把字符串中的首字符轉換爲大寫。 ucwords() 把字符串中每一個單詞的首字符轉換爲大寫。 vfprintf() 把格式化的字符串寫到指定的輸出流。 vprintf() 輸出格式化的字符串。 vsprintf() 把格式化字符串寫入變量中。 wordwrap() 按照指定長度對字符串進行折行處理。
1 if (條件) 2 { 3 if 條件成立時執行的代碼; 4 } 5 else if (條件) 6 { 7 elseif 條件成立時執行的代碼; 8 } 9 else 10 { 11 條件不成立時執行的代碼; 12 }
1 <html> 2 <head></head> 3 <body> 4 5 <?php 6 $t=date("H"); 7 if ($t<"10") 8 { 9 echo "Have a good morning!"; 10 } 11 else if ($t<"20") 12 { 13 echo "Have a good day!"; 14 } 15 else 16 { 17 echo "Have a good night!"; 18 } 19 ?> 20 21 </body> 22 </html>
switch (n) { case label1: 若是 n=label1,此處代碼將執行; break; case label2: 若是 n=label2,此處代碼將執行; break; default: 若是 n 既不等於 label1 也不等於 label2,此處代碼將執行; }
1 <!DOCTYPE html> 2 <html> 3 <body> 4 5 <?php 6 $favcolor="red"; 7 switch ($favcolor) 8 { 9 case "red": 10 echo "Your favorite color is red!"; 11 break; 12 case "blue": 13 echo "Your favorite color is blue!"; 14 break; 15 case "green": 16 echo "Your favorite color is green!"; 17 break; 18 default: 19 echo "Your favorite color is neither red, blue, or green!"; 20 } 21 ?> 22 23 </body> 24 </html>
在 PHP 中,array() 函數用於建立數組。
在 PHP 中,有三種類型的數組:安全
數值數組 - 帶有數字 ID 鍵的數組 關聯數組 - 帶有指定的鍵的數組,每一個鍵關聯一個值 多維數組 - 包含一個或多個數組的數組
PHP 數值數組
1 這裏有兩種建立數值數組的方法: 2 自動分配 ID 鍵(ID 鍵老是從 0 開始): 3 $cars=array("Volvo","BMW","Toyota"); 4 人工分配 ID 鍵: 5 $cars[0]="Volvo"; 6 $cars[1]="BMW"; 7 $cars[2]="Toyota";
count() 函數用於返回數組的長度(元素的數量)。
PHP 關聯數組
關聯數組是使用您分配給數組的指定的鍵的數組。
1 這裏有兩種建立關聯數組的方法: 2 $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); 3 or: 4 $age['Peter']="35"; 5 $age['Ben']="37"; 6 $age['Joe']="43";
遍歷關聯數組:遍歷並打印關聯數組中的全部值,可使用 foreach 循環
1 <?php 2 $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); 3 4 foreach($age as $x=>$x_value) 5 { 6 echo "Key=" . $x . ", Value=" . $x_value; 7 echo "<br>"; 8 } 9 ?>
PHP 多維數組
多維數組是包含一個或多個數組的數組。在多維數組中,主數組中的每個元素也能夠是一個數組,子數組中的每個元素也能夠是一個數組。
$families = array ( "Griffin"=>array ( "Peter", "Lois", "Megan" ), "Quagmire"=>array ( "Glenn" ), "Brown"=>array ( "Cleveland", "Loretta", "Junior" ) ); 上面的數組將輸出以下: Array ( [Griffin] => Array ( [0] => Peter [1] => Lois [2] => Megan ) [Quagmire] => Array ( [0] => Glenn ) [Brown] => Array ( [0] => Cleveland [1] => Loretta [2] => Junior ) ) 讓咱們試着顯示上面數組中的某個值: echo "Is " . $families['Griffin'][2] . " a part of the Griffin family?"; 上面的代碼將輸出: Is Megan a part of the Griffin family?
1 sort() - 對數組進行升序排列 2 rsort() - 對數組進行降序排列 3 asort() - 根據關聯數組的值,對數組進行升序排列 4 ksort() - 根據關聯數組的鍵,對數組進行升序排列 5 arsort() - 根據關聯數組的值,對數組進行降序排列 6 krsort() - 根據關聯數組的鍵,對數組進行降序排列
超級全局變量在PHP 4.1.0以後被啓用, 是PHP系統中自帶的變量,在一個腳本的所有做用域中均可用。PHP中預約義了幾個超級全局變量(superglobals) ,這意味着它們在一個腳本的所有做用域中均可用,不須要特別說明,就能夠在函數及類中使用。
PHP 超級全局變量列表:
1 $GLOBALS 2 $_SERVER 3 $_REQUEST 4 $_POST 5 $_GET 6 $_FILES 7 $_ENV 8 $_COOKIE 9 $_SESSION
PHP $GLOBAL
$GLOBAL 是PHP的一個超級全局變量組,在一個PHP腳本的所有做用域中均可以訪問。
$GLOBAL 是一個包含了所有變量的全局組合數組。變量的名字就是數組的鍵。
PHP $_SERVER
$_SERVER 是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。這個數組中的項目由 Web 服務器建立。不能保證每一個服務器都提供所有項目;服務器可能會忽略一些,或者提供一些沒有在這裏列舉出來的項目。
下表列出了全部 $_SERVER 變量中的重要元素:
1 元素/代碼 描述 2 $_SERVER['PHP_SELF'] 當前執行腳本的文件名,與 document root 有關。例如,在地址爲 http://example.com/test.php/foo.bar 的腳本中使用 $_SERVER['PHP_SELF'] 將獲得 /test.php/foo.bar。__FILE__ 常量包含當前(例如包含)文件的完整路徑和文件名。 從 PHP 4.3.0 版本開始,若是 PHP 以命令行模式運行,這個變量將包含腳本名。以前的版本該變量不可用。 3 $_SERVER['GATEWAY_INTERFACE'] 服務器使用的 CGI 規範的版本;例如,"CGI/1.1"。 4 $_SERVER['SERVER_ADDR'] 當前運行腳本所在的服務器的 IP 地址。 5 $_SERVER['SERVER_NAME'] 當前運行腳本所在的服務器的主機名。若是腳本運行於虛擬主機中,該名稱是由那個虛擬主機所設置的值決定。(如: www.ziqiangxuetang.com) 6 $_SERVER['SERVER_SOFTWARE'] 服務器標識字符串,在響應請求時的頭信息中給出。 (如:Apache/2.2.24) 7 $_SERVER['SERVER_PROTOCOL'] 請求頁面時通訊協議的名稱和版本。例如,"HTTP/1.0"。 8 $_SERVER['REQUEST_METHOD'] 訪問頁面使用的請求方法;例如,"GET", "HEAD","POST","PUT"。 9 $_SERVER['REQUEST_TIME'] 請求開始時的時間戳。從 PHP 5.1.0 起可用。 (如:1377687496) 10 $_SERVER['QUERY_STRING'] query string(查詢字符串),若是有的話,經過它進行頁面訪問。 11 $_SERVER['HTTP_ACCEPT'] 當前請求頭中 Accept: 項的內容,若是存在的話。 12 $_SERVER['HTTP_ACCEPT_CHARSET'] 當前請求頭中 Accept-Charset: 項的內容,若是存在的話。例如:"iso-8859-1,*,utf-8"。 13 $_SERVER['HTTP_HOST'] 當前請求頭中 Host: 項的內容,若是存在的話。 14 $_SERVER['HTTP_REFERER'] 引導用戶代理到當前頁的前一頁的地址(若是存在)。由 user agent 設置決定。並非全部的用戶代理都會設置該項,有的還提供了修改 HTTP_REFERER 的功能。簡言之,該值並不可信。) 15 $_SERVER['HTTPS'] 若是腳本是經過 HTTPS 協議被訪問,則被設爲一個非空的值。 16 $_SERVER['REMOTE_ADDR'] 瀏覽當前頁面的用戶的 IP 地址。 17 $_SERVER['REMOTE_HOST'] 瀏覽當前頁面的用戶的主機名。DNS 反向解析不依賴於用戶的 REMOTE_ADDR。 18 $_SERVER['REMOTE_PORT'] 用戶機器上鍊接到 Web 服務器所使用的端口號。 19 $_SERVER['SCRIPT_FILENAME'] 當前執行腳本的絕對路徑。 20 $_SERVER['SERVER_ADMIN'] 該值指明瞭 Apache 服務器配置文件中的 SERVER_ADMIN 參數。若是腳本運行在一個虛擬主機上,則該值是那個虛擬主機的值。(如:someone@ziqiangxuetang.com) 21 $_SERVER['SERVER_PORT'] Web 服務器使用的端口。默認值爲 "80"。若是使用 SSL 安全鏈接,則這個值爲用戶設置的 HTTP 端口。 22 $_SERVER['SERVER_SIGNATURE'] 包含了服務器版本和虛擬主機名的字符串。 23 $_SERVER['PATH_TRANSLATED'] 當前腳本所在文件系統(非文檔根目錄)的基本路徑。這是在服務器進行虛擬到真實路徑的映像後的結果。 24 $_SERVER['SCRIPT_NAME'] 包含當前腳本的路徑。這在頁面須要指向本身時很是有用。__FILE__ 常量包含當前腳本(例如包含文件)的完整路徑和文件名。 25 $_SERVER['SCRIPT_URI'] URI 用來指定要訪問的頁面。例如 "/index.html"。
PHP $_REQUEST
PHP $_REQUEST 用於收集HTML表單提交的數據。
PHP $_POST
PHP $_POST 被普遍應用於收集表單數據,在HTML form標籤的指定該屬性:"method="post"。
PHP $_GET
PHP $_GET 一樣被普遍應用於收集表單數據,在HTML form標籤的指定該屬性:"method="get"。$_GET 也能夠收集URL中發送的數據。
1 語法: 2 function functionName() 3 { 4 要執行的代碼; 5 } 6 PHP 函數準則: 7 函數的名稱應該提示出它的功能 8 函數名稱以字母或下劃線開頭(不能以數字開頭) 9 PHP 函數 - 返回值 10 如需讓函數返回一個值,請使用 return 語句。
PHP 向它運行的任何腳本提供了大量的預約義常量。不過不少常量都是由不一樣的擴展庫定義的,只有在加載了這些擴展庫時纔會出現,或者動態加載後,或者在編譯時已經包括進去了。有八個魔術常量它們的值隨着它們在代碼中的位置改變而改變。這些特殊的常量不區分大小寫。
1 __LINE__:文件中的當前行號。 2 3 __FILE__:文件的完整路徑和文件名。若是用在被包含文件中,則返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 老是包含一個絕對路徑(若是是符號鏈接,則是解析後的絕對路徑),
而在此以前的版本有時會包含一個相對路徑。 4 5 __DIR__:文件所在的目錄。若是用在被包括文件中,則返回被包括的文件所在的目錄。它等價於 dirname(__FILE__)。除非是根目錄,不然目錄中名不包括末尾的斜槓。
(PHP 5.3.0中新增) 6 7 __FUNCTION__:函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。
在 PHP 4 中該值老是小寫字母的。 8 9 __CLASS__:類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值老是小寫字母的。
類名包括其被聲明的做用區域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 對 trait 也起做用。當用在 trait 方法中時,
__CLASS__ 是調用 trait 方法的類的名字。 10 11 __TRAIT__:Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 實現了代碼複用的一個方法,稱爲 traits。
Trait 名包括其被聲明的做用區域(例如 Foo\Bar)。從基類繼承的成員被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆蓋。
其行爲 MyHelloWorld 類中定義的方法一致。優先順序是當前類中的方法會覆蓋 trait 方法,而 trait 方法又覆蓋了基類中的方法。 12 13 <?php 14 class Base { 15 public function sayHello() { 16 echo 'Hello '; 17 } 18 } 19 20 trait SayWorld { 21 public function sayHello() { 22 parent::sayHello(); 23 echo 'World!'; 24 } 25 } 26 27 class MyHelloWorld extends Base { 28 use SayWorld; 29 } 30 31 $o = new MyHelloWorld(); 32 $o->sayHello(); 33 ?> 34 以上例程會輸出: 35 Hello World! 36 37 __METHOD__:類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。 38 39 __NAMESPACE__:當前命名空間的名稱(區分大小寫)。此常量是在編譯時定義的(PHP 5.3.0 新增)。
命名空間(namespace)是在PHP 5.3中加入的,在PHP當中仍是有着至關重要的意義。
PHP 命名空間能夠解決如下兩類問題:
用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字衝突。
爲很長的標識符名稱(一般是爲了緩解第一類問題而定義的)建立一個別名(或簡短)的名稱,提升源代碼的可讀性。
定義命名空間:默認狀況下,全部常量、類和函數名都放在全局空間下,就和PHP支持命名空間以前同樣。
命名空間經過關鍵字namespace 來聲明。若是一個文件中包含命名空間,它必須在其它全部代碼以前聲明命名空間。語法格式以下;
1 < ?php 2 // 定義代碼在 'MyProject' 命名空間中 3 namespace MyProject; 4 5 // ... 代碼 ... 6 7 你也能夠在同一個文件中定義不一樣的命名空間代碼,如: 8 9 < ?php 10 namespace MyProject1; 11 // MyProject1 命名空間中的PHP代碼 12 13 namespace MyProject2; 14 // MyProject2 命名空間中的PHP代碼 15 16 // 另外一種語法 17 namespace MyProject3 { 18 // MyProject3 命名空間中的PHP代碼 19 } 20 ?>
在聲明命名空間以前惟一合法的代碼是用於定義源文件編碼方式的 declare 語句。全部非 PHP 代碼包括空白符都不能出如今命名空間的聲明以前。
1 <?php 2 declare(encoding='UTF-8'); //定義多個命名空間和不包含在命名空間中的代碼 3 namespace MyProject { 4 5 const CONNECT_OK = 1; 6 class Connection { /* ... */ } 7 function connect() { /* ... */ } 8 } 9 10 namespace { // 全局代碼 11 session_start(); 12 $a = MyProject\connect(); 13 echo MyProject\Connection::start(); 14 } 15 ?>
如下代碼會出現語法錯誤:
1 <html> 2 <?php 3 namespace MyProject; // 命名空間前出現了「<html>」 會致命錯誤 - 命名空間必須是程序腳本的第一條語句 4 ?>
學習了PHP的基本語法,能夠看到語法和C語言特別的類似,可是仍是有一些細節上的東西是有很大區別的,最大的區別就是語言的特性,所用的地方,以及相應的庫函數,能夠看到PHP之因此強大,實際上是和它所內置的函數很是有關係的,而且還有很強的交互能力,經過對PHP的學習,咱們再次看到了HTML這種語法能夠包含的語言類型實在是太多了。