php物件導向 get , set 的用法

2022-09-17 12:39:13 字數 2079 閱讀 5043

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=new person();

//直接為私有屬性賦值的操作,會自動呼叫__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 的用法

php物件導向 get set 的用法 一般來說,總是把類的屬性定義為 private 這更符合現實的邏輯。但是,對屬性的讀取和賦值操作是非常頻繁的,因此在 php5 中,預定義了兩個函式 get 和 set 來獲取和賦值其屬性 以及檢查屬性的 isset 和刪除屬性的方法 unset 上一節中,我...

php物件導向 get , set 的用法

一般來說,總是把類的屬性定義為 private 這更符合現實的邏輯。但是,對屬性的讀取和賦值操作是非常頻繁的,因此在 php5 中,預定義了兩個函式 get 和 set 來獲取和賦值其屬性 以及檢查屬性的 isset 和刪除屬性的方法 unset 上一節中,我們為每個屬性做了設定和獲取的方法,在 p...

php物件導向 get , set 的用法

php物件導向 get set 的用法 一般來說,總是把類的屬性定義為 private 這更符合現實的邏輯。但是,對屬性的讀取和賦值操作是非常頻繁的,因此在 php5 中,預定義了兩個函式 get 和 set 來獲取和賦值其屬性 以及檢查屬性的 isset 和刪除屬性的方法 unset 上一節中,我...