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

PHP 作用域解析操作符 (::) 詳解:靜態成員、晚靜態綁定與常量訪問

     編輯:PHP 相關知識

雙冒號操作符的核心用法

::(Paamayim Nekudotayim)用於訪問類的**靜態屬性**、**靜態方法**、**類常量**,以及**晚靜態綁定** 中的 static::。不適用於實例屬性/方法(需用 ->)。

基本語法

<?php
class A {
    const VERSION = '1.0';
    public static $count = 0;
    public static function ec() {
        echo "靜態方法調用\n";
    }
}

// 類外部調用
echo A::VERSION;      // 1.0
echo A::$count;       // 0
A::ec();              // 靜態方法調用

// 類內部調用(繼承場景)
class B extends A {
    public static function test() {
        self::ec();       // 編譯期綁定 → A::ec()
        static::ec();     // 運行期綁定 → B::ec() (晚靜態綁定)
        parent::ec();     // 顯式調用父類
    }
}
B::test();
?>

四大核心場景

場景語法說明
類常量ClassName::CONST不可修改,繼承可覆蓋
靜態屬性ClassName::$prop所有實例共享,存儲於類而非對象
靜態方法ClassName::method()無 $this,不可訪問非靜態成員
晚靜態綁定static::method()PHP 5.3+,解決繼承中靜態調用多態問題

常見錯誤

  • $obj::method():對象實例調用靜態方法雖合法但不推薦(語義混淆)。
  • ClassName::nonStaticMethod():嚴格模式下拋出 Error(PHP 7+)。
  • 靜態屬性繼承陷阱:父子類共享同一內存地址,修改影響雙方(除非子類重新聲明)。

實戰模式:單例模式

class Singleton {
    private static $instance = null;
    private function __construct() {}
    private function __clone() {}
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}
$obj = Singleton::getInstance();

性能提示

  • 靜態調用比實例調用略快(無對象創建開銷),但差異微乎其微。
  • 濫用靜態導致強耦合、難測試、難擴展,**優先使用依賴注入**。

掌握 :: 的綁定規則,是寫出可復用、可擴展 PHP 面向對象代碼的基石。

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