php物件導向_get(),_set()的用法
一般來說,總是把類的屬性定義為
private
,這更符合現實的邏輯。但是,
對屬性的讀取和賦值操作是非常頻繁的,因此在
php5
中,預定義了兩個函式「
__get()
」和「__set()
」來獲取和賦值其屬性
,以及檢查屬性的「
__isset()
」和刪除屬性的方法「
__unset()
」。上一節中,我們為每個屬性做了設定和獲取的方法,在
php5
中給我們提供了專門為屬性設定值和獲取值的方法,「
__set()
」和「__get()
」這兩個方法,這兩個方法不是預設存在的,
而是我們手工新增到類裡面去的,像構造方法
(__construct())一樣,
類裡面新增了才會存在,可以按下面的方式來新增這兩個方法,當然也可以按個人的風格來新增:
//__get()
方法用來獲取私有屬性
private function
__get(
$property_name)
else
} //__set()
方法用來設定私有屬性
private function
__set(
$property_name,$
value)
__get()
方法:這個方法用來獲取私有成員屬性值的
,有乙個引數,
引數傳入你要獲取的成員屬性的名稱,返回獲取的屬性值,
這個方法不用我們手工的去呼叫,因為我們也可以把這個方法做成私有的方法,
是在直接獲取私有屬性的時候物件自動呼叫的。因為私有屬性已經被封裝上了,是不能直接獲取值的(比如:「
echo $p1->name
」這樣直接獲取是錯誤的),但是如果你在類裡面加上了這個方法,在使用「
echo $p1->name
」這樣的語句直接獲取值的時候就會自動呼叫
__get($property_name)
方法,將屬性
name
傳給引數
$property_name
,通過這個方法的內部執行,返回我們傳入的私有屬性的值。如果成員屬性不封裝成私有的,物件本身就不會去自動呼叫這個方法。
__set()
方法:這個方法用來為私有成員屬性設定值的,有兩個引數,第乙個引數為你要為設定值的屬性名,第二個引數是要給屬性設定的值,沒有返回值。這個方法同樣不用我們手工去呼叫,它也可以做成私有的,是在直接設定私有屬性值的時候自動呼叫的,同樣屬性私有的已經被封裝上 了,
如果沒有
__set()
這個方法,是不允許的,
比如:$this->name=
『zhangsan』,
這樣會出錯,但是如果你在類裡面加上了
__set($property_name, $value)
這個方法,在直接給私有屬性賦值的時候,就會自動呼叫它,把屬性比如
name
傳給$property_name,
把要賦的值「
zhangsan
」傳給$value
,通過這個方法的執行,達到賦值的目的。如果成員屬性不封裝成私有的,物件本身就不會去自動呼叫這個方法。為了不傳入非法的值,
還可以在這個方法給做一下判斷。**如下:
<?php
class
person
else
} //__set()
方法用來設定私有屬性
private function
__set(
$property_name,$
value)
} $p1=
newperson(); //
直接為私有屬性賦值的操作,會自動呼叫
__set()
方法進行賦值 $
p1->name="張三
"; $
p1->***="男
"; $
p1->age=20;
//直接獲取私有屬性的值,會自動呼叫
__get()
方法,返回成員屬性的值
echo
"姓名:".
$p1->name.""
; echo
"性別:".
$p1->***.""
; echo
"年齡:".
$p1->age.""
; ?>
程式執行結果:
在直接設定私有屬性值的時候,自動呼叫了這個
__set()
方法為私有屬性賦值
在直接設定私有屬性值的時候,自動呼叫了這個
__set()
方法為私有屬性賦值
在直接設定私有屬性值的時候,自動呼叫了這個
__set()
方法為私有屬性賦值
在直接獲取私有屬性值的時候,自動呼叫了這個
__get()
方法姓名:張三
在直接獲取私有屬性值的時候,自動呼叫了這個
__get()
方法性別:男
在直接獲取私有屬性值的時候,自動呼叫了這個
__get()
方法年齡:20
以上**如果不加上
__get()
和__set()
方法,程式就會出錯,因為不能在類的外部操作私有成員,而上面的**是通過自動呼叫
__get()
和__set()
方法來幫助我們直接訪問封裝的私有成員的。
php物件導向 get , set 的用法
一般來說,總是把類的屬性定義為 private 這更符合現實的邏輯。但是,對屬性的讀取和賦值操作是非常頻繁的,因此在 php5 中,預定義了兩個函式 get 和 set 來獲取和賦值其屬性 以及檢查屬性的 isset 和刪除屬性的方法 unset 上一節中,我們為每個屬性做了設定和獲取的方法,在 p...
php物件導向 get , set 的用法
php物件導向 get set 的用法 一般來說,總是把類的屬性定義為 private 這更符合現實的邏輯。但是,對屬性的讀取和賦值操作是非常頻繁的,因此在 php5 中,預定義了兩個函式 get 和 set 來獲取和賦值其屬性 以及檢查屬性的 isset 和刪除屬性的方法 unset 上一節中,我...
php物件導向 get , set 的用法
php物件導向 get set 的用法 一般來說,總是把類的屬性定義為private,這更符合現實的邏輯。但是,對屬性的讀取和賦值操作是非常頻繁的,因此在php5中,預定義了兩個函式 get 和 set 來獲取和賦值其屬性,以及檢查屬性的 isset 和刪除屬性的方法 unset 上一節中,我們為每...