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

PHP 入門筆記(一):標籤、註解、輸出、變數與基本型別

     編輯:PHP 相關知識

前言

從其他語言(Java、C#、Python 等)轉入 PHP,最大的適應挑戰在於其獨特的語法糖、弱型別系統、超全域變數與請求生命週期。本系列文章以「半路出家」開發者視角,記錄 PHP 核心語法精華與避坑指南。第一篇涵蓋程式碼標籤、註解風格、輸出函式差異、變數宣告與基本型別系統。

一、PHP 程式碼標籤

PHP 解析器只處理標籤內的程式碼,標籤外內容原樣輸出(HTML)。

標籤樣式範例建議度說明
標準標籤``✅ **強烈推薦**所有 PHP 版本支援、XML 相容、IDE 完美識別
短標籤``❌ 不推薦需 `php.ini` `short_open_tag=On`,XML 衝突,可移植性差
ASP 樣式`<% echo 'Hello'; %>`❌ 已移除PHP 7.0 移除,歷史遺產
Script 標籤``❌ 不推薦冗長、無優勢,罕見

最佳實踐:純 PHP 檔案**省略結尾 `?>`**,避免非預期空白輸出導致 Header 發送失敗。

二、註解風格


// 單行註解(C++ 風格)
$name = 'PHP'; // 行尾註解

/* 
 * 多行註解(C 風格)
 * 適合區塊說明、函式文檔
 */
$version = '8.3';

# 單行註解(Shell/Perl 風格)
$author = 'Developer';

文檔註解標準 (PHPDoc):


/**
 * 計算兩數和
 * @param int $a 第一個加數
 * @param int $b 第二個加數
 * @return int 總和
 * @throws InvalidArgumentException 參數非整數時拋出
 */
function sum(int $a, int $b): int {
    return $a + $b;
}

三、輸出函式大比拚

函式語法回傳值效能特點
echo`echo 'str';` / `echo 'a', 'b';`無 (`void`)最快語言結構、可多參數逗號分隔、無括號
print`print 'str';` / `print('str');`永遠回傳 `1`略慢語言結構、單一參數、可用於表達式
printf`printf('格式', $args...)`輸出長度 (int)最慢函式、格式化輸出、類 C `printf`
sprintf`$str = sprintf('格式', $args...)`格式化字串同 printf不輸出、回傳字串、適合建立字串變數

關鍵差異示範


// echo 多參數(無連接開銷)
echo 'Hello', ' ', 'World';  // 快

// print 只能單一參數
print 'Hello World';  // 回傳 1,可用於:$x = print 'test'; // $x = 1

// printf 格式化輸出
printf("價格: $%.2f\n", 12.3424);  // 價格: $12.34

// sprintf 產生字串
$formatted = sprintf("$%.2f", 12.3424);  // $formatted = '$12.34'
printf("格式化後: %s", $formatted);

引號差異:單引號 vs 雙引號

特性單引號 `'...'`雙引號 `"..."`
變數解析❌ 不解析✅ 解析變數
跳脫字元僅 `\'` 和 `\\`完整支援 `\n`, `\t`, `\$`, `\"` 等
效能略快(無解析開銷)略慢
適用場景純字串、不需變數插值需變數插值、跳脫字元

$name = 'PHP';
echo 'Hello $name';  // Hello $name
echo "Hello $name";  // Hello PHP

// 複雜變數需用大括號
echo "Hello {$name}World";  // Hello PHPWorld

四、變數系統

核心規則

  1. 必須以 `$` 開頭:`$var`、`$_POST`、`$this->property`
  2. 大小寫敏感:`$name` ≠ `$Name` ≠ `$NAME`
  3. 弱型別(動態型別):變數無固定型別,值決定型別,可隨時改變
  4. 預設值為 `null`**:未賦值變數直接使用會觸發 Notice(PHP 8.0+ 為 Warning)

標量型別

型別範例檢測函式
整數`$age = 25; $hex = 0xFF; $oct = 0755;``is_int()`
浮點數`$price = 19.99; $sci = 1.2e3;``is_float()` / `is_double()`
字串`$str = "Hello"; $raw = 'Raw';``is_string()`
布林`$flag = true; $off = false;``is_bool()`

複合型別

  • 陣列:有序映射(鍵值對),支援整數/字串鍵,詳見下篇
  • 物件:類別實例
  • Callable**:可呼叫型別(函式、閉包、類別方法)

特殊型別

  • Resource:外部資源控制代碼(資料庫連線、檔案控制代碼、圖片資源)
  • NULL:無值狀態

五、物件導向基礎語法


class MyTest {
    // 可視性:public, protected, private
    private string $a;  // PHP 7.4+ 型別宣告
    
    // 建構子
    public function __construct(string $a = '') {
        $this->a = $a;
    }
    
    // 存取器
    public function getA(): string {
        return $this->a;
    }
    
    public function setA(string $a): void {
        $this->a = $a;
    }
}

// 實例化
$obj = new MyTest();
$obj->setA('HI~');
echo $obj->getA();  // HI~

// 物件操作符:-> (非 Java 的 .)
// $obj->method()  呼叫方法
// $obj->prop      存取屬性

與 Java 差異快速對照

特性JavaPHP
方法回傳型別宣告強制PHP 7.0+ 可選(建議加上)
物件操作符`.``->`
變數前綴無`$` (永遠需要)
建構子名稱同類別名`__construct()`
解構子`finalize()` (已淘汰)`__destruct()`

六、型別轉換與檢測

強制轉換


$val = '123';
$int = (int)$val;       // 123
$float = (float)$val;   // 123.0
$bool = (bool)$val;     // true (非空字串)
$arr = (array)$val;     // ['123']
$obj = (object)$val;    // stdClass Object ( [scalar] => '123' )
$str = (string)$val;    // '123'
$null = (unset)$val;    // null (PHP 7.2+)

自動轉換規則(隱性轉型)

  • 字串參與數學運算 → 取前導數字部分:`'10px' + 5` = `15`
  • `if`、`while` 條件判斷:`0`、`0.0`、`'0'`、`''`、`[]`、`null`、`false` → `false`;其餘 → `true`
  • 字串連接 `.` 會強制轉字串

型別檢測函式


$var = 'hello';

// 取得型別字串
echo gettype($var);  // 'string'

// 判斷特定型別
var_dump(is_string($var));   // true
var_dump(is_numeric($var));  // false

// 設定型別(修改變數本身)
$num = '123';
settype($num, 'integer');
var_dump($num);  // int(123)

七、變數範圍

範圍關鍵字生命週期存取方式
區域(預設)函式/區塊執行期間僅限定義區塊內
全域`global $var`腳本執行期間函式內需 `global` 宣告
靜態`static $var`腳本執行期間函式內保持值跨呼叫
超全域預定義請求期間任何位置直接存取

超全域變數(超級全域陣列)


$_SERVER   // 伺服器與執行環境資訊($_SERVER['REQUEST_URI'], $_SERVER['HTTP_USER_AGENT']...)
$_GET      // URL 查詢字串參數
$_POST     // POST 請求主體參數
$_COOKIE   // Cookie 資料
$_FILES    // 上傳檔案資訊
$_ENV      // 環境變數
$_REQUEST  // $_GET + $_POST + $_COOKIE 合併(不建議使用,來源不明確)
$_SESSION  // Session 資料(需 session_start())
$GLOBALS   // 所有全域變數參考陣列

八、常數定義


// 定義常數(慣例全大寫)
define('APP_NAME', 'My Application');
define('MAX_UPLOAD_SIZE', 10 * 1024 * 1024); // 10MB

// 類別常數(PHP 5.3+)
class Config {
    const VERSION = '1.0.0';
    const DEBUG = true;
}

// 使用
echo APP_NAME;
echo Config::VERSION;

// 常數 vs 變數
// 常數:無 $、不可變、全域可見、只能定義標量/陣列 (PHP 7+)

九、本篇重點回顧

  1. 統一使用 `` 標籤,純 PHP 檔省略結尾標籤
  2. 註解:單行 `//`、`#`,多行 `/* */`,文檔 `/** */`
  3. 輸出:`echo` 最快多參數,`print` 可用於表達式,`printf/sprintf` 格式化
  4. 單引號不解析變數(快),雙引號解析變數(方便)
  5. 變數永遠 `$` 開頭,弱型別動態轉換
  6. 物件操作符 `->`,建構子 `__construct()`
  7. 型別轉換:強制 `(type)`、自動隱性轉型、檢測 `is_*/gettype()`
  8. 超全域變數 `$_GET/$_POST/$_SESSION...` 任何位置可存取
  9. 常數 `define()` 或 `const`,不可變、無 `$`、全域可見

下一篇將深入探討 PHP 陣列系統——這是 PHP 最強大、最靈活、最獨特的資料結構,被稱為「有靈魂的陣列」。

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