跳轉到內容

PHP 程式設計/基礎知識

來自華夏公益教科書
此頁面使用了 彩色程式碼框。 要留下您關於此新功能的反饋,請點選 這裡

示例 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 很棒且很棒。”)附加到文字字串“所有酷孩子都在做。”,並將此新字串分配給 $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*$x10

在將 $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.

注意:在 echo 語句中,字串中出現 \n 的地方,輸出中就會出現換行。但是,當在 Web 瀏覽器中顯示 HTML 文件時,\n 不會產生換行符。這是因為 PHP 引擎不會渲染指令碼。相反,PHP 引擎輸出 HTML 程式碼,隨後由 Web 瀏覽器渲染。PHP 指令碼中的換行符 \n 將變為 HTML 空格,Web 瀏覽器在渲染時會跳過空格(就像 PHP 引擎在生成 HTML 時會跳過 PHP 指令碼中的空格一樣)。這並不意味著 \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 原始碼)包含換行符。


其他特殊字元包括 ASCII NUL\0)——用於填充二進位制檔案,**製表符**(\t)——用於顯示標準制表符,以及 return\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 的內容。

更多資訊

[編輯 | 編輯原始碼]


華夏公益教科書