目的:一是為了安全,二是沒必要被繼承或重寫
例項:demo.class.php
<?php
// final關鍵字修飾的類,是最終的類不能被繼承
final
class
demo
}class
demo1
extends
demo
}// $d1 = new demo1(); // 報錯
// $d1 -> say(); // 報錯
# 格式
類::$靜態屬性
類::靜態方法
# 格式
self::$靜態屬性
self::靜態方法
靜態屬性是共享的。也就是 new 很多物件,很多物件都可以訪問這個靜態屬性。
例項:demo.class.php
<?php
class
demo
// static 如果修飾成員方法。這個方法就是靜態的成員方法
static
public
function
say()}
echo demo:
:$name
;// 在類的外部訪問靜態的成員屬性。類名::成員屬性名
echo demo:
:say()
;// 在類的外部訪問靜態的成員方法。類名::成員方法名
$d1=
newdemo()
;echo""
;echo demo:
:$num
;// 輸出1
$d2=
newdemo()
;echo""
;echo demo:
:$num
;// 輸出2
# 用靜態成員屬性和靜態成員方法實現單例設計模式(只能有乙個物件)
# 注釋操作步驟
# 讓類不能外部例項化,把構造方法設定成私有(private)
# 宣告乙個靜態(static)的 getobj() 的方法,它可以不需要物件就可以從類的外部訪問。
# 宣告這個方法的目的就是為了得到物件,怎麼得到呢,new db()。
# 接下去 var_dump(db::getobj()),你會發現一樣例項化成功了,構造方法已經執行,列印出了乙個物件
# 然而再 var_dump(db::getobj()),構造方法又執行了一次,證明了還是例項化了兩次,不符合需求。
# 說明例項化的過程要有選擇的例項化,用 if 來控制一下。
# 判斷一下沒有例項化的時候,就例項化一次,如果已經例項化,就直接返回例項化的結果。
# 設定乙個靜態(static)的成員屬性 $obj = null
# 在 getobj() 裡判斷靜態的成員屬性($obj)為空的話,就例項化結果(new db()),並賦給靜態成員屬性 $obj
# 因為靜態屬性只能初始化一次這個特性,第二次再呼叫 getobj() 的時候,$obj 的值就已經是物件了,物件直接返回就行。
# 此時會發現構造方法就只執行了一次,返回物件兩次。
# 證明了不管呼叫多少次,例項化的過程只有一次,保證這個程式只有乙個物件產生,這就是單例設計模式。
<?php
class
db// 靜態的成員方法可以不需要物件就可以直接訪問。這個方法用於得到物件
static
function
getobj()
// 把靜態成員屬性中的物件返回
return self:
:$obj;}
public
function
select()
}var_dump(db
::getobj()
);var_dump(db
::getobj()
);var_dump(db
::getobj()
);
# 語法
# 不需要例項化物件即可獲取
const constant = 『constant value』; //定義
echo self::constant; //類內部訪問
echo classname::constant; //類外部訪問
<?php
class
demo
}//在類的外部訪問常量 類名::常量名
echo demo:
:host
;echo"";
$demo
=new
demo()
;echo
$demo
->
getconst()
;
<?php
class
demo
class
demo1
extends
demo
$demo
=new
demo()
;$demo1
=new
demo1()
;// instanceof 可以用於判斷乙個物件是否由乙個類或這個類子類例項化來的
var_dump
($demo
instanceof
demo);
var_dump
($demo1
instanceof
demo1);
var_dump
($demo
instanceof
demo1);
var_dump
($demo1
instanceof
demo
);
php物件導向(OOP) final關鍵字
這個關鍵字只能用來定義 類和定義 方法,不能使用final這個關鍵字來定義成員屬性,因為final是常量的意思,我們在php裡定義常量使用的是define 函式,所以不能使用final來定義成員屬性。使用final關鍵標記的類不能被繼承 final class person class studen...
物件導向程式設計 static關鍵字
物件導向程式設計 static關鍵字 static關鍵字總結 class static 2,靜態方法 a,和靜態變數相同,靜態方法同樣可以在不建立物件下,通過類名直接呼叫.b,在靜態方法裡只能直接呼叫同類中其它的靜態成員 包括變數和方法 而不能直接訪問類中的非靜態成員。這是因為,對於非靜態的方法和變...
c primer 物件導向程式設計關鍵字
1.虛函式 virtual關鍵字來定義,主要是基類的派生類,作用是為了派生類可以在相同函式名的時候,可以有自己的功能,而不用執行基類的行為。class pp void pp test 結果是 test tt tt 2.關鍵字 static 靜態成員 靜態成員如果有n個同類的物件,那麼每乙個物件都分別...