首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 語言核心特性:字串插值、資料型別、型別轉換、變數常量、運算子與控制結構

     編輯:PHP 綜合知識

PHP 語言核心特性深度解析

掌握 PHP 基礎語言特性是撰寫高品質程式碼的前提。本文系統整理字串變數插值、標量/複合/特殊資料型別、隱式/顯式型別轉換、變數與常量定義、運算子優先序與結合性、控制結構(條件/迴圈/跳躍)等核心知識點。

1. 字串中的變數插值

雙引號與 Heredoc 支援變數插值,使用大括號 {} 明確界定變數名稱:

<?php
$hour = 16; $km = 4; $content = "cookie";
echo "4pm 是 {$hour}00 hours.<br>";        // 1600
echo <<<EOT
{$km}000m 在 {$km}km 中.
罐子裡裝滿了 ${content}s.
EOT;
// 輸出: 4000m 在 4km 中. 罐子裡裝滿了 cookies.
?>

輸出字面 {$ 需跳脫:{\$

2. 資料型別詳細分類

2.1 純量型別

  • 整數:十進位、八進位(0 開頭)、十六進位(0x 開頭)、二進位(0b 開頭,PHP 5.4+)
  • 浮點數:科學記號支援,注意精度問題(如 0.1+0.7 != 0.8)
  • 布林值: true / false (不區分大小寫)
  • 字串:單引號、雙引號、Heredoc、Nowdoc

2.2 複合型別

  • 陣列:有序映射,鍵可為整數或字串,值可為任意型別
    $arr = ["car"=>"Ferrari", "number"=>21, "city"=>"Ouagadougou"];
    
  • 物件:類別實例,屬性與方法封裝

2.3 特殊型別

  • NULL:表示無值,三種情況:賦值 null、未賦值、unset() 銷毀
  • Resource:外部資源控制代碼(資料庫連線、檔案控制代碼等)

3. 型別轉換

3.1 隱式轉換 (自動)

發生於:二元運算子、布林運算、需要字串的函數(echo、print、串接運算子 .)

3.2 顯式轉換 (強制)

語法目標型別
(int) / (integer)整數
(float) / (double) / (real)浮點數
(string)字串
(bool) / (boolean)布林值
(array)陣列
(object)物件
(unset)NULL (PHP 7.2+ 棄用)

3.3 特殊轉換規則

  • 轉整數: NULL->0, false->0, true->1, 浮點數截斷小數、字串解析前導數字
  • 轉浮點: 陣列/物件/Resource 轉換結果未定義,勿依賴
  • 轉字串: true->"1", false/NULL->"", 陣列轉換為 "Array" 並觸發 Notice、物件需實作 __toString()
  • 轉陣列: 純量值變為單元素陣列 [0=>value], NULL->[]
  • 轉物件: 純量/陣列建立 stdClass 物件,屬性名為 scalar 或鍵名

3.4 型別檢測與轉換函數

  • is_int(), is_float(), is_bool(), is_null(), is_array(), is_object(), is_resource(), is_scalar(), is_callable() - 回傳布林值
  • gettype($var) - 回傳型別字串
  • settype($var, $type) - 強制轉換變數型別(傳址修改)

4. 變數與常量

4.1 常量定義

<?php
define("PI", 3.14159);
define("SITE_NAME", "MySite");
// 常量名慣例全大寫,不以 $ 開頭
// 值只能是純量:整數、浮點數、字串、布林值、NULL (PHP 7+)
?>

4.2 變數賦值方式

  • 傳值賦值 (預設):複製值,物件複製的是控制代碼(指向同一物件)
  • 傳址賦值: $b = &$a; 兩個變數指向同一記憶體位置

4.3 變數範圍

  • 函數區域範圍
  • 全域範圍 (需 global 或 $GLOBALS)
  • 超全域變數:$GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST, $_ENV

4.4 變數生命週期

PHP 採用「分享無狀態」架構,每次請求獨立執行,變數不在請求間保持(需使用 Session、資料庫、快取等持久化機制)。

5. 運算子與表達式

5.1 運算子分類

類別運算子
算術+, -, *, /, %, ** (冪次)
指派=, +=, -=, *=, /=, .=, %=, &=, |=, ^=, <<=, >>=
比較==, ===, !=, <>, !==, <, >, <=, >=, <=> (太空船運算子 PHP 7+)
邏輯and, or, xor, !, &&, ||
位元&, |, ^, ~, <<, >>
字串. (串接), .= (串接指派)
陣列+ (聯集), ==, ===, !=, <>, !==
遞增遞減++$a, $a++, --$a, $a--
錯誤控制@ (抑制錯誤訊息)
執行運算子`command` (反引號,執行 Shell 指令,安全風險高)

5.2 運算子優先序與結合性 (高到低)

clone new                    (non-associative)
[ array()                    (left)
++ -- ~ (int) (float) (string) (array) (object) (bool) @  (non-associative)
instanceof                   (non-associative)
!                            (right)
* / %                        (left)
+ - .                        (left)
<< >>                        (left)
< <= > >= <>                 (non-associative)
== != === !==                (non-associative)
&                            (left)
^                            (left)
|                            (left)
&&                           (left)
||                           (left)
? :                          (right)
= += -= *= /= .= %= &= |= ^= <<= >>=  (right)
and                          (left)
xor                          (left)
or                           (left)
,                            (left)

6. 控制結構

6.1 條件判斷

<?php
// if-elseif-else
if ($a == 5) {
    echo "等於5";
} elseif ($a == 6) {
    echo "等於6";
} else {
    echo "其他";
}

// 替代語法 (適合模板)
if ($a == 5):
    echo "等於5";
elseif ($a == 6):
    echo "等於6";
else:
    echo "其他";
endif;

// switch
switch ($i) {
    case 0: echo "0"; break;
    case 1: echo "1"; break;
    case 2: echo "2"; break;
    default: echo "其他";
}
?>

6.2 迴圈

<?php
// while
while ($i < 10) { $i++; }

// do-while (至少執行一次)
do { $i++; } while ($i < 10);

// for
for ($i=0; $i<10; $i++) { echo $i; }
for (;;) { if ($i>10) break; echo $i++; } // 無限迴圈寫法

// foreach (陣列/物件遍歷)
foreach ($arr as $val) { ... }
foreach ($arr as $key => $val) { ... }

// 跳躍控制
break;    // 跳出當前迴圈/switch
break 2;  // 跳出 2 層巢狀迴圈
continue; // 跳過本次迴圈剩餘部分
continue 2;
?>

6.3 declare / return / require / include / require_once / include_once / global / static / unset / isset / empty / eval / exit / die 等語言結構

以上為 PHP 核心語言結構,非函數,不可作為變數函數呼叫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved