PHP 靜態類與普通類的區別在于它們的實例化方式和訪問方式。
實例化方式:
普通類:在 PHP 中,要創建一個普通類的實例,需要使用 new 關鍵字。例如:
$obj = new ClassName();
靜態類:靜態類不能被實例化,也就是說,你不能使用 new 關鍵字來創建靜態類的實例。要訪問靜態類中的成員(屬性和方法),你需要使用雙冒號操作符 ::。例如:
$result = ClassName::methodName();
訪問方式: 普通類:普通類的屬性和方法可以通過實例進行訪問。例如:
$obj = new ClassName();
$obj->propertyName = "value";
$value = $obj->propertyName;
靜態類:靜態類的屬性和方法只能通過類名進行訪問,而不能通過實例。例如:
ClassName::propertyName = "value";
$value = ClassName::propertyName;
方法調用: 普通類:普通類的方法通常需要通過實例進行調用。例如:
$obj = new ClassName();
$result = $obj->methodName();
靜態類:靜態類的方法可以通過類名直接調用,也可以通過實例調用。但是,通過實例調用靜態方法時,實際上還是會使用類名進行調用。例如:
// 通過類名調用靜態方法
$result = ClassName::methodName();
// 通過實例調用靜態方法,但仍然使用類名進行調用
$obj = new ClassName();
$result = $obj::methodName();
繼承和多態: 普通類:普通類支持繼承和多態。子類可以繼承父類的屬性和方法,并且可以重寫父類的方法以實現多態。 靜態類:靜態類不支持繼承和多態。因為靜態類的成員只能通過類名訪問,所以無法實現多態。此外,靜態類也不能被其他類繼承。
總結:靜態類主要用于存儲全局常量和靜態方法,這些方法和屬性在所有實例之間共享。普通類則用于實現更復雜的對象邏輯和狀態管理。