以下是我編寫的一些代碼的摘錄,該代碼基於來自同一類的方法分配$user->privilege
。這似乎過分重複,我想知道是否有什麼我可以做的,使其更具可讀性 - 因爲我沒有看到這種重複,我看過的代碼太多。在PHP中調用的重複性類(方法/屬性)
$user -> privileges = $user -> get_privileges ($user -> username);
以下是我編寫的一些代碼的摘錄,該代碼基於來自同一類的方法分配$user->privilege
。這似乎過分重複,我想知道是否有什麼我可以做的,使其更具可讀性 - 因爲我沒有看到這種重複,我看過的代碼太多。在PHP中調用的重複性類(方法/屬性)
$user -> privileges = $user -> get_privileges ($user -> username);
它對我來說看起來並不是特別重複,但是根據類之外的方法分配對象的屬性有點不尋常。相反,這可能是更好的對象的構造函數裏面處理,省去了你記住編碼時,設置該屬性:
class User {
public $username;
public $privileges;
public function __construct() {
// setup the user however that's done...
// And assign privileges in the constructor
$this->privileges = $this->get_privileges();
}
// In get_privilegs, rather than passing the username property,
// just access it via $this->username.
// Unless you need to use this method from time to time outside the class, it can be private
private function get_privileges() {
// Get privs for $this->username
}
}
而且爲$this->privileges = $this->get_privileges();
替代稱爲構造函數中,你可能只是設置$this->privileges
內get_privileges()
方法。然後,您可以在構造函數中將其稱爲$this->get_privileges()
,不需要進行分配。無論哪種方式工作。
作爲面向對象的新手,構造函數有時仍然讓我陷入循環。感謝您的幫助:) –
@DươngVăn您可以在對象構造函數中做很多有用的工作。 –
第二種方法似乎會更好,因爲它從$ __ COOKIES中提取值,這看起來不適用於構造函數。 –
我使用這個模式很多時候的方法是昂貴的,我可以將結果只存儲的請求的其餘部分:
class User {
protected $_privileges = null;
public function getPrivileges() {
if ($this->_privileges == null) {
// code to populate privileges array
$this->_privileges = $privileges;
}
return $this->_privileges;
}
}
這樣getPrivileges()只會做的辛勤工作一次,之後它使用自己的本地緩存副本來處理該對象實例的其餘請求。
爲什麼你會存儲已經可以訪問的函數的結果?你打開自己的不一致!另外,考慮將'$ user-> username'設置爲'get_privileges()'的默認參數,以便您可以忽略它。 – Brad
是的,我更喜歡那個想法。 –