我目前是PHP OOP編程的初學者,並且想知道是否有人可以提供如何在實際Web應用程序中使用靜態屬性和方法的示例。使用PHP中的靜態屬性和方法進行OOP編程的示例
回答
儘管在評論中指出了靜態問題,但它們確實有一些用處。
我發現很有用的一個是「命名構造函數」。
通常一個類會有一個構造函數。但是如果這個類可以用幾種不同的方式初始化呢?
例如,也許您的應用程序支持創建用戶的電子郵件地址,或從Facebook的用戶ID ...
class User {
public function __construct($emailOrFbUserId) { }
}
正如你可以在上面看到,它可能是一個有點混亂到什麼參數在構造函數中是當你使用類。
相反,通過編寫它像這樣...
class User {
private function __construct() { }
public static function fromEmailAddress($email) {
$user = new User();
//assuming there's a private field called email
$user->email = $email;
return $user
}
public static function fromFacebookUserId($id) {
...
}
}
//usage example
$user = User::fromEmailAddress('[email protected]');
......它突然更有道理。
提取您稱爲「命名構造函數」的方法並將它們移到UserFactory類中會更好嗎? – 2012-01-05 00:27:12
您是否知道這是網站如何使用fb數據登錄或註冊用戶的網站? – 12japerk 2012-01-05 00:29:57
@DavideGualano有趣的想法,但幾十年的OOP說工廠方法應該是他們創建的類中的靜態方法。擁有單獨的課程會導致各種問題,例如您的工廠將無法訪問私有或受保護的屬性。創建子類也會變得非常複雜,特別是一旦你有子類的子類。它違背了一般的「複雜的代碼是錯誤的代碼」的理論。 – 2012-01-05 00:33:44
- 1. PHP OOP靜態屬性語法錯誤
- 2. PHP的靜態屬性和方法
- 3. PHP重載的靜態屬性和靜態方法
- 4. 使用案例方法的PHP OOP
- 5. PHP OOP:屬性/方法的範圍
- 6. 靜態屬性和實例
- 7. PHP,OOP,靜態
- 8. 進行編程和OOP
- 9. PHP中的靜態屬性
- 10. 通過靜態和非靜態方法訪問靜態屬性?
- 11. php oop如何使用屬性和方法形成一個類
- 12. 靜態屬性調用WPF中的非靜態方法
- 13. 需要在靜態和非靜態方法中使用實例
- 14. 從JavascriptMVC中的靜態方法獲取靜態屬性的值
- 15. 從PHP中的非靜態方法訪問不正確的靜態屬性
- 16. 通過PHP中的靜態屬性進行緩存
- 17. 使用靜態方法的多態性
- 18. Python中的靜態和實例方法
- 19. PHP繼承和靜態方法和屬性
- 20. PHP OOP - 從類內的另一個類調用靜態方法
- 21. PHP的靜態屬性
- 22. PHP,調用類屬性的靜態方法
- 23. 使用擴展方法覆蓋F#中的靜態屬性
- 24. 在c#上的靜態方法中使用公共屬性#
- 25. 進入公共PHP靜態屬性
- 26. 如何在iphone中使用靜態方法使用self.navigationitem屬性?
- 27. PHP中的靜態方法
- 28. 使用靜態方法和屬性創建SKSpriteNode
- 29. 靜態方法和實例方法C#
- 30. 非OOP編程中的多態性的替代方案?
人們普遍對使用靜態屬性感到不滿,因爲它是一個全局狀態,這使得很難跟蹤錯誤並使單元測試變得困難。當然也有例外。 – dqhendricks 2012-01-04 23:34:34
「靜態」類方法有很多用途。儘管如此,這並不意味着你一定會一直使用它們。嘗試學習/遵循面向對象的模式,他們遲早會出現。例如,工廠模式使用它們很多。或者只是一個類在內部使用的實用函數,但也可以獨立使用。 – deceze 2012-01-04 23:36:57
有沒有一個網站,你建議我去學習OO /工廠模式 – 12japerk 2012-01-04 23:43:34