本文目錄一覽:
php中__set和__get要怎麼理解?
沒什麼繞不過彎的東西啊,就是表面上定義的那樣,php面向對象裡面的取值和賦值,沒必要把簡單的問題複雜化
php中get和set有什麼區別呀?
簡單的說一個是取值,一個是賦值。
,“__set()”和“__get()”這兩個方法,這兩個方法不是默認存在的,而是我們手工添加到類裡面去的,像構造方法(__construct())一樣, 類裡面添加了才會存在,可以按下面的方式來添加這兩個方法,當然也可以按個人的風格來添加:
//__get()方法用來獲取私有屬性
private function __get($property_name)
{
if(isset($this-$property_name))
{
return($this-$property_name);
}else
{
return(NULL);
}
}
//__set()方法用來設置私有屬性
private function __set($property_name, $value)
{
$this-$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類中的__set()和__get()方法用在什麼地方?可以用例子說明一下么…
在PHP類中的__set()和__get()方法是針對protect或private變量的,不針對public變量。因為對protect或 private變量在類外不可直接訪問,可在類中定義一個public方法來訪問這些變量,而__set()和__get()方法相當於這些public 方法,但是在類外的操作時表面上相當於直接訪問,但本質上還是通過__set()和__get()方法體內的判斷與操作。對於一個類中有多個 protect或private變量,用一對__set()和__get()方法就可操作,編譯器將可自己區別用的是哪個變量(由在類外操作時具體的變量名決定,如$object-$name=”sss”).
如下:
?php
class test
{
var $name;
var $age;
function __set($name,$value)
{
$this-$name = $value ;
}
function __get($name)
{
return $this-$name;
}
}
$a = new test();
$a – name = 5;
echo $a-name . “br/” ;
$a – age = “12”;
echo $a-age;
?
輸出結果是,5 和 12。
//php類中靜態變量可用一般方法或靜態方法來操作,但如果在類中用靜態方法,則靜態方法中不可有非靜態的變量。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/295392.html