首页 > 代码库 > php学习九:存取器&魔术方法

php学习九:存取器&魔术方法

当声明属性的时候用到了private,那么的话只能本类中才能访问此属性,其他地方无法使用,这个时候需要给外界提供一些方法来使外界访问

方法一:存取器:

可以提供一个public的方法来使外界对类里面的属性进行访问和赋值

class Student{    private $name;    private $age;    public function show(){        echo "{$this->name}今年{$this->age}岁了";    }    /*****存取器:get,set******/    /****提供set方法给外界赋值***/    public function setName($name){        $this->name=$name;    }    public function setAge($age){        if($age<0){            $this->age = "18";        }else{            $this->age=$age;        }    }    /******提供get方法给外界取值**********/    public function getName(){        return $this->name;    }    public function getAge(){        return $this->age;    }}

 实例化的代码:

$stu = new Student();/*****不能直接访问,需要用类里面的set,get方法来访问******/$stu->setName("房明");echo $stu->getName();$stu->setAge(-18);echo $stu->getAge();$stu->show();

  

方法二:魔术方法进行访问

在php中文诶我们提供了许多的魔术方法,在这里我们只要是某某一个魔术方法就可以完成我们想要的效果

*__set():赋值
* __get():取值
* __isset():是否有这个属性
* __unset():销毁某个属性

代码如下:
class User{    private $name;    private $age;    /*****__set():赋值****/    function __set($name,$value)    {        if($name == "age"){            if($value <18){                $this->age = 18;            }else{                $this->age = $value;            }        }else{            $this->$name = $value;        }    }    /****__get():取值***/    function __get($name)    {        if($name == "name"){            return "dog";        }else{            return $this->$name;        }    }    /***** __isset():是否有这个属性****/    //当当前属性被isset()或者empty(),即当某个属性被检验空的方法调用的时候,会触发这个方法    function __isset($name)    {        echo "{$name}isset被调用了";    }    /*******__unset():销毁某个属性******/    //    function __unset($name)    {        echo "{$name}被销毁了";        //防止被销毁的时候直接写一个return即可;    }    public function show(){        echo "{$this->name}今年{$this->age}岁了";    }}

  魔术方法进行访问:

$user = new User();$user->name = "房明";$user->age = 10;echo $user->name;echo $user->age;$user->show();isset($user->name);unset($user->name);

  

php学习九:存取器&魔术方法