PHP魔术方法

__get 和 __set

当变量为私有的时候,可以使用__get 和 __set方法来获取和设置私有变量的值

class Test{
    private $aaa= 'aaa';
    private $bbb = 'bbb';
    public function  __set($name, $value)
    {
        // TODO: Implement __set() method.
        $this->$name = $value;
    }
    public function __get($name)
    {
        // TODO: Implement __get() method.
        return $this->$name;
    }
}
$test = new Test();
$test->aaa = '123';
$test->bbb = '456';
echo $test->aaa;
echo $test->bbb;

 

__isset

//isset()是检测私有属性是否存在
//为了避免当调用的方法不存在时产生的错误 使用__call(方法名,方法的参数)

class Demo2{
    private $aaa = '123';
    public function __isset($name)
    {
        // TODO: Implement __isset() method.
        return isset($this->$name)?true:false;
    }
}

$demo = new Demo2();
echo isset($demo->aaa);
// 1
var_dump(isset($demo->aaa));
//bool(true)

echo isset($demo->bbb);
//
var_dump(isset($demo->bbb));
//bool(false)

 

__unset方法

//unset()用来删除属性方法
//__unset 用户在删除私有属性时 __unset方法会进行一个回调


class Demo3{
    private $aaa = '123';

    public function __unset($name)
    {
        // TODO: Implement __unset() method.
        echo ("unset:".$name);
        unset($this->$name);
    }
}

$demo3 = new Demo3();
unset($demo3->aaa);

 

 

__call

//call 当调用方法不存在时 该方法自动调用
class Demo4{
    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        echo $name;
        print_r($arguments);
    }
}

$demo4 = new Demo4();
$demo4->go();

 

 

__callStatic

//__callStatic 当静态方法不存在时 自动调用
class Demo5{
    public static function __callStatic($name, $arguments)
    {
        // TODO: Implement __callStatic() method.
        echo $name;
        print_r($arguments);
    }
}
Demo5::go(5);

 

__invoke

//把类当做方法的时候调用魔术方法__invoke
//__invoke方法,当直接将对象当成函数使用时自动调用该方法
class Demo6{
    public function __invoke($var)
    {
        // TODO: Implement __invoke() method.
        echo $var;
    }
}
$demo6 = new Demo6();
$demo6('aaa');

__toString

//__toString当打印对象时调用
class Demo7{
    public function __toString()
    {
        // TODO: Implement __toString() method.
        //注意  必须有返回
        return 'hello';
    }
}

$demo7 = new Demo7();
echo ($demo7);

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值