跳轉到內容

PHP 程式設計/基礎知識

來自 Wikibooks,開放世界中的開放書籍
此頁面使用 彩色程式碼框。要留下有關此新功能的反饋,請點選 這裡

示例 1 - 基本算術運算子

[編輯 | 編輯原始碼]

此示例使用數學表示式中使用的五個基本運算子。這些是 PHP 中執行的所有數學和字串運算的基礎。

+ - * / =
賦值

五個數學運算子的功能與在 C++Java 中找到的運算子完全相同

檢查此示例。賦值運算子右側的每個數學表示式都根據正常的運算順序進行計算。當表示式計算完畢後,結果值將分配給賦值運算子左側命名的變數。

PHP 程式碼:

<?php
  $x = 25;
  $y = 10;
  $z = $x + $y;
  echo $z;

  echo "<br />";
  $z = $x/$y;
  echo $z;

  echo "<br />";
  $z = $y*$y*$x;
  echo $z - 1250;
  echo "<br />";
?>

PHP 輸出:

35<br />2.5<br />1250<br />

HTML 渲染:

35
2.5
1250


注意:如果您不熟悉 (X)HTML,您可能不知道上述程式碼中這部分的用途
echo "<br />";
它的目的是在結果之間插入一個 HTML“換行符”,導致瀏覽器在渲染頁面時將每個結果顯示在新的行上。如果沒有這行程式碼,上面的程式碼將改為列印
352.51250

當然,這不是預期的結果。


有兩個程式碼選項執行與賦值 (=) 運算子相反的操作。關鍵字null 應該用於變數置空,實際上它賦值運算子 (=) 一起使用,而不是值。如果您想銷燬一個變數,可以使用unset() 語言結構。

示例
$variable = null;

unset($variable);


除此之外,可以使用字母“e”引入 10 的冪

print 2e1;  // 20
print 4e-3; // 0.004

數字格式化透過number_format() 實現:小數位數、小數點分隔符和千位分隔符。示例

print number_format(3333.333333, 2, ',', ' ');  // 3 333,33


示例 2 - 字串連線

[編輯 | 編輯原始碼]

此示例演示了連線運算子 (.),它將兩個字串連線在一起,生成一個包含兩個部分的字串。它類似於在 C++ 字串類 (參見 STL)、Java、JavaScript、Python 實現中常用的加號 (+) 運算子。

語句
$string = $string . " " . "All the cool kids are doing it.";
將當前的$string 值 (即 "PHP is wonderful and great.") 附加到文字字串 " All the cool kids are doing it.",並將此新字串分配給$string


程式碼:

<?php
  $string = "PHP is wonderful and great.";
  $string = $string . " " . "All the cool kids are doing it.";
  echo $string;
?>

輸出:

PHP is wonderful and great. All the cool kids are doing it.

眾所周知,或者對於程式設計新手來說,他們很快就會發現,程式設計師總是在尋找“更緊湊的程式碼”。簡而言之,我們以用最少的按鍵完成最多的工作為榮。考慮到這一點,這裡有一個可以節省寶貴按鍵的技巧:同時連線和賦值。這很簡單。讓我們以上面的示例為例。

程式碼:

<?php
  $string = "PHP is wonderful and great.";
  $string .= " " . "All the cool kids are doing it.";
  echo $string;
?>

輸出:

PHP is wonderful and great. All the cool kids are doing it.

您只用 8 個按鍵就得到了完全相同的輸出。重要嗎?想象一下,最近我需要對 100 行模板程式碼進行這樣的操作。是的,很重要。順便說一句,如果您在不更改輸出的情況下更改實現,這被稱為重構。熟悉這個術語。您會經常使用它。請參閱下面有關複合賦值的更多示例。

示例 3 - 快捷運算子

[編輯 | 編輯原始碼]

此程式碼段演示了自引用快捷運算子。第一個這樣的運算子是++ 運算子,它將$x (使用字尾形式) 增加1,使它變成2。在增加$x 之後,$y 被定義並賦值為5

第二個快捷運算子是*=,它獲取$y 並將其賦值為$y*$x,即10

在將$z 初始化為180 之後,後續行執行了兩個快捷操作。按照運算順序 (參見下面的手冊頁面),$y 被遞減 (使用字首形式) 併除以$z$z 被賦值為結果值20

程式碼:

<?php
  $x = 1;
  $x++;
  echo $x . " ";
  $y = 5;
  $y *= $x;
  echo $y . " ";
  $z = 180;
  $z /= --$y;
  echo $z;
?>

輸出:

2 10 20
注意:上面程式碼的展開版本(沒有使用快捷運算子)如下所示
<?php
  $x = 1;
  $x = $x + 1;
  echo $x . " ";
  $y = 5;
  $y = $y*$x;
  echo $y . " ";
  $z = 180;
  $y = $y - 1;
  $z = $z/$y;
  echo $z;
?>
輸出與上面示例中看到的一致。


新概念

[編輯 | 編輯原始碼]

運算子

[編輯 | 編輯原始碼]

運算子是表示式中用來操作資料的任何符號。七個基本 PHP 運算子是

  • =(賦值)
  • +(加法)
  • -(減法)
  • *(乘法)
  • /(除法)
  • %(取模)
  • .(連線)

此外,以上每個運算子都可以與賦值運算子組合,形成以下運算子

  • +=(加法賦值)
  • -=(減法賦值)
  • *=(乘法賦值)
  • /=(除法賦值)
  • %=(取模賦值)
  • .=(連線賦值)

當一個變數被加、減、乘或除以另一個值並隨後賦值給自己時,使用這些運算子。

換句話說,語句
$var = $var + 5;

$var += 5;
是等價的。


PHP 中還有自增和自減運算子。

  • ++(自增)
  • --(自減)

這些是加法賦值和減法賦值運算子的特例。

此程式碼使用加法賦值運算子來增加和減少變數的值。

程式碼:

$var = 0;

$var += 1;
echo "The incremented value is $var.\n";

$var -= 1;
echo "The decremented value is $var.\n";

輸出:

The incremented value is 1.
The decremented value is 0.

雖然這在 PHP 中是完全合法的,但對於像這樣常見的運算來說,它有點冗長。它可以很容易地被自增運算子替換,從而縮短語句。

此程式碼片段使用自增和自減運算子來增加和減少變數的值 1。

程式碼:

$var = 3;

$var++;
echo "The incremented value is $var.\n";

$var--;
echo "The decremented value is $var.\n";

輸出:

The incremented value is 4.
The decremented value is 3.
使用自增運算子可以讓你的程式碼更容易閱讀和理解。

有關 PHP 運算子的更深入概述,包括對位運算子的解釋,請參閱下面的手冊連結。

優先順序

[編輯 | 編輯原始碼]

優先順序決定了在語句中較早執行的某些運算子的優先順序。如果一個運算子具有更高的優先順序,並不意味著它更重要;相反的情況通常是正確的。

結合性

當多個運算子具有相同的優先順序(無論是相同運算子的多個例項,還是隻是具有相同優先順序的不同運算子)時,考慮結合性就變得很重要:是右結合性(從左到右)、左結合性(從右到左),還是非結合性。

結合性無關緊要的示例

在某些情況下(如以下示例),特別是在存在相同運算子的情況下,結合性可能對結果沒有影響。

以下...

$a = 5*2*3*4; // Equals 120

...與其左結合性等價於

$a = (((5*2)*3)*4); // Equals 120

但是,在這種情況下,右結合性會產生相同的結果

$a = (5*(2*(3*4))); // Would also equal 120
結合性在 PHP 中相關(但在數學上不相關)的示例

在數學中,可能認為對具有相同優先順序的運算子以哪個方向進行計算無關緊要。

例如,以下...

$a = 5 + 3 - 2 + 8; // Equals 14

...等價於此(左結合性)語句

$a = (((5 + 3) - 2) + 8); // Equals 14

並且,如果根據人類在數學計算中的約定來考慮這一點,以下等價的右結合性表示式會產生相同的結果

$a = (5 + (3 + (-2 + 8))); // Would also equal 14

但是,由於我們正在處理一種線性計算機語言,它不知道將“2”轉換為負數並將其與“8”組合,然後再將其新增到“3”(然後是“5”),如果 PHP 以嚴格的右結合性方式執行以下表達式,則會發生以下(錯誤)結果

$a = (5 + (3 - (2 + 8))); // Would equal -2

因此,結合性是相關的,應該記住(儘管通常最好使自己的分組顯式——既是為了避免錯誤,也是為了提高檢視程式碼的其他人可讀性)。

類似的問題發生在乘法和除法中。雖然按照人類的約定,所有相鄰的乘法和除法組都會在分子級別執行乘法,在分母級別執行除法,但 PHP 直譯器不知道這樣做,因此它必須在沒有顯式分組(透過括號——它們具有最高優先順序)的情況下設定左(從左到右)約定

$a = 5*4/2*3; // Equals 30

這等價於左結合性

$a = (((5*4)/2)*3); // Also equals 30

但是,與上面的加法/減法示例一樣,以右結合性(以嚴格的逆線性方式)執行此操作不會產生相同(預期)的結果

$a = (5*(4/(2*3))); // Equals 3.33333

換行符和其他特殊字元

[編輯 | 編輯原始碼]

以下兩個示例都使用換行符\n\r\n\r,根據作業系統而定)來表示當前行的結尾和新行的開始。

換行符的使用方式如下

程式碼:

echo "PHP is cool,\nawesome,\nand great.";

輸出:

PHP is cool,
awesome,
and great.

注意:換行符出現在輸出中的位置與\n 在 echo 語句中的字串中的位置相同。但是,當 HTML 文件在 Web 瀏覽器中顯示時,\n 不會產生換行符。這是因為 PHP 引擎不渲染指令碼。相反,PHP 引擎輸出 HTML 程式碼,該程式碼隨後由 Web 瀏覽器渲染。PHP 指令碼中的換行符\n 變為 HTML 空白,Web 瀏覽器在渲染時會跳過它(就像 PHP 指令碼中的空白在 PHP 引擎生成 HTML 時會被跳過一樣)。這並不意味著\n 運算子沒有用;它可以用來向 HTML 新增空白,因此如果有人檢視 PHP 指令碼生成的 HTML,他們會更容易閱讀。

為了插入由 Web 瀏覽器渲染的換行符,必須使用 <br /> 標籤來換行。

注意:換行符對於 Linux/Unix 系統是 \n,對於 Windows 是 \r\n,對於 Mac 是 \r(直到 1996 年,基於 Linux 的 MkLinux 問世)。

因此,上面的語句將被修改為
echo 'PHP is cool,&lt;br /&gt;awesome&lt;br /&gt;and great.';


函式nl2br() 可用於自動將字串中的換行符轉換為<br /> 標籤。

字串必須透過該函式傳遞,然後重新分配

PHP 程式碼:

$string = "This\ntext\nbreaks\nlines.";
$string = nl2br($string);
print $string;

PHP 輸出:

This<br />
text<br />
breaks<br />
lines.

HTML 渲染:

This
text
breaks
lines.
此外,上面示例生成的 PHP 輸出(HTML 原始碼)包含換行符。


其他特殊字元包括 ASCIINUL\0) - 用於填充二進位制檔案,製表符\t) - 用於顯示標準制表符,以及回車符\r) - 表示回車符。同樣,這些字元不會改變 HTML 的渲染,因為它們會向 HTML 原始碼新增空白。為了在最終的網頁中渲染製表符和回車符,應該使用 &tab; 來表示製表符,使用 <br /> 來表示回車符。

PHP 的輸入

[編輯 | 編輯原始碼]

PHP 有一組用於檢索輸入的函式。如果你使用標準輸入(例如來自命令列的輸入),可以使用基本輸入函式檢索它

從標準輸入讀取
$mystring = fgets($stdin);

$stdin = fopen('php://stdin', 'r'); // opens standard input
$line = fgets($stdin); // reads until user presses ENTER


Web 伺服器

[編輯 | 編輯原始碼]

在 Web 伺服器上,傳送到 PHP 應用程式的資訊可能是 GET 操作或 POST 操作。

對於 GET 操作,引數透過位址列傳送。位址列中的引數可以使用訪問$_GET['parameter'] 來檢索。在 POST 操作中,提交的輸入透過$_POST['parameter'] 訪問。

一個更通用的陣列,$_REQUEST['parameter'] 包含$_GET$_POST$_COOKIE 的內容。

更多資訊

[編輯 | 編輯原始碼]


華夏公益教科書