我目前正在做一個關於PHP的教程,它讓我創建一個可能代表網站上的用戶的類Person。我應該像對Java說明符一樣將相同的做法應用於PHP訪問說明符嗎?
有兩個公共字段($firstname
和$lastname
),本教程使用$some_person->firstname
訪問它們。
我知道在Java中,我們很可能希望將這些字段設置爲private,並使用getter和setter來訪問它們。我是否應該將相同的做法應用於PHP?
我目前正在做一個關於PHP的教程,它讓我創建一個可能代表網站上的用戶的類Person。我應該像對Java說明符一樣將相同的做法應用於PHP訪問說明符嗎?
有兩個公共字段($firstname
和$lastname
),本教程使用$some_person->firstname
訪問它們。
我知道在Java中,我們很可能希望將這些字段設置爲private,並使用getter和setter來訪問它們。我是否應該將相同的做法應用於PHP?
是 - PHP5 +支持類中的public/protected/private
方法。你不需要設計getter/setter,但是如果這個類增長/增加了功能,它會比讓人們直接調用屬性更安全。
是的,一般屬性應該是protected
或private
和提供的吸氣劑和安裝劑。這將允許您在設置者簽名中添加類型提示或在設置者主體中進行驗證,這將使得難以將不良數據滑入未被注意的屬性。即使「現在你不需要它」,我也傾向於推薦這種方法 - 稍後你可能會這樣做。
在PHP中反對public
屬性的論點與Java中的屬性相同:它向外界打開類的「黑盒子」,並開始打破類提供的封裝首先。
類通常意味着延長,這與屬性是否應爲protected
或private
有關。如果子類是可信的(例如,相同代碼庫的一部分),開發人員可能會很樂意允許直接訪問該屬性,在這種情況下,它可以是protected
。但是,如果代碼旨在發佈(例如作爲F/OSS庫),那麼強制子類使用getter和setter方法有一個參數,在這種情況下,屬性應爲private
。
如果我不設計getter和setter,我還有什麼可以訪問私人領域? – restin84
*私人/保護*字段需要他們,當然,如果你需要公開的數據。有些人辯論,如果你的屬性是public * getter/setter, – helion3