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);

  

转载于:https://www.cnblogs.com/mmykdbc/p/6647312.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值