PHP基礎
Apache配置
安裝配置(這裡以2.4版本為例)
- 官網下載安裝包(若官網下載十分緩慢推薦地址:http://8dx.pc6.com/xjq6/ApacheHTTPServer2433.zip)
- 解壓到指定資料夾,修改配置檔案httpd.conf(路徑:conf --> httpd.conf)
- ServerRoot "你的安裝目錄" (注意:這裡路徑使用反斜槓
/
) - Listen 80 (若出現埠衝突則更改當前的埠號)
- ServerName 服務名稱 (localhost即可,埠可不帶)
- DocumentRoot "你的安裝目錄/htdocs" (htdos為你的網路資料夾名稱)
- <Directory "你的安裝目錄/htdocs">
- ServerRoot "你的安裝目錄" (注意:這裡路徑使用反斜槓
- 配置為系統服務
httpd.exe -k install
檢視當前使用模組
- 在bin目錄下使用
httpd.exe -M
檢視當前使用的模組- static:靜態載入(隨apache啟動載入,之後可以直接使用)
- share:動態載入(按需載入)
驗證配置檔案是否有效
- 在bin目錄下使用
httpd.exe -t
檢視當前使用的模組 Syntax OK
:可以使用(並非無任何異常)
配置預設站點
- 讓Apache確定伺服器上訪問的位置(也就是網路資料夾所在位置)
- 相關配置檔案:httpd.conf
- 相關配置檔案:httpd.conf
- 為方便使用為對應資料夾取別名
- 相關配置檔案:httpd.conf 中的 ServerName欄位(埠號可以在listen欄位中配置)
- 實現DNS域名解析(通常預設站點是本地DNS:host檔案)
- 修改本地DNS域名解析(本地host檔案路徑:C:\Windows\System32\drivers\etc)
Tip:凡是涉及到配置修改動作時,完成後務必檢查配置檔案是否有效,並重啟服務
Tip:一般預設的localhost對應的就是127.0.0.1
PHP配置
安裝配置(這裡以7.1.4版本為例)
-
預設apache是不能直接解析php檔案的,所以我們需要安裝php來解析php檔案
-
下載壓縮包檔案(若官網下載十分緩慢推薦地址:http://jvniu.jb51.net:81/201704/tools/php-7.1.4-Win32-VC14-x64.zip)
-
解壓到指定資料夾
-
複製一份檔案 php.ini-development ,並將其名稱改為 php.ini ,修改其配置
- extension_dir = "你的安裝路徑" (前面的分號去掉)
-
在apache中使用,修改apache中的配置檔案 httpd.conf(路徑:conf --> httpd.conf)
-
在末尾加上
LoadModule php7_module 你的php所在路徑/php7apache2_4.dll PHPIniDir "你的php所在路徑" AddType application/x-httpd-php .php .html .htm
-
-
在apache的 bin 目錄下使用
httpd.exe -t
驗證是否有誤(Syntax OK
可以使用) -
連線mysql,只需引入響應模組,也就是去除 extension=php_mysqli.dll 前的分號啟用
-
配置時區:date.timezone = PRC
虛擬主機
什麼是虛擬主機
- Virtual Machine,簡單的說就是並非真實存在的主機,但是可以實現真實主機的相應功能
- 通俗來說:虛擬主機就是將計算機中的不同資料夾進行不同的命名,然後可以實現讓伺服器(Apache)根據使用者的需求從不同的資料夾(網站)中讀取不同的內容。
- 在Apache中可以將虛擬主機分為兩類
- 基於IP的虛擬主機:也就是一臺電腦使用多個IP,每個IP對應一個網站
- 原理:一臺電腦配置多個網絡卡
- 基於域名的虛擬主機,單個IP製作多個網站,給每個網站不同的名字(虛擬主機名)
- 基於IP的虛擬主機:也就是一臺電腦使用多個IP,每個IP對應一個網站
PHP初識
初識
- PHP 是一種建立動態互動性站點的強有力的伺服器端指令碼語言。
- 可以嵌入到HTML中
- PHP(全稱:PHP:Hypertext Preprocessor,即"PHP:超文字前處理器")是一種通用開源指令碼語言。
- PHP 指令碼在伺服器上執行。
- PHP 可免費下載使用。
- PHP 是一門弱型別語言
PHP檔案
- PHP 檔案可包含文字、HTML、JavaScript程式碼和 PHP 程式碼
- PHP 程式碼在伺服器上執行,結果以純 HTML 形式返回給瀏覽器
- PHP 檔案的預設副檔名是 ".php"
PHP可以做什麼
- PHP 可以生成動態頁面內容
- PHP 可以建立、開啟、讀取、寫入、關閉伺服器上的檔案
- PHP 可以收集表單資料
- PHP 可以傳送和接收 cookies
- PHP 可以新增、刪除、修改您的資料庫中的資料
- PHP 可以限制使用者訪問您的網站上的一些頁面
- PHP 可以加密資料
PHP程式碼標記
- ASP標記(基本棄用):
<% php程式碼 %>
- 短標記(基本棄用):
<? php程式碼 ?>
- 指令碼標記:
<script language='php'> php程式碼 </script>
- 標準標記(常用):
<?php php程式碼 ?>
基礎語法
個人感覺程式語言總的來說都有一定的相似性,有過一門或者幾門程式語言的學習基礎的話,再接觸學習新語言就會快很多(這裡只是粗略整理PHP的相關知識)
規則
- PHP 中的每個程式碼行都必須以分號結束。分號是一種分隔符,用於把指令集區分開來。
- 可以省略末尾的
?>
,讓其自動判斷php程式碼的結束(避免產生較多空行)
註釋
- 單行註釋使用
// ···
- 多行註釋使用
/* ··· */
變數
- 變數是用於儲存資訊的"容器"
- 示例:
$x=5;
$z=$x+$y;
echo $z;
- 與代數類似,可以給 PHP 變數賦予某個值(x=5)或者表示式(z=x+y)。
- 變數可以是很短的名稱(如 x 和 y)或者更具描述性的名稱(如 age、carname、totalvolume)。
- PHP 變數規則:
- 變數以 $ 符號開始,後面跟著變數的名稱
- 變數名必須以字母或者下劃線字元開始
- 變數名只能包含字母數字字元以及下劃線(A-z、0-9 和 _ )
- 變數名不能包含空格
- 變數名是區分大小寫的($y 和 $Y 是兩個不同的變數)
- 刪除變數:
unset()
- 變數作用域
- local
- global
- static
- parameter
Tip:在所有函式外部定義的變數,擁有全域性作用域。除了函式外,全域性變數可以被指令碼中的任何部分訪問,要在一個函式中訪問一個全域性變數,需要使用 global 關鍵字。
Tip:在 PHP 函式內部宣告的變數是區域性變數,僅能在函式內部訪問
Tip:PHP 將所有全域性變數儲存在一個名為 $GLOBALS[index] 的陣列中。 index 儲存變數的名稱。這個陣列可以在函式內部訪問,也可以直接用來更新全域性變數。
Tip:當一個函式完成時,它的所有變數通常都會被刪除。若需要保留某區域性變數使用static
關鍵字
Tip:$a = 'b'; $b = 'bb'; $$a = 'bb'
Tip:引數是通過呼叫程式碼將值傳遞給函式的區域性變數。引數是在引數列表中宣告的,作為函式宣告的一部分
- 預定義變數
$_GET
獲取所有表單以get方式提交的資料$_POST
post方式提交的資料$_REQUEST
get和post方式提交的資料$_GLOBALS
所有全域性變數$_SERVER
伺服器資訊$_SESSION
session會話資料$_COOKIE
cookie會話資料$_ENV
環境資訊$_FILES
使用者上傳檔案資訊
變數傳值
-
瞭解記憶體
- 棧區:程式可以操作的記憶體部分(不存資料,執行程式程式碼),少但是快
- 程式碼區:儲存程式的記憶體部分(不執行)
- 資料段:儲存普通資料(全域性區和靜態區)
- 堆區:儲存複雜資料,大但是效率低
-
值傳遞
- 將變數儲存的值複製一份,然後將新的值傳遞給另外一個變數儲存(兩個變數相互獨立沒有關係)
- 示例:
$a = 1; $b = $a
- 程式碼裝載:從指令碼檔案中將程式碼讀取出來進行編譯,將編譯的結果放置在程式碼段(位元組碼)
- 程式碼執行:從程式碼段中按照一定的順序執行程式碼,執行
$a = 1
在棧區開闢一塊記憶體儲存$a
,在資料段中開闢一塊記憶體儲存值1
然後將其所在的記憶體位置賦給a
變數;執行$b = $a
在棧區開闢一塊記憶體儲存$b
,取出$a
的值將其儲存在資料段,將所在值的記憶體地址賦給$b
- 指令碼執行結束,系統會回收所佔有的記憶體(棧區、程式碼段)
-
引用傳遞
- 將變數儲存值的記憶體地址傳遞給另一個變數(兩個變數指向的是同一個值的記憶體地址)
- 示例:
$a = 1; $b = &$a
- 程式碼裝載:從指令碼檔案中將程式碼讀取出來進行編譯,將編譯的結果放置在程式碼段(位元組碼)
- 程式碼執行:從程式碼段中按照一定的順序執行程式碼,執行
$a = 1
在棧區開闢一塊記憶體儲存$a
,在資料段中開闢一塊記憶體儲存值1
然後將其所在的記憶體位置賦給a
變數;執行$b = &$a
,將$a
對應的值的記憶體地址賦給$b
- 指令碼執行結束,系統會回收所佔有的記憶體(棧區、程式碼段)
常量
- 常量值被定義後,在指令碼的其他任何地方都不能被改變。
- 常量是一個簡單值的識別符號。該值在指令碼中不能改變。
- 一個常量由英文字母、下劃線、和數字組成,但數字不能作為首字母出現。 (常量名不需要加 $ 修飾符)。
Tip: 常量在整個指令碼中都可以使用,預設為全域性變數。
-
設定常量,使用 define() 函式,語法:
define ( string $name , mixed $value [, bool $case_insensitive = false ] )
- 該函式有三個引數:
- name:必選引數,常量名稱,即標誌符。
- value:必選引數,常量的值。
- case_insensitive :可選引數,如果設定為 TRUE,該常量則大小寫不敏感。預設是大小寫敏感的。
- 示例:
define('PI', 3.14);
或者const PII = 3;
- 該函式有三個引數:
-
系統常量:簡要了解這裡不再贅述
-
幾個魔術常量:
-
__ DIR__:當前被執行指令碼所在絕對路徑
-
__ FILE__:當前被執行指令碼所在絕對路徑+當前檔名
-
__ LINK__:當前所屬行數
-
__ NAMESPACE__:當前所屬名稱空間
-
__ CLASS__:當前所屬類
-
__ METHOD__:當前所屬方法
-
資料型別
- 基本資料型別
- 整型:int/integer,系統分配四個位元組儲存,標識整數型別(有前提)
- 整數必須至少有一個數字 (0-9)
- 整數不能包含逗號或空格
- 整數是沒有小數點的
- 整數可以是正數或負數
- 整型可以用四種格式來指定:十進位制, 十六進位制( 字首0x )、八進位制(字首為 0)、二進位制(字首0b)。
- 浮點型:float/double,系統分配八個位元組儲存,表示小數或者整型存不下的整數(不能儲存精確數值)
- 浮點數是帶小數部分的數字,或是指數形式
- 字串:string,系統根據實際長度分配,表示字串(引號包裹)
- 布林值:bool/Boolean,true或者false
- 整型:int/integer,系統分配四個位元組儲存,標識整數型別(有前提)
Tip:預設PHP輸出數值都會轉換為十進位制輸出,但是提供了進位制轉換的一些函式
- 複合資料型別
- 物件型別:object,存放物件
- 陣列型別:array,存放多個數據
- 特殊資料型別
- 資源型別:resource,存放資源資料(PHP外部資料)
- 空型別:NULL(不能運算)
- 可以通過設定變數值為 NULL 來清空變數資料
型別轉換
- 自動轉換:系統根據自身的需求自己判定,自動轉換
- 強制轉換:根據自己所需的型別將目標資料轉換
- 函式比較
表示式 | gettype() | empty() | is_null() | isset() | boolean : if($x) |
---|---|---|---|---|---|
$x = ""; | string | TRUE |
FALSE |
TRUE |
FALSE |
$x = null; | NULL | TRUE |
TRUE |
FALSE |
FALSE |
var $x; | NULL | TRUE |
TRUE |
FALSE |
FALSE |
$x is undefined | NULL | TRUE |
TRUE |
FALSE |
FALSE |
$x = array(); | array | TRUE |
FALSE |
TRUE |
FALSE |
$x = false; | boolean | TRUE |
FALSE |
TRUE |
FALSE |
$x = true; | boolean | FALSE |
FALSE |
TRUE |
TRUE |
$x = 1; | integer | FALSE |
FALSE |
TRUE |
TRUE |
$x = 42; | integer | FALSE |
FALSE |
TRUE |
TRUE |
$x = 0; | integer | TRUE |
FALSE |
TRUE |
FALSE |
$x = -1; | integer | FALSE |
FALSE |
TRUE |
TRUE |
$x = "1"; | string | FALSE |
FALSE |
TRUE |
TRUE |
$x = "0"; | string | TRUE |
FALSE |
TRUE |
FALSE |
$x = "-1"; | string | FALSE |
FALSE |
TRUE |
TRUE |
$x = "php"; | string | FALSE |
FALSE |
TRUE |
TRUE |
$x = "true"; | string | FALSE |
FALSE |
TRUE |
TRUE |
$x = "false"; | string | FALSE |
FALSE |
TRUE |
TRUE |
- 鬆散比較
==
TRUE |
FALSE |
1 | 0 | -1 | "1" | "0" | "-1" | NULL |
array() | "php" | "" | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
TRUE |
TRUE |
FALSE |
TRUE |
FALSE |
TRUE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
TRUE |
TRUE |
FALSE |
TRUE |
1 | TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
0 | FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
TRUE |
TRUE |
-1 | TRUE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
"1" | TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
"0" | FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
"-1" | TRUE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
NULL |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
TRUE |
FALSE |
TRUE |
array() | FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
TRUE |
FALSE |
FALSE |
"php" | TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
"" | FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
- 嚴格比較
===
TRUE |
FALSE |
1 | 0 | -1 | "1" | "0" | "-1" | NULL |
array() | "php" | "" | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
TRUE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
1 | FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
0 | FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
-1 | FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
"1" | FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
"0" | FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
"-1" | FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
NULL |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
array() | FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
"php" | FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
"" | FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
- 強制型別轉換:
(資料型別)需要轉換的資料或者變數
,示例:$a = '1.1.1abc'; echo (float)$a
- 轉換為NULL使用
(unset)$a
- 轉換為NULL使用
is_type()
:返回一個布林值,用於檢視指定資料是否為某型別的資料(bool型別不能使用echo
檢視,需要使用var_dump
)gettype(變數名)
:獲取型別,得到的是該型別對應的字串settype(變數名,型別)
:設定變數的型別empty()
:判斷資料是否為空(並非NULL),為空返回true,否則返回falseisset()
:判斷資料儲存的變數本身是否存在,存在返回true,否則返回false
運算子
-
算術運算子
運算子 名稱 描述 例項 結果 x + y 加 x 和 y 的和 2 + 2 4 x - y 減 x 和 y 的差 5 - 2 3 x * y 乘 x 和 y 的積 5 * 2 10 x / y 除 x 和 y 的商 15 / 5 3 x % y 模(除法的餘數) x 除以 y 的餘數 5 % 2 10 % 8 10 % 2 1 2 0 - x 取反 x 取反 <?php $x =2; echo -$x; ?>
-2 a . b 並置 連線兩個字串 "Hi" . "Ha" HiHa - PHP7+ 版本新增整除運算子 intdiv()
-
賦值運算子
運算子 等同於 描述 x = y x = y 左運算元被設定為右側表示式的值 x += y x = x + y 加 x -= y x = x - y 減 x *= y x = x * y 乘 x /= y x = x / y 除 x %= y x = x % y 模(除法的餘數) a .= b a = a . b 連線兩個字串 -
遞增遞減運算子
運算子 名稱 描述 ++ x 預遞增 x 加 1,然後返回 x x ++ 後遞增 返回 x,然後 x 加 1 -- x 預遞減 x 減 1,然後返回 x x -- 後遞減 返回 x,然後 x 減 1 - 使用時注意!
$a = 1;
$b = $a++; // $b = 1
,$c = ++$a; // $c = 3
- 使用時注意!
-
比較運算子
運算子 名稱 描述 例項 x == y 等於 如果 x 等於 y,則返回 true 5==8 返回 false x === y 絕對等於 如果 x 等於 y,且它們型別相同,則返回 true 5==="5" 返回 false x != y 不等於 如果 x 不等於 y,則返回 true 5!=8 返回 true x <> y 不等於 如果 x 不等於 y,則返回 true 5<>8 返回 true x !== y 絕對不等於 如果 x 不等於 y,或它們型別不相同,則返回 true 5!=="5" 返回 true x > y 大於 如果 x 大於 y,則返回 true 5>8 返回 false x < y 小於 如果 x 小於 y,則返回 true 5<8 返回 true x >= y 大於等於 如果 x 大於或者等於 y,則返回 true 5>=8 返回 false x <= y 小於等於 如果 x 小於或者等於 y,則返回 true 5<=8 返回 true -
邏輯運算子
運算子 名稱 描述 例項 x and y 與 如果 x 和 y 都為 true,則返回 true x=6 y=3 (x < 10 and y > 1) 返回 true x or y 或 如果 x 和 y 至少有一個為 true,則返回 true x=6 y=3 (x6 or y5) 返回 true x xor y 異或 如果 x 和 y 有且僅有一個為 true,則返回 true x=6 y=3 (x6 xor y3) 返回 false x && y 與 如果 x 和 y 都為 true,則返回 true x=6 y=3 (x < 10 && y > 1) 返回 true x || y 或 如果 x 和 y 至少有一個為 true,則返回 true x=6 y=3 (x5 || y5) 返回 false ! x 非 如果 x 不為 true,則返回 true x=6 y=3 !(x==y) 返回 true -
陣列運算子
運算子 名稱 描述 x + y 集合 x 和 y 的集合 x == y 相等 如果 x 和 y 具有相同的鍵/值對,則返回 true x === y 恆等 如果 x 和 y 具有相同的鍵/值對,且順序相同型別相同,則返回 true x != y 不相等 如果 x 不等於 y,則返回 true x <> y 不相等 如果 x 不等於 y,則返回 true x !== y 不恆等 如果 x 不等於 y,則返回 true -
位運算子
例子 名稱 結果 $a & $b
And(按位與) 將把 $a 和 $b 中都為 1 的位設為 1。 $a | $b
Or(按位或) 將把 $a 和 $b 中任何一個為 1 的位設為 1。 $a ^ $b
Xor(按位異或) 將把 $a 和 $b 中一個為 1 另一個為 0 的位設為 1。 ~ $a
Not(按位取反) 將 $a 中為 0 的位設為 1,反之亦然。 $a << $b
Shift left(左移) 將 a 中的位向左移動 b 次(每一次移動都表示“乘以 2”)。 $a >> $b
Shift right(右移) 將 a 中的位向右移動 b 次(每一次移動都表示“除以 2”)。 -
三元運算子:
(expr1) ? (expr2) : (expr3)
- 對 expr1 求值為 TRUE 時的值為 expr2,在 expr1 求值為 FALSE 時的值為 expr3。
- 自 PHP 5.3 起,可以省略三元運算子中間那部分。表示式 expr1 ?: expr3 在 expr1 求值為 TRUE 時返回 expr1,否則返回 expr3。
($b) ? $c = 1 : $c = 0;
等價於$c = ($b) ? 1 : 0;
Tip:PHP_EOL 是一個換行符,相容更大平臺。
-
組合比較符
- PHP7+ 支援組合比較符(combined comparison operator)也稱之為太空船操作符,符號為 <=>。組合比較運算子可以輕鬆實現兩個變數的比較,當然不僅限於數值類資料的比較。
- 語法格式:
$c = $a <=> $b;
- 如果 $a > $b, 則 $c 的值為 1。
- 如果 $a == $b, 則 $c 的值為 0。
- 如果 $a < $b, 則 $c 的值為 -1
-
運算子優先順序
- 下表按照優先順序從高到低列出了運算子。同一行中的運算子具有相同優先順序,此時它們的結合方向決定求值順序。
結合方向 運算子 附加資訊 無 clone new clone 和 new 左 [ array() 右 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ 型別和遞增/遞減 無 instanceof 型別 右 ! 邏輯運算子 左 * / % 算術運算子 左 + – . 算術運算子和字串運算子 左 << >> 位運算子 無 == != === !== <> 比較運算子 左 & 位運算子和引用 左 ^ 位運算子 左 | 位運算子 左 && 邏輯運算子 左 || 邏輯運算子 左 ? : 三元運算子 右 = += -= *= /= .= %= &= |= ^= <<= >>= => 賦值運算子 左 and 邏輯運算子 左 xor 邏輯運算子 左 or 邏輯運算子 左 , 多處用到
Tip:我們通過括號的配對來明確標明運算順序,而非靠運算子優先順序和結合性來決定,通常能夠增加程式碼的可讀性。
Tip:錯誤抑制符@
:在可能發生錯誤的程式碼前使用該符號並將其使用括號包裹
If···Else語句
-
條件語句用於根據不同條件執行不同動作。
-
if 語句 - 在條件成立時執行程式碼
-
if...else 語句 - 在條件成立時執行一塊程式碼,條件不成立時執行另一塊程式碼
-
if...elseif....else 語句 - 在若干條件之一成立時執行一個程式碼塊
-
if 語句用於僅當指定條件成立時執行程式碼。
-
語法示例:
if (條件) { 條件成立時要執行的程式碼; }
-
-
在條件成立時執行一塊程式碼,條件不成立時執行另一塊程式碼,請使用 if....else 語句。
-
語法示例:
if (條件) { 條件成立時執行的程式碼; } else { 條件不成立時執行的程式碼; }
-
-
在若干條件之一成立時執行一個程式碼塊,請使用 if....elseif...else 語句。
-
示例語法:
if (條件) { if 條件成立時執行的程式碼; } elseif (條件) { elseif 條件成立時執行的程式碼; } else { 條件不成立時執行的程式碼; }
-
Switch語句
-
switch 語句用於根據多個不同條件執行不同動作。
-
希望有選擇地執行若干程式碼塊之一,請使用 switch 語句。
-
語法示例:
switch (n) { case label1: 如果 n=label1,此處程式碼將執行; break; case label2: 如果 n=label2,此處程式碼將執行; break; default: 如果 n 既不等於 label1 也不等於 label2,此處程式碼將執行; }
-
工作原理:首先對一個簡單的表示式 n(通常是變數)進行一次計算。將表示式的值與結構中每個 case 的值進行比較。如果存在匹配,則執行與 case 關聯的程式碼。程式碼執行後,使用 break 來阻止程式碼跳入下一個 case 中繼續執行。default 語句用於不存在匹配(即沒有 case 為真)時執行。
-
For迴圈
-
迴圈執行程式碼塊指定的次數,或者當指定的條件為真時迴圈執行程式碼塊。
-
語法示例:
for (初始值; 條件; 增量) { 要執行的程式碼; }
- 引數:
- 初始值:主要是初始化一個變數值,用於設定一個計數器(但可以是任何在迴圈的開始被執行一次的程式碼)。
- 條件:迴圈執行的限制條件。如果為 TRUE,則迴圈繼續。如果為 FALSE,則迴圈結束。
- 增量:主要用於遞增計數器(但可以是任何在迴圈的結束被執行的程式碼)。
- 引數:
While迴圈
-
while 迴圈將重複執行程式碼塊,直到指定的條件不成立。
-
語法示例:
while (條件) { 要執行的程式碼; }
-
do...while 語句會至少執行一次程式碼,然後檢查條件,只要條件成立,就會重複進行迴圈。
-
語法示例:
do { 要執行的程式碼; } while (條件);
Tip:continue在迴圈結構中使用會跳過再次之後的程式碼進行新一輪迴圈
Tip:break在迴圈結構中使用會結束迴圈
在HTML中的巢狀寫法
-
示例程式碼,九九乘法表
<table> <?php for($i=1; $i<10; $i++){ ?> <tr> <?php for($j=1; $j<=$i; $j++){ ?> <td class="addBorder"> <?php echo $i.'*'.$j.'='.$i*$j; ?> </td> <?php }?> </tr> <?php }?> </table>
Echo和Print
-
在 PHP 中有兩個基本的輸出方式: echo 和 print。
-
echo 和 print 區別:
- echo - 可以輸出一個或多個字串
- print - 只允許輸出一個字串,返回值總為 1
-
echo 是一個語言結構,使用的時候可以不用加括號,也可以加上括號: echo 或 echo()。
Tip:echo 輸出的速度比 print 快, echo 沒有返回值,print有返回值1。
- print 同樣是一個語言結構,可以使用括號,也可以不使用括號: print 或 print()。
Tip:在print輸出的字串中同時輸出變數,該變數需要使用{}
包裹
時間相關函式
-
date()
:可把時間戳格式化為可讀性更好的日期和時間。 -
語法:
string date ( string $format [, int $timestamp ] )
- date() 函式的第一個必需引數 format 規定了如何格式化日期/時間。
- d - 代表月中的天 (01 - 31)
- m - 代表月 (01 - 12)
- Y - 代表年 (四位數)
- date() 函式的第一個必需引數 format 規定了如何格式化日期/時間。
-
示例:
date("Y/m/d")
-
參考
format
字元說明 返回值例子 日 --- --- d 月份中的第幾天,有前導零的 2 位數字 01 到 31 D 星期中的第幾天,文字表示,3 個字母 Mon 到 Sun j 月份中的第幾天,沒有前導零 1 到 31 l("L"的小寫字母) 星期幾,完整的文字格式 Sunday 到 Saturday N ISO-8601 格式數字表示的星期中的第幾天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天) S 每月天數後面的英文字尾,2 個字元 st,nd,rd 或者 th。可以和 j 一起用 w 星期中的第幾天,數字表示 0(表示星期天)到 6(表示星期六) z 年份中的第幾天 0 到 365 星期 --- --- W ISO-8601 格式年份中的第幾周,每週從星期一開始(PHP 4.1.0 新加的) 例如:42(當年的第 42 周) 月 --- --- F 月份,完整的文字格式,例如 January 或者 March January 到 December m 數字表示的月份,有前導零 01 到 12 M 三個字母縮寫表示的月份 Jan 到 Dec n 數字表示的月份,沒有前導零 1 到 12 t 給定月份所應有的天數 28 到 31 年 --- --- L 是否為閏年 如果是閏年為 1,否則為 0 o ISO-8601 格式年份數字。這和 Y 的值相同,只除了如果 ISO 的星期數(W)屬於前一年或下一年,則用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003 Y 4 位數字完整表示的年份 例如:1999 或 2003 y 2 位數字表示的年份 例如:99 或 03 時間 --- --- a 小寫的上午和下午值 am 或 pm A 大寫的上午和下午值 AM 或 PM B Swatch Internet 標準時 000 到 999 g 小時,12 小時格式,沒有前導零 1 到 12 G 小時,24 小時格式,沒有前導零 0 到 23 h 小時,12 小時格式,有前導零 01 到 12 H 小時,24 小時格式,有前導零 00 到 23 i 有前導零的分鐘數 00 到 59> s 秒數,有前導零 00 到 59> u 毫秒 (PHP 5.2.2 新加)。需要注意的是 date() 函式總是返回 000000 因為它只接受 integer 引數, 而 DateTime::format() 才支援毫秒。 示例: 654321 時區 --- --- e 時區標識(PHP 5.1.0 新加) 例如:UTC,GMT,Atlantic/Azores I 是否為夏令時 如果是夏令時為 1,否則為 0 O 與格林威治時間相差的小時數 例如:+0200 P 與格林威治時間(GMT)的差別,小時和分鐘之間有冒號分隔(PHP 5.1.3 新加) 例如:+02:00 T 本機所在的時區 例如:EST,MDT(【譯者注】在 Windows 下為完整文字格式,例如"Eastern Standard Time",中文版會顯示"中國標準時間")。 Z 時差偏移量的秒數。UTC 西邊的時區偏移量總是負的,UTC 東邊的時區偏移量總是正的。 -43200 到 43200 完整的日期/時間 --- --- c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00 r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200 U 從 Unix 紀元(January 1 1970 00:00:00 GMT)開始至今的秒數 參見 time() -
time()
:返回自 Unix 紀元(January 1 1970 00:00:00 GMT)起的當前時間的秒數 -
microtime()
:獲取微秒級別的時間
陣列
-
陣列是一個能在單個變數中儲存多個值的特殊變數。
-
array() 函式用於建立陣列
-
在 PHP 中,有三種類型的陣列:
- 數值陣列 - 帶有數字 ID 鍵的陣列
- 關聯陣列 - 帶有指定的鍵的陣列,每個鍵關聯一個值
- 多維陣列 - 包含一個或多個數組的陣列
-
數值陣列
- 示例:
$a = array('Tom', 'Jack', 'Alice'); echo $a[0], $a[1], $a[2];
- 示例2:
$a[] = 1
- 獲取陣列長度
count()
- 示例:
-
關聯陣列
-
關聯陣列是使用您分配給陣列的指定的鍵的陣列。
-
示例:
$a = array('name'=>'Tom', 'age'=>12, 'id'=>001);
$a['mark'] = true;
echo $a['name'];
-
遍歷關聯陣列
foreach($a as $x=>$x_value) { echo $x.'對應值為:'.$x_value; echo '<br />'; }
-
-
常用函式
-
list()
函式用於在一次操作中給一組變數賦值。(只用於數字索引的陣列。)- 語法:
list(*var1,var2...*)
引數 描述 var1 必需。第一個需要賦值的變數。 var2,... 可選。更多需要賦值的變數。 - 語法:
-
reset()
函式將內部指標指向陣列中的第一個元素,並輸出。- 相關的方法:
- current() - 返回陣列中的當前元素的值。
- end() - 將內部指標指向陣列中的最後一個元素,並輸出。
- next() - 將內部指標指向陣列中的下一個元素,並輸出。
- prev() - 將內部指標指向陣列中的上一個元素,並輸出。
- 語法:
reset(*array*)
- 相關的方法:
-
count()
函式返回陣列中元素的數目。- 語法:
count(*array,mode*);
引數 描述 array 必需。規定要計數的陣列。 mode 可選。規定函式的模式。可能的值:0 - 預設。不計算多維陣列中的所有元素。1 - 遞迴地計算陣列中元素的數目(計算多維陣列中的所有元素)。 - 語法:
-
array_push()
函式向陣列尾部插入一個或多個元素。- 語法:
array_push(*array,value1,value2...*)
引數 描述 array 必需。規定一個數組。 value1 必需。規定要新增的值。 value2 可選。規定要新增的值。 - 語法:
-
array_pop()
函式刪除陣列中的最後一個元素。- 語法:
array_pop(*array*)
- 語法:
-
array_shift()
函式用於刪除陣列中的第一個元素,並返回被刪除的元素。 -
array_unshift()
函式用於向陣列插入新元素。新陣列的值將被插入到陣列的開頭。- 語法:
array_unshift(*array,value1,value2,value3...*)
引數 描述 array 必需。規定陣列。 value1 必需。規定插入的值。 value2 可選。規定插入的值。 value3 可選。規定插入的值。 - 語法:
-
array_unique()
函式用於移除陣列中重複的值。如果兩個或更多個數組值相同,只保留第一個值,其他的值被移除。- 語法:
array_unique(*array*)
引數 描述 array 必需。規定陣列。 sortingtype 可選。規定排序型別。可能的值:SORT_STRING - 預設。把每一項作為字串來處理。SORT_REGULAR - 把每一項按常規順序排列(Standard ASCII,不改變型別)。SORT_NUMERIC - 把每一項作為數字來處理。SORT_LOCALE_STRING - 把每一項作為字串來處理,基於當前區域設定(可通過 setlocale() 進行更改)。 - 語法:
-
in_array()
函式搜尋陣列中是否存在指定的值。- 語法:
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
引數 描述 needle 必需。規定要在陣列搜尋的值。 haystack 必需。規定要搜尋的陣列。 strict 可選。如果該引數設定為 TRUE,則 in_array() 函式檢查搜尋的資料與陣列的值的型別是否相同。 - 語法:
-
array_keys()
函式返回包含陣列中所有鍵名的一個新陣列。- 語法:
array_keys(*array,value,strict*)
引數 描述 array 必需。規定陣列。 value 可選。您可以指定鍵值,然後只有該鍵值對應的鍵名會被返回。 strict 可選。與 value 引數一起使用。可能的值:true - 返回帶有指定鍵值的鍵名。依賴型別,數字 5 與字串 "5" 是不同的。false - 預設值。不依賴型別,數字 5 與字串 "5" 是相同的。 - 語法:
-
array_values()
函式返回包含陣列中所有的值的陣列。
-
-
陣列排序函式總結:
sort()
- 對陣列進行升序排列rsort()
- 對陣列進行降序排列asort()
- 根據關聯陣列的值,對陣列進行升序排列ksort()
- 根據關聯陣列的鍵,對陣列進行升序排列arsort()
- 根據關聯陣列的值,對陣列進行降序排列krsort()
- 根據關聯陣列的鍵,對陣列進行降序排列
-
參考
函式 描述 array() 建立陣列。 array_change_key_case() 返回其鍵均為大寫或小寫的陣列。 array_chunk() 把一個數組分割為新的陣列塊。 array_column() 返回輸入陣列中某個單一列的值。 array_combine() 通過合併兩個陣列(一個為鍵名陣列,一個為鍵值陣列)來建立一個新陣列。 array_count_values() 用於統計陣列中所有值出現的次數。 array_diff() 比較陣列,返回兩個陣列的差集(只比較鍵值)。 array_diff_assoc() 比較陣列,返回兩個陣列的差集(比較鍵名和鍵值)。 array_diff_key() 比較陣列,返回兩個陣列的差集(只比較鍵名)。 array_diff_uassoc() 比較陣列,返回兩個陣列的差集(比較鍵名和鍵值,使用使用者自定義的鍵名比較函式)。 array_diff_ukey() 比較陣列,返回兩個陣列的差集(只比較鍵名,使用使用者自定義的鍵名比較函式)。 array_fill() 用給定的鍵值填充陣列。 array_fill_keys() 用給定的指定鍵名的鍵值填充陣列。 array_filter() 用回撥函式過濾陣列中的元素。 array_flip() 反轉/交換陣列中的鍵名和對應關聯的鍵值。 array_intersect() 比較陣列,返回兩個陣列的交集(只比較鍵值)。 array_intersect_assoc() 比較陣列,返回兩個陣列的交集(比較鍵名和鍵值)。 array_intersect_key() 比較陣列,返回兩個陣列的交集(只比較鍵名)。 array_intersect_uassoc() 比較陣列,返回兩個陣列的交集(比較鍵名和鍵值,使用使用者自定義的鍵名比較函式)。 array_intersect_ukey() 比較陣列,返回兩個陣列的交集(只比較鍵名,使用使用者自定義的鍵名比較函式)。 array_key_exists() 檢查指定的鍵名是否存在於陣列中。 array_keys() 返回陣列中所有的鍵名。 array_map() 將使用者自定義函式作用到給定陣列的每個值上,返回新的值。 array_merge() 把一個或多個數組合併為一個數組。 array_merge_recursive() 遞迴地把一個或多個數組合併為一個數組。 array_multisort() 對多個數組或多維陣列進行排序。 array_pad() 將指定數量的帶有指定值的元素插入到陣列中。 array_pop() 刪除陣列中的最後一個元素(出棧)。 array_product() 計算陣列中所有值的乘積。 array_push() 將一個或多個元素插入陣列的末尾(入棧)。 array_rand() 從陣列中隨機選出一個或多個元素,返回鍵名。 array_reduce() 通過使用使用者自定義函式,迭代地將陣列簡化為一個字串,並返回。 array_replace() 使用後面陣列的值替換第一個陣列的值。 array_replace_recursive() 遞迴地使用後面陣列的值替換第一個陣列的值。 array_reverse() 將原陣列中的元素順序翻轉,建立新的陣列並返回。 array_search() 在陣列中搜索給定的值,如果成功則返回相應的鍵名。 array_shift() 刪除陣列中的第一個元素,並返回被刪除元素的值。 array_slice() 返回陣列中的選定部分。 array_splice() 把陣列中的指定元素去掉並用其它值取代。 array_sum() 返回陣列中所有值的和。 array_udiff() 比較陣列,返回兩個陣列的差集(只比較鍵值,使用一個使用者自定義的鍵名比較函式)。 array_udiff_assoc() 比較陣列,返回兩個陣列的差集(比較鍵名和鍵值,使用內建函式比較鍵名,使用使用者自定義函式比較鍵值)。 array_udiff_uassoc() 比較陣列,返回兩個陣列的差集(比較鍵名和鍵值,使用兩個使用者自定義的鍵名比較函式)。 array_uintersect() 比較陣列,返回兩個陣列的交集(只比較鍵值,使用一個使用者自定義的鍵名比較函式)。 array_uintersect_assoc() 比較陣列,返回兩個陣列的交集(比較鍵名和鍵值,使用內建函式比較鍵名,使用使用者自定義函式比較鍵值)。 array_uintersect_uassoc() 比較陣列,返回兩個陣列的交集(比較鍵名和鍵值,使用兩個使用者自定義的鍵名比較函式)。 array_unique() 刪除陣列中重複的值。 array_unshift() 在陣列開頭插入一個或多個元素。 array_values() 返回陣列中所有的值。 array_walk() 對陣列中的每個成員應用使用者函式。 array_walk_recursive() 對陣列中的每個成員遞迴地應用使用者函式。 arsort() 對關聯陣列按照鍵值進行降序排序。 asort() 對關聯陣列按照鍵值進行升序排序。 compact() 建立一個包含變數名和它們的值的陣列。 count() 返回陣列中元素的數目。 current() 返回陣列中的當前元素。 each() 返回陣列中當前的鍵/值對。 end() 將陣列的內部指標指向最後一個元素。 extract() 從陣列中將變數匯入到當前的符號表。 in_array() 檢查陣列中是否存在指定的值。 key() 從關聯陣列中取得鍵名。 krsort() 對關聯陣列按照鍵名降序排序。 ksort() 對關聯陣列按照鍵名升序排序。 list() 把陣列中的值賦給一些陣列變數。 natcasesort() 用"自然排序"演算法對陣列進行不區分大小寫字母的排序。 natsort() 用"自然排序"演算法對陣列排序。 next() 將陣列中的內部指標向後移動一位。 pos() current() 的別名。 prev() 將陣列的內部指標倒回一位。 range() 建立一個包含指定範圍的元素的陣列。 reset() 將陣列的內部指標指向第一個元素。 rsort() 對數值陣列進行降序排序。 shuffle() 把陣列中的元素按隨機順序重新排列。 sizeof() count() 的別名。 sort() 對數值陣列進行升序排序。 uasort() 使用使用者自定義的比較函式對陣列中的鍵值進行排序。 uksort() 使用使用者自定義的比較函式對陣列中的鍵名進行排序。 usort() 使用使用者自定義的比較函式對陣列進行排序。
函式
-
建立函式
function functionName($a, $b, ···) { // 要執行的程式碼 }
- PHP 函式準則:
- 函式的名稱應該提示出它的功能
- 函式名稱以字母或下劃線開頭(不能以數字開頭)
- 引數就在函式名稱後面的一個括號內指定。
- 可以通過return關鍵字讓函式返回一個值
- 可以在指定形參的時候為其賦一個初始值(指定初始值的引數需放在最後)
- PHP 函式準則:
Tip:若在形參前加上&
意為將傳入實參的記憶體地址賦值給該形參(注意!此時形參對應的是真實的實引數據,且只有變數能夠被引用傳值)
-
可變函式:當一個變數所儲存的值剛好是一個函式的名字,那麼就可以使用
該變數名()
的方式來呼叫對應的函式 -
示例
$a = 'fun1'; function fun1() { echo __FUNCTION__; } fun1(); $a();
Tip:將一個函式(函式名)作為引數傳遞給另一個函式區呼叫稱之為回撥過程,該函式被稱之為回撥函式
-
匿名函式:
$a = function(){···};
,呼叫方法同可變函式 -
閉包closure:要執行的程式碼塊(由於自由變數被包含在程式碼塊中,這些自由變數以及他們引用的物件沒有被釋放)和為自由變數提供繫結的計算環境(作用域)
-
簡單理解:函式內部有一些區域性變數(要執行的程式碼塊)在函式執行完畢後沒有被釋放,是因為在函式內部還有對應的函式在引用(匿名函式)
-
示例:
// use將外部的變數(區域性)保留給內部使用。注意!貌似不同於python和JavaScript function fun1() { $a = 1; $b = function() use($a) { echo $a; }; return $b; } $closureVar = fun1(); $closureVar();
-
錯誤
- 錯誤分類
- 語法錯誤:書寫的程式碼不符合PHP規範,編譯不通過,程式碼不會執行(Paesr error)
- 執行時錯誤:程式碼編譯通過,但是在執行的時候會出現一些條件不滿足導致的錯誤(Runtime error)
- 邏輯錯誤:程式碼不規範,出現一些邏輯性的錯誤,程式碼正常執行,但是得到的是錯誤的結果
- 錯誤代號
- E_PARSE:編譯錯誤,程式碼不會執行
- E_ERROR:fatal error,致命錯誤,會導致程式碼不能正確繼續執行(會在出錯誤的位置停止)
- E_WARNING:警告,不會影響程式碼的執行,但是可能得不到正確的結果
- E_NOTICE:提示通知,不會影響程式碼的執行
- 主動觸發錯誤
trigger_error(提示資訊)
字串
-
可以使用單引號或者雙引號來定義一個字串
- 雙引號中可以使用
$
字首來輸出變數(變數字元末尾需要新增空格與內容區分),或者使用{}
包裹
- 雙引號中可以使用
-
結構化定義(保留當前字串的格式)
$a = <<<EOD // heredoc結構,上邊界符後必須沒有任何內容,下邊界符必須頂格 hello EOD; $b = <<<'EOD' // nowdoc結構 PHP EOD;
-
字串轉義
\'
\''
\r
回車(回到行首)\n
新一行\t
類似tab,輸出4個空格\$
特定識別變數符號
Tip:在單雙引號中所能識別的轉義字元不同
-
獲取字串長度
strlen()
,按照標準字符集統計(若需要指定特殊的字符集統需要使用mbstring模組) -
相關常用函式
-
implode()
函式返回一個由陣列元素組合成的字串。- 語法:
implode(*separator,array)
引數 描述 separator 可選(但是推薦使用)。規定陣列元素之間放置的內容。預設是 ""(空字串)。 array 必需。要組合為字串的陣列。 - 語法:
-
explode()
函式使用一個字串分割另一個字串,並返回由字串組成的陣列。- 語法:
explode(*separator,string,limit*)
引數 描述 separator 必需。規定在哪裡分割字串。 string 必需。要分割的字串。 limit 可選。規定所返回的陣列元素的數目。可能的值:大於 0 - 返回包含最多 limit 個元素的陣列小於 0 - 返回包含除了最後的 -limit 個元素以外的所有元素的陣列0 - 會被當做 1, 返回包含一個元素的陣列 - 語法:
-
str_split()
函式把字串分割到陣列中。- 語法:
str_split(*string,length*)
引數 描述 string 必需。規定要分割的字串。 length 可選。規定每個陣列元素的長度。預設是 1。 - 語法:
-
trim()
函式移除字串兩側的空白字元或其他預定義字元。- ltrim() - 移除字串左側的空白字元或其他預定義字元。
- rtrim() - 移除字串右側的空白字元或其他預定義字元
- 語法:
trim(*string,charlist*)
引數 描述 string 必需。規定要檢查的字串。 charlist 可選。規定從字串中刪除哪些字元。如果省略該引數,則移除下列所有字元:"\0" - NULL;"\t" - 製表符;"\n" - 換行;"\x0B" - 垂直製表符;"\r" - 回車" " - 空格 -
substr()
函式返回字串的一部分。- 語法:
substr(*string,start,length*)
引數 描述 string 必需。規定要返回其中一部分的字串。 start 必需。規定在字串的何處開始。正數 - 在字串的指定位置開始;負數 - 在從字串結尾的指定位置開始;0 - 在字串中的第一個字元處開始 length 可選。規定要返回的字串長度。預設是直到字串的結尾。正數 - 從 start 引數所在的位置返回;負數 - 從字串末端返回 - 語法:
-
strstr()
函式搜尋字串在另一字串中是否存在,如果是,返回該字串及剩餘部分,否則返回 FALSE。- 語法:
strstr(*string,search,before_search*)
引數 描述 string 必需。規定被搜尋的字串。 search 必需。規定要搜尋的字串。如果該引數是數字,則搜尋匹配該數字對應的 ASCII 值的字元。 before_search 可選。一個預設值為 "false" 的布林值。如果設定為 "true",它將返回 search 引數第一次出現之前的字串部分。 - 語法:
-
strtolower()
函式把字串轉換為小寫。- strtoupper() - 把字串轉換為大寫
- lcfirst() - 把字串中的首字元轉換為小寫
- ucfirst() - 把字串中的首字元轉換為大寫
- ucwords() - 把字串中每個單詞的首字元轉換為大寫
- 語法
strtolower(*string*)
引數 描述 string 必需。規定要轉換的字串。 -
ucfirst()
函式把字串中的首字元轉換為大寫。- lcfirst() - 把字串中的首字元轉換為小寫
- ucwords() - 把字串中每個單詞的首字元轉換為大寫
- strtoupper() - 把字串轉換為大寫
- strtolower() - 把字串轉換為小寫
- 語法:
ucfirst(*string*)
引數 描述 string 必需。規定要轉換的字串。 -
strpos()
函式查詢字串在另一字串中第一次出現的位置(區分大小寫)。- strrpos() - 查詢字串在另一字串中最後一次出現的位置(區分大小寫)
- stripos() - 查詢字串在另一字串中第一次出現的位置(不區分大小寫)
- strripos() -查詢字串在另一字串中最後一次出現的位置(不區分大小寫)
- 語法:
strpos(*string,find,start*)
引數 描述 string 必需。規定被搜尋的字串。 find 必需。規定要查詢的字元。 start 可選。規定開始搜尋的位置。 -
substr_replace()
函式把字串的一部分替換為另一個字串。- 語法:
substr_replace(*string,replacement,start,length*)
引數 描述 string 必需。規定要檢查的字串。 replacement 必需。規定要插入的字串。 start 必需。規定在字串的何處開始替換。正數 - 在字串的指定位置開始;負數 - 在從字串結尾的指定位置開始;0 - 在字串中的第一個字元處開始 length 可選。規定要替換多少個字元。預設是與字串長度相同。正數 - 被替換的字串長度;負數 - 從字串末端開始的被替換字元數;0 - 插入而非替換 - 語法:
-
printf()
函式輸出格式化的字串。- arg1、arg2、++ 引數將被插入到主字串中的百分號(%)符號處。該函式是逐步執行的。在第一個 % 符號處,插入 arg1,在第二個 % 符號處,插入 arg2,依此類推。
- 語法:
printf(*format,arg1,arg2,arg++*)
引數 描述 format 在後面··· arg1 必需。規定插到 format 字串中第一個 % 符號處的引數。 arg2 可選。規定插到 format 字串中第二個 % 符號處的引數。 arg++ 可選。規定插到 format 字串中第三、四等等 % 符號處的引數。 -
引數format:
-
必需。規定字串以及如何格式化其中的變數。
可能的格式值:
- %% - 返回一個百分號 %
- %b - 二進位制數
- %c - ASCII 值對應的字元
- %d - 包含正負號的十進位制數(負數、0、正數)
- %e - 使用小寫的科學計數法(例如 1.2e+2)
- %E - 使用大寫的科學計數法(例如 1.2E+2)
- %u - 不包含正負號的十進位制數(大於等於 0)
- %f - 浮點數(本地設定)
- %F - 浮點數(非本地設定)
- %g - 較短的 %e 和 %f
- %G - 較短的 %E 和 %f
- %o - 八進位制數
- %s - 字串
- %x - 十六進位制數(小寫字母)
- %X - 十六進位制數(大寫字母)
附加的格式值。必需放置在 % 和字母之間(例如 %.2f):
- + (在數字前面加上 + 或 - 來定義數字的正負性。預設情況下,只有負數才做標記,正數不做標記)
- ' (規定使用什麼作為填充,預設是空格。它必須與寬度指定器一起使用。例如:%'x20s(使用 "x" 作為填充))
- - (左調整變數值)
- [0-9] (規定變數值的最小寬度)
- .[0-9] (規定小數位數或最大字串長度)
Tip:如果使用多個上述的格式值,它們必須按照上面的順序進行使用,不能打亂。
sprintf()
函式把格式化的字串寫入一個變數中。- arg1、arg2、++ 引數將被插入到主字串中的百分號(%)符號處。該函式是逐步執行的。在第一個 % 符號處,插入 arg1,在第二個 % 符號處,插入 arg2,依此類推。
- 語法
sprintf(*format,arg1,arg2,arg++*)
- 引數同
printf()
str_shuffle()
函式隨機地打亂字串中的所有字元。- 語法:
str_shuffle(*string*)
- 語法:
-
面向物件
-
在面向物件的程式設計(英語:Object-oriented programming,縮寫:OOP)中,物件是一個由資訊及對資訊進行處理的描述所組成的整體,是對現實世界的抽象。
-
物件的主要三個特性:
- 物件的行為:可以對 物件施加那些操作,開燈,關燈就是行為。
- 物件的形態:當施加那些方法是物件如何響應,顏色,尺寸,外型。
- 物件的表示:物件的表示就相當於身份證,具體區分在相同的行為與狀態下有什麼不同。
-
定義語法
class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] }
- 類使用 class 關鍵字後加上類名定義。
- 類名後的一對大括號({})內可以定義變數和方法。
- 類的變數使用 var 來宣告, 變數也可以初始化值。
- 函式定義類似 PHP 函式的定義,但函式只能通過該類及其例項化的物件訪問。
-
示例
class Site { /* 成員變數 */ var $url; var $title; /* 成員函式 */ function setUrl($par){ $this->url = $par; } function getUrl(){ echo $this->url . PHP_EOL; } function setTitle($par){ $this->title = $par; } function getTitle(){ echo $this->title . PHP_EOL; } }
- 變數 $this 代表自身的物件。
- PHP_EOL 為換行符。
-
類建立後,我們可以使用 new 運算子來例項化該類的物件
$google = new Site;
-
在例項化物件後,我們可以使用該物件呼叫成員方法,該物件的成員方法只能操作該物件的成員變數
$google->setTitle( "Google 搜尋" );
$google->setUrl( 'www.google.com' );
$google->getTitle();
$google->getUrl();
-
建構函式
-
建構函式是一種特殊的方法。主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值,在建立物件的語句中與 new 運算子一起使用。
-
上面的例子中我們就可以通過構造方法來初始化 $url 和 $title 變數
function __construct( $par1, $par2 ) { $this->url = $par1; $this->title = $par2; }
-
這樣就可以省略set相關的函數了
class Site { /* 成員變數 */ function __construct( $par1, $par2 ) { $this->url = $par1; $this->title = $par2; } /* 成員函式 */ function getUrl(){ echo $this->url . PHP_EOL; } function getTitle(){ echo $this->title . PHP_EOL; } }
-
-
解構函式
-
解構函式(destructor) 與建構函式相反,當物件結束其生命週期時(例如物件所在的函式已呼叫完畢),系統自動執行解構函式。
-
示例
function __destruct() { print "銷燬 " . $this->name . "\n"; }
-
-
繼承
-
PHP 使用關鍵字 extends 來繼承一個類,PHP 不支援多繼承
-
示例
class Child extends Parent { // 程式碼部分 }
-
示例
class Child_Site extends Site { var $category; function setCate($par){ $this->category = $par; } function getCate(){ echo $this->category . PHP_EOL; } }
-
-
訪問控制
- PHP 對屬性或方法的訪問控制,是通過在前面新增關鍵字 public(公有),protected(受保護)或 private(私有)來實現的。
- public(公有):公有的類成員可以在任何地方被訪問。
- protected(受保護):受保護的類成員則可以被其自身以及其子類和父類訪問。
- private(私有):私有的類成員則只能被其定義所在的類訪問。
- 如果用 var 定義,則被視為公有。
- PHP 對屬性或方法的訪問控制,是通過在前面新增關鍵字 public(公有),protected(受保護)或 private(私有)來實現的。
-
介面
-
使用介面(interface),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。
-
介面是通過 interface 關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。
-
介面中定義的所有方法都必須是公有,這是介面的特性。
-
要實現一個介面,使用 implements 操作符。類中必須實現介面中定義的所有方法,否則會報一個致命錯誤。類可以實現多個介面,用逗號來分隔多個介面的名稱。
-
示例
// 宣告一個'iTemplate'介面 interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // 實現介面 class Template implements iTemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{' . $name . '}', $value, $template); } return $template; } }
-
-
常量
-
可以把在類中始終保持不變的值定義為常量。在定義和使用常量的時候不需要使用 $ 符號。
-
常量的值必須是一個定值,不能是變數,類屬性,數學運算的結果或函式呼叫。
-
自 PHP 5.3.0 起,可以用一個變數來動態呼叫類。但該變數的值不能為關鍵字(如 self,parent 或 static)。
-
示例
class MyClass { const constant = '常量值'; function showConstant() { echo self::constant . PHP_EOL; } } echo MyClass::constant . PHP_EOL; $classname = "MyClass"; echo $classname::constant . PHP_EOL; // 自 5.3.0 起 $class = new MyClass(); $class->showConstant(); echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
-
-
抽象類
-
任何一個類,如果它裡面至少有一個方法是被宣告為抽象的,那麼這個類就必須被宣告為抽象的。
定義為抽象的類不能被例項化。
被定義為抽象的方法只是聲明瞭其呼叫方式(引數),不能定義其具體的功能實現。
繼承一個抽象類的時候,子類必須定義父類中的所有抽象方法;另外,這些方法的訪問控制必須和父類中一樣(或者更為寬鬆)。例如某個抽象方法被宣告為受保護的,那麼子類中實現的方法就應該宣告為受保護的或者公有的,而不能定義為私有的。
-
示例
abstract class AbstractClass { // 強制要求子類定義這些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . PHP_EOL; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') . PHP_EOL; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') . PHP_EOL; // 輸出內容 // ConcreteClass1 // FOO_ConcreteClass1 // ConcreteClass2 // FOO_ConcreteClass2
-
此外,子類方法可以包含父類抽象方法中不存在的可選引數。
abstract class AbstractClass { // 我們的抽象方法僅需要定義需要的引數 abstract protected function prefixName($name); } class ConcreteClass extends AbstractClass { // 我們的子類可以定義父類簽名中不存在的可選引數 public function prefixName($name, $separator = ".") { if ($name == "Pacman") { $prefix = "Mr"; } elseif ($name == "Pacwoman") { $prefix = "Mrs"; } else { $prefix = ""; } return "{$prefix}{$separator} {$name}"; } } $class = new ConcreteClass; echo $class->prefixName("Pacman"), "\n"; echo $class->prefixName("Pacwoman"), "\n"; // 輸出 // Mr. Pacman // Mrs. Pacwoman
-
-
Static關鍵字
-
宣告類屬性或方法為 static(靜態),就可以不例項化類而直接訪問。
靜態屬性不能通過一個類已例項化的物件來訪問(但靜態方法可以)。
由於靜態方法不需要通過物件即可呼叫,所以偽變數 $this 在靜態方法中不可用。
靜態屬性不可以由物件通過 -> 操作符來訪問。
自 PHP 5.3.0 起,可以用一個變數來動態呼叫類。但該變數的值不能為關鍵字 self,parent 或 static。
-
-
Final關鍵字
- PHP 5 新增了一個 final 關鍵字。如果父類中的方法被宣告為 final,則子類無法覆蓋該方法。如果一個類被宣告為 final,則不能被繼承。
-
呼叫父類的構造方法
- PHP 不會在子類的構造方法中自動的呼叫父類的構造方法。要執行父類的構造方法,需要在子類的構造方法中呼叫 parent::__construct()
Tip:在PHP中雙冒號(::)操作符是一種範圍解析操作符,又作用域限定操作符。它是對類中的方法的靜態引用,可以訪問靜態、const和類中重寫的屬性與方法。php呼叫類的內部靜態成員,或者是類之間呼叫就要用兩個冒號(: