>構(gòu)造方法:在PHP中的構(gòu)造方法要求不能進(jìn)行構(gòu)造方法的重載,即構(gòu)造方法只有一個(gè).function__construct($name="宋",$sex="",$age=1){//構(gòu)造方法在對(duì)象誕生時(shí)為成員屬性賦初值$this->name=$name;$this->sex=$sex;$thi' />

91亚洲精华国内精华精华液_国产高清在线精品一区不卡_精品特级一级毛片免费观看_欧美日韩中文制服有码_亚洲精品无码你懂的网站369

PHP下的魔術(shù)方法的總結(jié)

 

__construct>>

 

構(gòu)造方法: 在PHP中的構(gòu)造方法要求不能進(jìn)行構(gòu)造方法的重載,即構(gòu)造 方法只有一個(gè).

 

 


  function __construct($name="宋", $sex="", $age=1) {  //構(gòu)造方法在對(duì)象誕生時(shí)為成員屬性賦初值
           $this->name=$name;
           $this->sex=$sex;
           $this->age=$age;
       }
說(shuō)明: 1. 在一個(gè)類(lèi)中,它只可能有一個(gè)構(gòu)造方法.
     2. 所默認(rèn)的構(gòu)造方法是public的,如果使用private的話,則會(huì)構(gòu)成單例模式.

 

__set方法來(lái)設(shè)置


__set()方法:這個(gè)方法用來(lái)為私有成員屬性設(shè)置值的,有兩個(gè)參數(shù),第一個(gè)參數(shù)為你要為設(shè)置值的屬性名,第二個(gè)參數(shù)是要給屬性設(shè)置的值,沒(méi)有返回值。
這個(gè)方法同樣不用我們手工去調(diào)用,它也可以做成私有的,是在直接設(shè)置私有屬性值的時(shí)候自動(dòng)調(diào)用的,同樣屬性私有的已經(jīng)被封裝上
了,如果沒(méi)有__set()這個(gè)方法,是不允許的,比如:$this->name=‘zhangsan’,這樣會(huì)出錯(cuò),但是如果你在類(lèi)里面加上了__set($property_name, $value)這個(gè)方法,
在直接給私有屬性賦值的時(shí)候,就會(huì)自動(dòng)調(diào)用它,把屬性比如name傳給$property_name,把要賦的值“zhangsan”傳給$value,通過(guò)這個(gè)方法的執(zhí)行,達(dá)到賦值的目的。
如果成員屬性不封裝成私有的,對(duì)象本身就不會(huì)去自動(dòng)調(diào)用這個(gè)方法。為了不傳入非法的值,還可以在這個(gè)方法給做一下判斷。

比如實(shí)例:

 

相應(yīng)的實(shí)例

        private $name;       //第一個(gè)成員屬性$name定義人的名子,此屬性被封裝
        private $sex;         //第二個(gè)成員屬性$sex定義人的性別,此屬性被封裝

        private $age;         //第三個(gè)成員屬性$age定義人的年齡,此屬性被封裝


//聲明魔術(shù)方法需要兩個(gè)參數(shù),真接為私有屬性賦值時(shí)自動(dòng)調(diào)用,并可以屏蔽一些非法賦值
       private function __set($propertyName, $propertyValue) {
         

         if($propertyName=="sex"){        //如果第一個(gè)參數(shù)是屬性名sex則條件成立

               //對(duì)于非法數(shù)據(jù)的處理
              if(!($propertyValue == "男" || $propertyValue == "女"))  //第二個(gè)參數(shù)只能是男或女
                   return;                //如果是非法參數(shù)返回空,則結(jié)束方法執(zhí)行
           }    



           if($propertyName=="age"){        //如果第一個(gè)參數(shù)是屬性名age則條件成立
               if($propertyValue > 150 || $propertyValue
<0)  //第二個(gè)參數(shù)只能在0到150之間的整數(shù)
                   return;                //如果是非法參數(shù)返回空,則結(jié)束方法執(zhí)行
           }

         //對(duì)于不需要進(jìn)行驗(yàn)證的數(shù)據(jù),根據(jù)參數(shù)決定為那個(gè)屬性被賦值,傳入不同的成員屬性名,賦上傳入的相應(yīng)的值,定義賦值的方式.
           $this-
>$propertyName = $propertyValue;
       }

如調(diào)用時(shí):

    $person1=new Person("張三", "男", 20);
    //自動(dòng)調(diào)用了__set()函數(shù),將屬性名name傳給第一個(gè)參數(shù),將屬性值”李四”傳給第二個(gè)參數(shù)
    $person1->name="李四";      當(dāng)進(jìn)行賦值時(shí),它會(huì)調(diào)用__set中的 $this->propertyName=$propertyValue代碼

 

 

 

__get()方法:這個(gè)方法用來(lái)獲取私有成員屬性值的,有一個(gè)參數(shù),參數(shù)傳入你要獲取的成員屬性的名稱,返回獲取的屬性值,這個(gè)方法不用我們手工的去調(diào)用,因?yàn)槲覀円部梢园堰@個(gè)方法做成私有的方法,是在直接獲取私有屬性的時(shí)候對(duì)象自動(dòng)調(diào)用的。

 


 

get方法


//在類(lèi)中添加__get()方法,在直接獲取屬性值時(shí)自動(dòng)調(diào)用一次,以屬性名作為參數(shù)傳入并處理
       private function __get($propertyName)  {    //在方法前使用private修飾,防止對(duì)象外部調(diào)用
           
           if($propertyName=="sex") {          //如果參數(shù)傳入的是”sex”則條件成立
               return "保密";                  //不讓別人獲取到性別,以“保密”替代
         
              } else  if($propertyName=="age") {    //如果參數(shù)傳入的是“age”則條件成立
               if($this->age > 30)               //如果對(duì)象中的年齡大于30時(shí)條件成立
                   return $this->age-10;           //返回對(duì)象中虛假的年齡,比真實(shí)年齡小10歲
               else                           //如果對(duì)象中的年齡不大于30時(shí)則執(zhí)行下面代碼
                   return $this->$propertyName;  //讓訪問(wèn)都可以獲取到對(duì)象中真實(shí)的年齡
         
             } else {                            //如果參數(shù)傳入的是其它屬性名則條件成立
    關(guān)鍵==>>     return $this->$propertyName;      //對(duì)其它屬性都沒(méi)有限制,可以直接返回屬性的值
            }
       }


說(shuō)明:1.它只有一個(gè)參數(shù).就是屬性名.
    2.這里的關(guān)鍵代碼
return $this->$propertyName,即為真正得到屬性值的代碼.
如代碼:

    $person1=new Person("張三", "男", 40);  
    echo "姓名:".$person1->name."
";   它會(huì)自動(dòng)的調(diào)用,特別是__get()方法中的$person1即為$this.


 

 



 

>>>


關(guān)于__isset()以及__unset()函數(shù)引入的意義與作用【PHP不是已經(jīng)提供了unset和isset兩個(gè)函數(shù)嗎?】
__isset()方法: isset()是測(cè)定變量是否設(shè)定用的函數(shù),傳入一個(gè)變量作為參數(shù),如果傳入的變量存在則傳回true,否則傳回false。
 

 


那么如果在一個(gè)對(duì)象外面使用“isset()”這個(gè)函數(shù)去測(cè)定對(duì)象里面的成員是否被設(shè)定可不可以用它呢?
分兩種情況,如果對(duì)象里面成員是公有的,我們就可以使用這個(gè)函數(shù)來(lái)測(cè)定成員屬性,如果是私有的成員屬性,這個(gè)函數(shù)就不起作用了,原因就是因?yàn)樗接械谋环庋b了,在外部不可見(jiàn)。
則就只能使用__isset魔術(shù)方法來(lái)完成.




同樣,對(duì)于__unset的使用也一樣.

 

?__isset與__unset兩個(gè)函數(shù)的應(yīng)用


//__isset()方法
private function__isset($nm)
{
echo"isset()函數(shù)測(cè)定私有成員時(shí),自動(dòng)調(diào)用
<br>";
return isset($this->$nm);                 這里所測(cè)試的結(jié)果為true或者是false
}

//__unset()方法
private function__unset($nm)
{
echo"當(dāng)在類(lèi)外部使用unset()函數(shù)來(lái)刪除私有成員時(shí)自動(dòng)調(diào)用的
<br>";
unset($this->$nm);
}

 

穩(wěn)定

產(chǎn)品高可用性高并發(fā)

貼心

項(xiàng)目群及時(shí)溝通

專(zhuān)業(yè)

產(chǎn)品經(jīng)理1v1支持

快速

MVP模式小步快跑

承諾

我們選擇聲譽(yù)

堅(jiān)持

10年專(zhuān)注高端品質(zhì)開(kāi)發(fā)
  • 返回頂部