基本文法
顯示變量的資料類型和值
var_dump()
<?php $cars=array("Volvo","BMW","SAAB"); var_dump($cars); ?>
類定義
<?php class Car { var $color; function Car($color="green") { $this->color = $color; } function what_color() { return $this->color; } } ?>
字元串操作
strlen() 函數傳回字元串的長度,以字元計 strpos() 函數用于檢索字元串内指定的字元或文本 <?php echo strpos("Hello world!","world"); ?> #以上代碼的輸出是:6。
設定常量
如需設定常量,請使用 define() 函數 - 它使用三個參數:
- 首個參數定義常量的名稱
- 第二個參數定義常量的值
- 可選的第三個參數規定常量名是否對大小寫不敏感。預設是 false。
#對大小寫敏感的常量 <?php define("GREETING", "Welcome to W3School.com.cn!"); echo GREETING; ?> #對大小寫不敏感的常量 <?php define("GREETING", "Welcome to W3School.com.cn!", true); echo greeting; ?>
PHP 比較運算符
PHP 比較運算符用于比較兩個值(數字或字元串):
運算符 | 名稱 | 例子 | 結果 |
---|---|---|---|
== | 等于 | $x == $y | 如果 $x 等于 $y,則傳回 true。 |
=== | 全等(完全相同) | $x === $y | 如果 $x 等于 $y,且它們類型相同,則傳回 true。 |
!= | 不等于 | $x != $y | 如果 $x 不等于 $y,則傳回 true。 |
<> | $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。 |
PHP 邏輯運算符
and | 與 | $x and $y | 如果 $x 和 $y 都為 true,則傳回 true。 |
or | 或 | $x or $y | 如果 $x 和 $y 至少有一個為 true,則傳回 true。 |
xor | 異或 | $x xor $y | 如果 $x 和 $y 有且僅有一個為 true,則傳回 true。 |
&& | $x && $y | ||
|| | $x | ||
! | 非 | !$x | 如果 $x 不為 true,則傳回 true。 |
PHP 數組運算符
PHP 數組運算符用于比較數組:
+ | 聯合 | $x + $y | $x 和 $y 的聯合(但不覆寫重複的鍵) |
相等 | 如果 $x 和 $y 擁有相同的鍵/值對,則傳回 true。 | ||
全等 | $x ===$y | 如果 $x 和 $y 擁有相同的鍵/值對,且順序相同類型相同,則傳回 true。 | |
不相等 | |||
不全等 | 如果 $x 與 $y 完全不同,則傳回 true。 |
PHP 條件語句
在您編寫代碼時,經常會希望為不同的決定執行不同的動作。您可以在代碼中使用條件語句來實作這一點。
在 PHP 中,我們可以使用以下條件語句:
- if 語句 - 如果指定條件為真,則執行代碼
- if...else 語句 - 如果條件為 true,則執行代碼;如果條件為 false,則執行另一端代碼
- if...elseif....else 語句 - 選擇若幹段代碼塊之一來執行
- switch 語句 - 語句多個代碼塊之一來執行
if (條件) { 條件為 true 時執行的代碼; } elseif (condition) { 條件為 true 時執行的代碼; } else { 條件為 false 時執行的代碼; }
<?php switch ($x) { case 1: echo "Number 1"; break; case 2: echo "Number 2"; break; case 3: echo "Number 3"; break; default: echo "No number between 1 and 3"; } ?>
for&foreach
<?php for ($x=0; $x<=10; $x++) { echo "數字是:$x <br>"; } ?> <?php $colors = array("red","green","blue","yellow"); foreach ($colors as $value) { echo "$value <br>"; } ?>
數組
- 數組基礎
<?php #定義數組 $cars=array("Volvo","BMW","SAAB"); #擷取數組長度 echo count($cars); #關聯數組(類似于詞典) $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); $age['Peter']="35"; $age['Ben']="37"; $age['Joe']="43"; #周遊關聯數組 $age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?>
- 數組排序
- sort() - 以升序對數組排序
- rsort() - 以降序對數組排序
- asort() - 根據值,以升序對關聯數組進行排序
- ksort() - 根據鍵,以升序對關聯數組進行排序
- arsort() - 根據值,以降序對關聯數組進行排序
- krsort() - 根據鍵,以降序對關聯數組進行排序
超全局變量
PHP 中的許多預定義變量都是“超全局的”,這意味着它們在一個腳本的全部作用域中都可用。在函數或方法中無需執行 global $variable; 就可以通路它們。
這些超全局變量是:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
$GLOBALS — 引用全局作用域中可用的全部變量
$GLOBALS 這種全局變量用于在 PHP 腳本中的任意位置通路全局變量(從函數或方法中均可)。
PHP 在名為 $GLOBALS[index] 的數組中存儲了所有全局變量。變量的名字就是數組的鍵。
<?php $x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?>
PHP $_SERVER
$_SERVER 這種超全局變量儲存關于報頭、路徑和腳本位置的資訊。
<?php echo $_SERVER['PHP_SELF']; echo "<br>"; echo $_SERVER['SERVER_NAME']; echo "<br>"; echo $_SERVER['HTTP_HOST']; echo "<br>"; echo $_SERVER['HTTP_REFERER']; echo "<br>"; echo $_SERVER['HTTP_USER_AGENT']; echo "<br>"; echo $_SERVER['SCRIPT_NAME']; ?>
能夠在 $_SERVER 中通路的最重要的元素:
元素/代碼 | 描述 |
---|---|
$_SERVER['PHP_SELF'] | 傳回目前執行腳本的檔案名。 |
$_SERVER['GATEWAY_INTERFACE'] | 傳回伺服器使用的 CGI 規範的版本。 |
$_SERVER['SERVER_ADDR'] | 傳回目前運作腳本所在的伺服器的 IP 位址。 |
$_SERVER['SERVER_NAME'] | 傳回目前運作腳本所在的伺服器的主機名(比如 www.w3school.com.cn)。 |
$_SERVER['SERVER_SOFTWARE'] | 傳回伺服器辨別字元串(比如 Apache/2.2.24)。 |
$_SERVER['SERVER_PROTOCOL'] | 傳回請求頁面時通信協定的名稱和版本(例如,“HTTP/1.0”)。 |
$_SERVER['REQUEST_METHOD'] | 傳回通路頁面使用的請求方法(例如 POST)。 |
$_SERVER['REQUEST_TIME'] | 傳回請求開始時的時間戳(例如 1577687494)。 |
$_SERVER['QUERY_STRING'] | 傳回查詢字元串,如果是通過查詢字元串通路此頁面。 |
$_SERVER['HTTP_ACCEPT'] | 傳回來自目前請求的請求頭。 |
$_SERVER['HTTP_ACCEPT_CHARSET'] | 傳回來自目前請求的 Accept_Charset 頭( 例如 utf-8,ISO-8859-1) |
$_SERVER['HTTP_HOST'] | 傳回來自目前請求的 Host 頭。 |
$_SERVER['HTTP_REFERER'] | 傳回目前頁面的完整 URL(不可靠,因為不是所有使用者代理都支援)。 |
$_SERVER['HTTPS'] | 是否通過安全 HTTP 協定查詢腳本。 |
$_SERVER['REMOTE_ADDR'] | 傳回浏覽目前頁面的使用者的 IP 位址。 |
$_SERVER['REMOTE_HOST'] | 傳回浏覽目前頁面的使用者的主機名。 |
$_SERVER['REMOTE_PORT'] | 傳回使用者機器上連接配接到 Web 伺服器所使用的端口号。 |
$_SERVER['SCRIPT_FILENAME'] | 傳回目前執行腳本的絕對路徑。 |
$_SERVER['SERVER_ADMIN'] | 該值指明了 Apache 伺服器配置檔案中的 SERVER_ADMIN 參數。 |
$_SERVER['SERVER_PORT'] | Web 伺服器使用的端口。預設值為 “80”。 |
$_SERVER['SERVER_SIGNATURE'] | 傳回伺服器版本和虛拟主機名。 |
$_SERVER['PATH_TRANSLATED'] | 目前腳本所在檔案系統(非文檔根目錄)的基本路徑。 |
$_SERVER['SCRIPT_NAME'] | 傳回目前腳本的路徑。 |
$_SERVER['SCRIPT_URI'] | 傳回目前頁面的 URI。 |
PHP $_REQUEST
PHP $_REQUEST 用于收集 HTML 表單送出的資料。
下面的例子展示了一個包含輸入字段及送出按鈕的表單。當使用者通過點選送出按鈕來送出表單資料時, 表單資料将發送到 <form> 标簽的 action 屬性中指定的腳本檔案。在這個例子中,我們指定檔案本身來處理表單資料。如果您需要使用其他的 PHP 檔案來處理表單資料,請修改為您選擇的檔案名即可。然後,我們可以使用超級全局變量 $_REQUEST 來收集 input 字段的值:
<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_REQUEST['fname']; echo $name; ?> </body> </html>
PHP $_POST
PHP $_POST 廣泛用于收集送出 method="post" 的 HTML 表單後的表單資料。$_POST 也常用于傳遞變量。
下面的例子展示了一個包含輸入字段和送出按鈕的表單。當使用者點選送出按鈕來送出資料後,表單資料會發送到 <form> 标簽的 action 屬性中指定的檔案。在本例中,我們指定檔案本身來處理表單資料。如果您希望使用另一個 PHP 頁面來處理表單資料,請用更改為您選擇的檔案名。然後,我們可以使用超全局變量 $_POST 來收集輸入字段的值:
<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_POST['fname']; echo $name; ?> </body> </html>
PHP $_GET
PHP $_GET 也可用于收集送出 HTML 表單 (method="get") 之後的表單資料。
$_GET 也可以收集 URL 中的發送的資料。
假設我們有一張頁面含有帶參數的超連結:
<html> <body> <a href="test_get.php?subject=PHP&web=W3school.com.cn">測試 $GET</a> </body> </html>
當使用者點選連結 "Test $GET",參數 "subject" 和 "web" 被發送到 "test_get.php",然後您就能夠通過 $_GET 在 "test_get.php" 中通路這些值了。
下面的例子是 "test_get.php" 中的代碼:
<html> <body> <?php echo "Study " . $_GET['subject'] . " at " . $_GET['web']; ?> </body> </html>
$_GET VS $_POST
$_GET 是通過 URL 參數傳遞到目前腳本的變量數組。
$_POST 是通過 HTTP POST 傳遞到目前腳本的變量數組。
通過 GET 方法從表單發送的資訊對任何人都是可見的(所有變量名和值都顯示在 URL 中)。GET 對所發送資訊的數量也有限制。限制在大于 2000 個字元。不過,由于變量顯示在 URL 中,把頁面添加到書簽中也更為友善。
GET 可用于發送非敏感的資料。
注釋:絕不能使用 GET 來發送密碼或其他敏感資訊!
通過 POST 方法從表單發送的資訊對其他人是不可見的(所有名稱/值會被嵌入 HTTP 請求的主體中),并且對所發送資訊的數量也無限制。
此外 POST 支援高階功能,比如在向伺服器上傳檔案時進行 multi-part 二進制輸入。
不過,由于變量未顯示在 URL 中,也就無法将頁面添加到書簽。
函數
PHP 的真正力量來自它的函數:它擁有超過 1000 個内建的函數。
PHP 使用者定義函數
除了内建的 PHP 函數,我們可以建立我們自己的函數。
函數是可以在程式中重複使用的語句塊。
頁面加載時函數不會立即執行。
函數隻有在被調用時才會執行。
注釋:函數名能夠以字母或下劃線開頭(而非數字)。
注釋:函數名對大小寫不敏感。
提示:函數名應該能夠反映函數所執行的任務。
<?php function writeMsg() { echo "Hello world!"; } writeMsg(); // 調用函數 ?>
PHP 函數參數
可以通過參數向函數傳遞資訊。參數類似變量。
參數被定義在函數名之後,括号内部。您可以添加任意多參數,隻要用逗号隔開即可。
<?php function familyName($fname) { echo "$fname Zhang.<br>"; } familyName("Li"); familyName("Hong"); familyName("Tao"); familyName("Xiao Mei"); familyName("Jian"); ?> #預設參數 <?php function setHeight($minheight=50) { echo "The height is : $minheight <br>"; } setHeight(350); setHeight(); // 将使用預設值 50 setHeight(135); setHeight(80); ?>
日期函數
PHP date() 函數用于對日期或時間進行格式化。
PHP Date() 函數
PHP Date() 函數把時間戳格式化為更易讀的日期和時間。
文法
date(format,timestamp)
參數 | |
---|---|
format | 必需。規定時間戳的格式。 |
timestamp | 可選。規定時間戳。預設是目前時間和日期。 |
注釋:時間戳是一種字元序列,它表示具體事件發生的日期和事件。
獲得簡單的日期
date() 函數的格式參數是必需的,它們規定如何格式化日期或時間。
下面列出了一些常用于日期的字元:
- d - 表示月裡的某天(01-31)
- m - 表示月(01-12)
- Y - 表示年(四位數)
- 1 - 表示周裡的某天
其他字元,比如 "/", "." 或 "-" 也可被插入字元中,以增加其他格式。
下面的例子用三種不同方法格式今天的日期:
<?php echo "今天是 " . date("Y/m/d") . "<br>"; echo "今天是 " . date("Y.m.d") . "<br>"; echo "今天是 " . date("Y-m-d") . "<br>"; echo "今天是 " . date("l"); ?>
使用 date() 函數在您的網站上自動更新版本年份:
© 2010-<?php echo date("Y")?>
下面是常用于時間的字元:
- h - 帶有首位零的 12 小時小時格式
- i - 帶有首位零的分鐘
- s - 帶有首位零的秒(00 -59)
- a - 小寫的午前和午後(am 或 pm)
下面的例子以指定的格式輸出目前時間:
<?php echo "現在時間是 " . date("h:i:sa"); ?>
注釋:請注意 PHP date() 函數會傳回伺服器的目前日期/時間!
獲得時區
如果從代碼傳回的不是正确的時間,有可能是因為您的伺服器位于其他國家或者被設定為不同時區。
是以,如果您需要基于具體位置的準确時間,您可以設定要用的時區。
下面的例子把時區設定為 "Asia/Shanghai",然後以指定格式輸出目前時間:
<?php date_default_timezone_set("Asia/Shanghai"); echo "目前時間是 " . date("h:i:sa"); ?>
通過 PHP mktime() 建立日期
date() 函數中可選的時間戳參數規定時間戳。如果您未規定時間戳,将使用目前日期和時間(正如上例中那樣)。
mktime() 函數傳回日期的 Unix 時間戳。Unix 時間戳包含 Unix 紀元(1970 年 1 月 1 日 00:00:00 GMT)與指定時間之間的秒數。
mktime(hour,minute,second,month,day,year)
下面的例子使用 mktime() 函數中的一系列參數來建立日期和時間:
<?php $d=mktime(9, 12, 31, 6, 10, 2015); echo "建立日期是 " . date("Y-m-d h:i:sa", $d); ?>
PHP strtotime() 函數
strtotime() 函數用于把人類可讀的字元串轉換為 Unix 時間。
strtotime(time,now)
下面的例子通過 strtotime() 函數建立日期和時間:
<?php $d=strtotime("10:38pm April 15 2015"); echo "建立日期是 " . date("Y-m-d h:i:sa", $d); ?>
PHP 在将字元串轉換為日期這方面非常聰明,是以您能夠使用各種值:
<?php $d=strtotime("tomorrow"); echo date("Y-m-d h:i:sa", $d) . "<br>"; $d=strtotime("next Saturday"); echo date("Y-m-d h:i:sa", $d) . "<br>"; $d=strtotime("+3 Months"); echo date("Y-m-d h:i:sa", $d) . "<br>"; ?>
不過,strtotime() 并不完美,是以請記得檢查放入其中的字元串。
更多日期執行個體
下例輸出下周六的日期:
<?php $startdate = strtotime("Saturday"); $enddate = strtotime("+6 weeks",$startdate); while ($startdate < $enddate) { echo date("M d", $startdate),"<br>"; $startdate = strtotime("+1 week", $startdate); } ?>
下例輸出七月四日之前的天數:
<?php $d1=strtotime("December 31"); $d2=ceil(($d1-time())/60/60/24); echo "距離十二月三十一日還有:" . $d2 ." 天。"; ?>
檔案
<?php $myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!"); echo fread($myfile,filesize("webdictionary.txt")); fclose($myfile); ?>
檔案會以如下模式之一打開:
模式 | |
---|---|
r | 打開檔案為隻讀。檔案指針在檔案的開頭開始。 |
w | 打開檔案為隻寫。删除檔案的内容或建立一個新的檔案,如果它不存在。檔案指針在檔案的開頭開始。 |
a | 打開檔案為隻寫。檔案中的現有資料會被保留。檔案指針在檔案結尾開始。建立新的檔案,如果檔案不存在。 |
x | 建立新檔案為隻寫。傳回 FALSE 和錯誤,如果檔案已存在。 |
r+ | 打開檔案為讀/寫、檔案指針在檔案開頭開始。 |
w+ | 打開檔案為讀/寫。删除檔案内容或建立新檔案,如果它不存在。檔案指針在檔案開頭開始。 |
a+ | 打開檔案為讀/寫。檔案中已有的資料會被保留。檔案指針在檔案結尾開始。建立新檔案,如果它不存在。 |
x+ | 建立新檔案為讀/寫。傳回 FALSE 和錯誤,如果檔案已存在。 |
PHP 讀取檔案 - fread()
fread() 函數讀取打開的檔案。
fread() 的第一個參數包含待讀取檔案的檔案名,第二個參數規定待讀取的最大位元組數。
PHP 關閉檔案 - fclose()
fclose() 函數用于關閉打開的檔案。
注釋:用完檔案後把它們全部關閉是一個良好的程式設計習慣。您并不想打開的檔案占用您的伺服器資源。
fclose() 需要待關閉檔案的名稱(或者存有檔案名的變量)
PHP 讀取單行檔案 - fgets()
fgets() 函數用于從檔案讀取單行。
PHP 檢查 End-Of-File - feof()
feof() 函數檢查是否已到達 "end-of-file" (EOF)。
feof() 對于周遊未知長度的資料很有用。
下例逐行讀取 "webdictionary.txt" 檔案,直到 end-of-file:
<?php $myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!"); // 輸出單行直到 end-of-file while(!feof($myfile)) { echo fgets($myfile) . "<br>"; } fclose($myfile); ?>
PHP 讀取單字元 - fgetc()
fgetc() 函數用于從檔案中讀取單個字元。
PHP 建立檔案 - fopen()
fopen() 函數也用于建立檔案。也許有點混亂,但是在 PHP 中,建立檔案所用的函數與打開檔案的相同。
如果您用 fopen() 打開并不存在的檔案,此函數會建立檔案,假定檔案被打開為寫入(w)或增加(a)。
PHP 寫入檔案 - fwrite()
fwrite() 函數用于寫入檔案。
fwrite() 的第一個參數包含要寫入的檔案的檔案名,第二個參數是被寫的字元串。
<?php $myfile = fopen("newfile.txt", "w") or die("Unable to open file!"); $txt = "Bill Gates\n"; fwrite($myfile, $txt); $txt = "Steve Jobs\n"; fwrite($myfile, $txt); fclose($myfile); ?>
PHP上傳與存儲檔案
<?php /** * Created by IntelliJ IDEA. * User: zzd * Date: 2018/3/1 * Time: 13:57 */ echo $_FILES["file"]["type"]; echo $_FILES["file"]["size"]; if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 300000)) { if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } ?>
ฅ平平庸庸的普通人ฅ