__isset和__unset方法


<?php
class MagicTest{
//__tostring会在把对象转换为string时自动调用
public function __tostring(){
return "This is the class MagicTest";
}
//__invoke会把在对象当做一个方法的时候自动调用
public function __invoke($x){
echo "_invoke called with parameter ".$x."\n";
}
//方法的重载
//这个方法的参数第一个就是调用的方法的名称,第二个参数是方法调用的参数组成的数组
public function __call($name,$arguments){
echo "calling ".$name." with parament:".implode(",",$arguments)."\n";
}
//静态方法的重载,需要将这个方法设定成static
public static function __callStatic($name,$arguments){
echo "calling static ".$name. " with parament:".implode(",",$arguments)."\n";
}
//属性承载
public function __get($name){
return "getting the property ".$name;
}
public function __set($name,$value){
echo "setting the property".$name." to value".$value."\n";
}
public function __isset($name){
echo "__isset invoked\n";
return false;
}
public function __unset($name){
echo "unsetting property ".$name."\n";
}
}
$obj=new MagicTest();
// echo $obj."\n";
// $obj(5);
// $obj->runTest("para1","para2");
// //静态调用
// MagicTest::runTest("para1","para2");
echo $obj->ClassName."\n";
$obj->ClassName='magicClassX';
echo '$obj->ClassName is set?'.isset($obj->ClassName)."\n";
echo '$obj->ClassName is empty?'.empty($obj->ClassName)."\n";
unset($obj->ClassName);
?>
通过__get __set __isset __unset这四个魔术方法我们可以对没有被的类进行操作
3.__isset()方法:当【不可访问属性或未定义的属性】调用isset()或empty()时,此方法被调用
·调用示例:public function __isset($name){}
4.__unset()方法:当【不可访问属性或未定义的属性】调用unset()时,此方法被调用
对不可访问属性调用isset()和empty()时,会触发__isset()魔术方法,注意isset和empty不是相反的关系,isset判断的是值是否被定义过,empty认为没定义过的返回true
这几个魔术方法的核心意义?存在意义?
讲师语录:通过__get()、__set()、__isset()、__unset()等能够让我们操作在类中没有被定义的属性的名称;这是这几个魔术方法的最大效果(目的/用法);
我们把这种方式成为属性的重载