【短文】為什麼我不在PHP的私有變數用下劃線了?

TIGERB發表於2018-09-08

前言

首先這個問題沒什麼好爭論的。類似這種關於程式碼規範的問題,目前我的觀點是:

跟隨你面對的團隊,跟隨你面對的程式碼塊

最近兩次被別人問到php私有變數加下劃線的問題,由於我開始也是這麼做的,但是最後還是沒用下劃線了。最後想想還是把自己的想法說下吧。

為什麼我不在PHP的私有變數用下劃線了?

首先: 大家都知道在物件導向程式設計中對修改封閉,對擴充套件開放的原則(所以不對屬性public,違反原則)。

但是我們的程式碼總是事與願違,在某些場景中我們需要對外可修改我們的屬性。這裡就會經常見到一些getXXXsetXXX之類的成員方法。

然而: 對於getXXXsetXXX,我更習慣於魔術方法__get__set,這兩個魔術方法其實就可以運用到這個場景,因為可以統一對外暴露屬性,並加以控制,防止的濫用,符合物件導向的思想。

但是: 對外暴露一個加下劃線的私有屬性,看起來好怪(既然私有的被外部訪問了為啥還加下劃線)。

// 像這樣
(new Demo)->_XXX
複製程式碼

所以: 我會在魔術方法__get__set裡面統一加下劃線,這樣這個私有屬性就可以不帶下劃線訪問了。


class Demo
{
    public function __set($name = '', $value = '')
    {
        $argu = "_{$this->$name}";
        return $this->$argu = $value;
    }

    public function __get($name = '')
    {
        $argu = "_{$this->$name}";
        return $this->$name;
    }
}
複製程式碼

這樣: 對外可以暴露的私有屬性就沒下劃線了。

可是: 魔術方法__get__set裡面加這個又感覺怪怪的。

結果: 所以乾脆不加了。

其次: 想了想也沒哪有這個硬性規定。

最後如下:


class Demo
{
    public function __set($name = '', $value = '')
    {
        return $this->$name = $value;
    }

    public function __get($value = '')
    {
        return $this->$value;
    }
}
複製程式碼

最後

如果有寫的不對的地方,歡迎大家指正,THX~

【短文】為什麼我不在PHP的私有變數用下劃線了?

【短文】為什麼我不在PHP的私有變數用下劃線了?

相關文章