php程式規範中會建議大家盡量將類中的屬性私有化,即定義為private變數,通過設定set和get函式來對屬性進行操作。一些人存在這樣的疑問,為什麼不直接將屬性設定為public,以後呼叫屬性時直接通過物件進行訪問不是更方便?
當然php中這樣做有它的原因:
1 將資料與行為分離,也就是php的物件導向的概念。
物件就是屬性+行為,封裝就是把物件的私有屬性封裝起來,只有通過自己公開的行為去改變(獲得)物件內部的私有屬性資訊,而那些public的方法正是面向其他物件的介面,只有通過介面去改變(獲得)物件的私有屬性
2 安全性
設想,你有乙個person類代表乙個人,person有乙個char型別的***字段表示性別,理論上,***只接受兩個值, 'm '和 'f ',但如果你把***欄位設為public,你很難限制你的使用者只給它賦 'm '或 'f '值。將***設為private,再用set***()來設定性別,你就完全可以控制這種行為了。而且你還可以控制只能get不能set,或相反,但如果是public就不行了。別外有一點屬性我們可能並不希望其他使用者對我們的屬性進行寫操作,這個時候,可以直接不寫setx方法。這就是唯讀屬性了。
3 編碼規範性
我們在設計類,或者作com元件時經常告訴其實coder,你只需要呼叫我的xx介面方法就可以了,內部我是怎麼實現的,你不用管,如果面向特定的環境特定的時間段,直接將屬性宣告為public,讓外部物件訪問也未償不可,沒有面象物件思想時,我在寫c語言程式時結構中的變數是可以隨意被訪問的,因為沒有pulbic,private之分,現在我們是物件導向程式設計,我們需要在介面處作文章,而保護物件的私有屬性,即安全性,只有通過對外公開的介面方法去訪問在物件導向理論上認為是安全的。
4 穩定性
5 可擴充套件性
6 便於維護
從php程式設計思想的角度來講,由於php是物件導向程式設計,什麼東西都是作為乙個物件來講,外部能看到摸到(操作和設定)的只有介面(對應物件中的公開方法)。為了圓這個思想,這個規範,屬性就得私有了。其實每乙個php類都是由 屬性+方法 構成的。我們對這個類的例項能動的只有方法。這種由思想規範寫出來的類對類來說就比較安全;對呼叫這個類的人或是物件來說也比較省心,他只要關注你這個介面要傳什麼東西然後得到什麼東西,你內部有什麼屬性怎麼實現這個介面的,壓根就不關心,多省事。 對了,這種思想學名"封裝"。
---------------------
php 中set是什麼 PHP中
php中把以兩個下劃線 開頭的方法稱為魔術方法 magic methods 這些方法在php中充當了舉足輕重的作用。其中 set 設定乙個類的成員變數時呼叫 set 的作用 set property,value 方法用來設定私有屬性,給乙個未定義的屬性賦值時,此方法會被觸發,傳遞的引數是被設定的屬性...
php 中set是什麼 PHP中
php中把以兩個下劃線 開頭的方法稱為魔術方法 magic methods 這些方法在php中充當了舉足輕重的作用。其中 set 設定乙個類的成員變數時呼叫 set 的作用 set property,value 方法用來設定私有屬性,給乙個未定義的屬性賦值時,此方法會被觸發,傳遞的引數是被設定的屬性...
PHP中變數為什麼要用
c vb php中 可以利用值 數和字串 的位置 1 函式引數 2 運算子運算元 包括vb中的賦值語句 3 陣列下標 包括phpkey標 能產生值 數和字串 的位置 1 簡單變數 2 陣列元素 3 結構成員 4 函式 5 常量 一般字面常量 c和php中define常量 vb中const常變數 6 ...