只是列印出 hello world
肯定是不夠的,是嗎?你會希望做得比這還要多——你想要輸入一些內容,操縱它,然後從中得到一些輸出出來的內容。我們可以在 PHP 中通過使用變數與常量來實現這一目標,在本章中我們還會學習其它的一些概念。
PHP 標記
當解析一個檔案時,PHP 會尋找起始和結束標記,也就是 <?php
和 ?>
,這告訴 PHP 開始和停止解析二者之間的程式碼。此種解析方式使得 PHP 可以被嵌入到各種不同的文件中去,而任何起始和結束標記之外的部分都會被 PHP 解析器忽略。
如果檔案內容是純 PHP 程式碼,最好在檔案末尾刪除 PHP 結束標記。這可以避免在 PHP 結束標記之後萬一意外加入了空格或者換行符,會導致 PHP 開始輸出這些空白,而指令碼中此時並無輸出的意圖。
註釋
PHP 支援 C,C++ 和 Unix Shell 風格(Perl 風格)的註釋。例如:
<?php
echo "This is a test"; // 這是 C++ 風格的單行註釋
/* 這是一個
多行註釋 */
echo "This is yet another test";
echo 'One Final Test'; # 這是 shell 風格的單行註釋
複製程式碼
註釋主要用作寫給程式讀者看的筆記。
C 風格的註釋在碰到第一個 */
時結束。要確保不要巢狀 C 風格的註釋。試圖註釋掉一大塊程式碼時很容易出現該錯誤。
<?php
/*
echo "This is a test"; /* 這個註釋將要引起問題 */
*/
複製程式碼
你應該在你的程式中儘可能多地使用有用的註釋:
- 解釋假設
- 說明重要的決定
- 解釋重要的細節
- 說明你想要解決的問題
- 說明你想要在程式中克服的問題,等等。
程式碼會告訴你怎麼做,註釋會告訴你為何如此。
這樣做對你的程式的讀者來說非常有用,他們可以很容易地理解你的程式是做什麼的。請記住,這個人可以是六個月後的你!
常量
常量是一個簡單值的識別符號(名字)。如同其名稱所暗示的,在指令碼執行期間該值不能改變。常量預設為大小寫敏感。傳統上常量識別符號總是大寫的。
常量名和其它任何 PHP 標籤遵循同樣的命名規則。合法的常量名以字母或下劃線開始,後面跟著任何字母,數字或下劃線。
<?php
// 合法的常量名
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");
// 非法的常量名
define("2FOO", "something");
// 下面的定義是合法的,但應該避免這樣做:(自定義常量不要以__開頭)
// 也許將來有一天PHP會定義一個__FOO__的魔術常量
// 這樣就會與你的程式碼相沖突
define("__FOO__", "something");
複製程式碼
常量的範圍是全域性的。不用管作用區域就可以在指令碼的任何地方訪問常量。
變數
PHP 中的變數用一個美元符號後面跟變數名來表示。變數名是區分大小寫的。
變數名與 PHP 中其它的標籤一樣遵循相同的規則。一個有效的變數名由字母或者下劃線開頭,後面跟上任意數量的字母,數字,或者下劃線。
<?php
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var"; // 輸出 "Bob, Joe"
$4site = 'not yet'; // 非法變數名;以數字開頭
$_4site = 'not yet'; // 合法變數名;以下劃線開頭
$i站點is = 'mansikka'; // 合法變數名;可以用中文
複製程式碼
變數預設總是傳值賦值。那也就是說,當將一個表示式的值賦予一個變數時,整個原始表示式的值被賦值到目標變數。
PHP 也提供了另外一種方式給變數賦值:引用賦值。這意味著新的變數簡單的引用(換言之,“成為其別名” 或者 “指向”)了原始變數。改動新的變數將影響到原始變數,反之亦然。
使用引用賦值,簡單地將一個 &
符號加到將要賦值的變數前(源變數)。例如,下列程式碼片斷將輸出“My name is Bob”兩次:
<?php
$foo = 'Bob'; // 將 'Bob' 賦給 $foo
$bar = &$foo; // 通過 $bar 引用 $foo
$bar = "My name is $bar"; // 修改 $bar 變數
echo $bar;
echo $foo; // $foo 的值也被修改
複製程式碼
有一點重要事項必須指出,那就是隻有有名字的變數才可以引用賦值。
型別
PHP 支援 9 種原始資料型別。
四種標量型別:
- boolean(布林型)
- integer(整型)
- float(浮點型,也稱作 double)
- string(字串)
三種複合型別:
- array(陣列)
- object(物件)
- callable(可呼叫)
兩種特殊型別:
- resource(資源)
- NULL(無型別)
Boolean 布林型別
這是最簡單的型別。boolean 表達了真值,可以為 TRUE 或 FALSE。
要指定一個布林值,使用常量 TRUE 或 FALSE。兩個都不區分大小寫。
<?php
$foo = True; // 設定 $foo 為 TRUE
複製程式碼
Integer 整型
integer 是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的某個數。
整型值可以使用十進位制,十六進位制,八進位制或二進位制表示,前面可以加上可選的符號(- 或者 +)。
<?php
$a = 1234; // 十進位制數
$a = -123; // 負數
$a = 0123; // 八進位制數 (等於十進位制 83)
$a = 0x1A; // 十六進位制數 (等於十進位制 26)
$a = 0b11111111; // 二進位制數字 (等於十進位制 255)
複製程式碼
Float 浮點型
浮點型(也叫浮點數 float,雙精度數 double 或實數 real)可以用以下任一語法定義:
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
複製程式碼
String 字串
一個字串 string 就是由一系列的字元組成,其中每個字元等同於一個位元組。
單引號
定義一個字串的最簡單的方法是用單引號把它包圍起來(字元 ')。
<?php
echo 'this is a simple string';
複製程式碼
雙引號
如果字串是包圍在雙引號(")中, PHP 將對一些特殊的字元進行解析,如 \n
換行,\t
水平製表符等。另外最重要的特徵是變數會被解析。
Heredoc 結構
第三種表達字串的方法是用 heredoc 句法結構:<<<
。
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
複製程式碼
Array 陣列
PHP 中的陣列實際上是一個有序對映。對映是一種把 values 關聯到 keys 的型別。此型別在很多方面做了優化,因此可以把它當成真正的陣列,或列表(向量),雜湊表(是對映的一種實現),字典,集合,棧,佇列以及更多可能性。
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// 自 PHP 5.4 起
$array = [
"foo" => "bar",
"bar" => "foo",
];
複製程式碼
key 可以是 integer 或者 string。value 可以是任意型別。可以不指定鍵名,或者對某些單元指定鍵名。
陣列單元可以通過 array[key] 語法來訪問。
<?php
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
複製程式碼
Object 物件
要建立一個新的物件 object,使用 new 語句例項化一個類:
<?php
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
複製程式碼
接下來我們將看見如何使用變數與常量。你需要儲存以下案例並嘗試執行程式。
如何編寫 PHP 程式
從今以後,儲存和執行 PHP 程式的標準步驟如下:
對於 PhpStorm 使用者
- 開啟 PhpStorm。
- 以給定的檔名建立新檔案。
- 輸入案例中給出的程式碼。
- 右鍵並執行當前檔案。
對於其他編輯器使用者
- 開啟你選擇的編輯器。
- 輸入案例中給出的程式碼。
- 以給定的檔名將其儲存成檔案。
- 在直譯器中通過命令
php program.php
來執行程式。
案例:使用變數與常量
輸入並執行以下程式:
<?php
# 檔名:var.py
$i = 5;
echo $i . "\n";
$i = $i + 1;
print $i . "\n";
$s = <<<EOT
This is a multi-line string.
This is the second line.
EOT;
print $s;
複製程式碼
輸出:
5
6
This is a multi-line string.
This is the second line.
複製程式碼
它是如何工作的
下面是這一程式的工作原理。首先,我們使用賦值運算子(=
)將常量數值 5
賦值給變數 $i
。這一行被稱之為宣告語句(Statement)因為其工作正是宣告一些在這一情況下應當完成的事情:我們將變數名 $i
與值 5
相連線。然後,我們通過 echo
語句來列印變數 $i
所宣告的內容,這並不奇怪,只是將變數的值列印到螢幕上。這裡我們同時列印了 \n
是為了換行。
接著,我們將 1
加到 $i
變數所儲存的值中,並將得出的結果重新儲存進這一變數。然後我們將這一變數列印出來,並期望得到的值應為 6
。
類似地,我們將文字賦值給變數 $s
,並將其列印出來。
針對靜態程式語言程式設計師的提示
變數只需被賦予某一值。不需要宣告或定義資料型別。
邏輯行與物理行
所謂物理行(Physical Line)是你在編寫程式時你所看到的內容。所謂邏輯行(Logical Line)是 PHP 所看到 的單個語句。PHP 以 ;
作為不同邏輯行的結束與分隔。
PHP 鼓勵每一行使用一句獨立語句從而使得程式碼更加可讀。
如果你有一行非常長的程式碼,你可以通過使用反斜槓將其拆分成多個物理行。
$s = 'This is a string. \
This continues the string.';
echo $s;
複製程式碼
輸出:
This is a string. This continues the string.
複製程式碼
縮排
空白區在各行的開頭,這被稱作縮排(Indentation)。在邏輯行的開頭留下空白區(使用空格或製表符)用以確定各邏輯行的縮排級別,而後者又可用於確定語句的分組。
這意味著放置在一起的語句擁有相同的縮排。每一組這樣的語句被稱為塊(block)。
如何縮排
使用四個空格來縮排。好的編輯器會自動為你完成這一工作。請確保你在縮排中使用數量一致的空格。
總結
現在我們已經瞭解了諸多本質性的細節,我們可以前去了解控制流語句等更多更加有趣的東西。記得一定要充分理解你在本章所閱讀的內容。