首頁  >  文章  >  後端開發  >  PHP中__get和__set的用法實例詳解

PHP中__get和__set的用法實例詳解

WBOY
WBOY原創
2016-08-08 09:19:27731瀏覽
php物件導向_get(),_set()的用法 
一般來說,總是把類別的屬性定義為private,這比較符合現實的邏輯。但是,對屬性的讀取和賦值操作是非常頻繁的,因此在PHP5中,預先定義了兩個函數「__get()」和「__set()」來取得和賦值其屬性。類似java中的javabean的操作,所使用的方法也類似,只是不需要像javabean那樣,對每個欄位進行set和get的操作。只需要再加上兩個魔術方法即可。即私有成員的設值和取值的操作。在PHP5中給我們提供了專門為屬性設定值和獲取值的方法,「__set()」和「__get()」這兩個方法,這兩個方法不是預設存在的,而是我們手工添加到類裡面去的,像構造方法(__construct())一樣,類裡面添加了才會存在,可以按下面的方式來添加這兩個方法,當然也可以按個人的風格來添加: 

複製程式碼程式碼如下:


//__set()方法用來設定私人屬性 
public function __set($name,$value){ 
$this->$name = $value; 
}_____
/ )方法用來取得私人屬性 
public function __get($name){ 
return $this->$name; 


__get()方法:這個方法用來取得一個私有成員屬性值的,有一個私有參數,參數傳入你要獲取的成員屬性的名稱,返回獲取的屬性值,這個方法不用我們手工的去調用,因為我們也可以把這個方法做成私有的方法,是在直接獲取私有屬性的時候對象自動調用的。因為私有屬性已經被封裝上了,是不能直接取得值的,但是如果你在類別裡面加上了這個方法,在使用「echo$p1->name」這樣的語句直接取得值的時候就會自動調用__get($name)方法,將屬性name傳給參數$name,透過這個方法的內部執行,傳回我們傳入的私有屬性的值。如果成員屬性不封裝成私有的,物件本身就不會去自動呼叫這個方法。
__set()方法:這個方法用來為私有成員屬性設定值的,有兩個參數,第一個參數為你要為設定值的屬性名,第二個參數是要給屬性設定的值,沒有回傳值。這個方法同樣不用我們手工去調用,它也可以做成私有的,是在直接設定私有屬性值的時候自動調用的,同樣屬性私有的已經被封裝上 
了,如果沒有__set()這個方法,是不允許的,例如:$this->name='zhangsan',這樣會出錯,但是如果你在類別裡面加上了__set($property_name, $value)這個方法,在直接給私有屬性賦值的時候,就會自動呼叫它,把屬性比如name傳給$property_name,把要賦的值「zhangsan」傳給$value,透過這個方法的執行,達到賦值的目的。如果成員屬性不封裝成私有的,物件本身就不會去自動呼叫這個方法。為了不傳入非法的值,還可以在這個方法給做判斷。程式碼如下: 

複製程式碼程式碼如下:


class Person 

//下方是人類的成員屬性,都是封裝的私有成員
//name.的名子 
private $sex; //人的性別 
private $age; //人的年齡 
//__get()方法用來取得私人屬性 
private function __get($property_name) 
{取得私人屬性值的時候,自動呼叫了這個__get()方法
"; 
if(isset($this->$property_name)) 

return($this->$property_name); 

return($this->$property_name); 


else 

return(NULL); 


//__set()方法用來設定私人屬性 
private function __set($property_name, $value) 
private function __set($property_name, $value) 
private function __set($property_name, $value) 
{e自動呼叫了這個__set()方法來賦值私有屬性
"; 
$this->$property_name = $value; 


$p1=newPerson(); 
//直接賦值私有屬性的操作,會自動呼叫__set()方法進行賦值 
$p1->name="張三"; 
$p1->sex="男"; 
$p1->age=20; 
//直接取得私有屬性的值,會自動呼叫__get()方法,傳回成員屬性的值 
echo "姓名:".$p1->name."
"; 
echo "性別:".$p1->sex. "
"; 

echo "年齡:".$p1->age."
"; 🎜?> 🎜🎜
程式執行結果: 
在直接設定私有屬性值的時候,自動呼叫了這個__set()方法為私有屬性賦值 
在直接設定私有屬性值的時候,自動呼叫了這個_ _set()方法為私有屬性賦值 
在直接設定私有屬性值的時候,自動呼叫了這個__set()方法為私有屬性賦值 
在直接取得私有屬性值的時候,自動呼叫了這個_ _get()方法 
姓名:張三 
在直接取得私人屬性值的時候,自動呼叫了這個__get()方法 
性別:男 

自動呼叫了這個__get()方法 
年齡:20 

以上代碼如果不加上__get()和__set()方法,程式就會出錯,因為不能在類別的外部操作私有成員,而上面的程式碼是透過自動呼叫__get()和__set()方法來幫助我們直接存取封裝的私有成員的。

本文轉載自:http://www.jb51.net/article/37900.htm

以上就介紹了PHP中__get和__set的用法實例詳解,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

🎜 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn