在PHP中,使用關鍵字 static 修飾成員屬性和成員方法被稱為靜態屬性和靜態方法。靜態屬性和靜態方法不需要在類被執行個體化的情況下可以直接使用。
靜態屬性
與普通的成員屬性不同,靜態屬性屬於類本身而不屬於類的任何執行個體。靜態屬性可以被看做是儲存在類當中的全域變數,可以在任何地方通過類來訪問它們。
由於靜態屬性不受任何具體對象的限制,所以不需要建立類執行個體,而可以直接引用類中的靜態屬性,使用文法格式如下:
類名稱::$靜態屬性名稱
其中,符號”::”被稱作範圍解析操作符,它可以用於訪問靜態成員、靜態方法和常量,還可以用於覆蓋類中的成員和方法。
如果想在同一類的成員方法中訪問靜態屬性,可以通過在該靜態屬性的名稱前加上操作符”self::”來實現。
下面是PHP範例程式碼
<?php class Shtml { var $Templet; var $DataSource; var $Dir; var $fileName; var $mod; var $handle; function Shtml($fileName="") { $this->fileName=$fileName; $this->mod="wb"; $this->handle=false; $this->Templet = ""; $this->DataSource = array(); $this->Dir = ""; } /// <描述> /// 綁定資料來源,參數為一數組。 /// </描述> function BindData($arr) { $this->DataSource = $arr; } /// <描述> /// 設定檔案存放路徑。 /// </描述> function SetDir($dir) { $this->Dir = $dir; } function SetFileName($fileName) { return $this->fileName=$fileName; } function GetMod() { return $this->mod; } function SetMod($mod) { return $this->mod=$mod; } function Open() { if(substr($this->fileName,0,1)=="/") $this->fileName = $_SERVER['DOCUMENT_ROOT'] . $this->fileName; if($this->handle=fopen($this->fileName, $this->mod)) return $this->handle; else return false; } function Close() { return fclose($this->handle); } function Write($content) { return fwrite($this->handle,$content); } function MkDir($pathname) { $currentPath=""; str_replace("\","/",$pathname); $pathArr = split("/",$pathname); if($pathArr[0] == "") //使用絕對路徑 { $currentPath = $_SERVER['DOCUMENT_ROOT']; } else { $currentPath = $_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['PHP_SELF']); } for($i=0; $i<count($pathArr); $i++) { if($pathArr[$i]=="") continue; else if(is_dir($currentPath . "/" . $pathArr[$i])) $currentPath = $currentPath . "/" . $pathArr[$i]; else mkdir($currentPath = $currentPath . "/" . $pathArr[$i]); } } /// <描述> /// 產生靜態檔案。 /// </描述> function Create() { $tmp = $this->Templet; foreach($this->DataSource as $key=>$value) { $tmp = str_replace("<FIELD_" . $key . ">", $value, $tmp); } $this->MkDir(dirname($this->fileName)); $this->Open(); $this->Write($tmp); $this->Close(); } } function CreateShtml() { ob_start("callback_CteateShtml"); } function callback_CteateShtml($buffer) { $page = intval(@$_REQUEST["page"]); $shtml = new Shtml(); $shtml->SetFileName($_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['PHP_SELF']) . "/" . basename($_SERVER['PHP_SELF'],".php") . ($page==0 ? "" : "_" . strval($page)) . ".htm"); $shtml->Templet = $buffer; $shtml->Create(); return $buffer; } ?>