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教程有興趣的朋友有所幫助。
🎜
🎜