PHP面向对象之魔术方法

1) __set:自动调用set方法   __get

// 以上类Fruit中有两个私有的成员变量,设置了__set和__get以后,
// 可以直接通过下面这种方式对成员变量进行调用。
class Fruit {
    private $color;
    private $weight;
    public function __set($name,$value) {
    $this->$name=$value;
    }
    public function __get($name) {
    return $this->$name;
    }
}
$fruit = new Fruit();
    $fruit->color = 'yellow';
echo $fruit->color;

__isset():当外部试图通过isset()函数访问私有成员时,会调用__iset()魔术方法;

class Test {
    private $abc = 'abc';
    public function __isset($var) {
    return isset($this->$var)? true:false;
}
}
    $test = new Test();
    var_dump(isset($test->abc));

//打印boolean true

__unset():用户在删除一个私有成员时,会回调该函数:

class Test {
    private $abc = 'abc';

    public function __unset($var) {
    unset($this->$var);
    }
}
$test = new Test();
    unset($test->abc);
//会调用__unset魔术方法,将此私有变量删除

2) __call:当我们需要调用的方法不存在时,调用此魔术方法;

    class Test {
    private $abc = 'abc';
    public function __call($func,$arguments) {
    echo($func."<br/>");
    print_r($arguments);
    }}
    $test = new Test();
    $test->goto(1,'ok','3');

    打印:

    goto
    Array ( [0] => 1 [1] => ok [2] => 3 )

__callStatic():当静态方法不存在时,会自动调用此魔术方法:

class Test {
    private $abc = 'abc';

    public static function __callStatic($method,$arguments) {
    echo($method."<br/>");
    print_r($arguments);
    }
}
    // $test = new Test();
    Test::gogo(1,'ok','3');

打印:

    gogo
    Array ( [0] => 1 [1] => ok [2] => 3 )

3) __invoke():当以函数的方式使用对象时,会调用此方法;

class Test {
    public function __invoke($args) {
    print_r($args);
}

}
    $test = new Test();
    $test('gogogo....');

    打印:gogogo....

4) __toString():当打印对象时,此方法被自动调用

class Test {
    public function __toString() {
    return 'hello,world';
}

}
$test = new Test();
    echo($test);






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值