常见的几种魔术变量

如果在类中变量,方法被设置权限,外部想要设置,访问可以使用参考以下:

__set和__get

class Tets{
    private $a = '';
    public function __set($var,$val){
        $this->$val = $val;
    }
    public function __get($var){
        return $this->$var;
    }
}

$test = new Test();
$test->a = 'abc';     //如果没有设置__set会报错,因为外部不能调用private的变量
var_dump($this->a);

__isset

class Test{
    private $abc = 'abc';

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

 __unset

class Test{
    private $abc = 'abc';

    public function __unset($var){
        unset($this->$var);
    }
}
$test = new Test();
unset($test->abc);

__call

class Test{
    public function __call($func,$arguments){
        echo($func."<br/>");
        print_r($arguments);
    }
}

$test = new Test();
$test->go(1,'ok'); //当实例化对象没有找到方法,就会自动调用__call();

__callStatic

class Test{
    public static function __callStatic($func,$arguments){
                echo($func."<br/>");
        print_r($arguments);
    }
}
Test::go(1,'ok');  //没有找到类方法就自动调用__callStatic()

__invoke

class Test{
    public function __invoke($arg){
        var_dump($arg);
    }
}

$test = new Test();
$test('go....');  //直接将实例化的对象当做函数来执行就用__invoke()

__toString

class Test{
    public function __toString(){
        return "hello;;;";
    }
}

$test = new Test();
echo $test;   //直接打印实例化对象,就可以使用__toString

 

 

其他常见魔术变量

__clone() 当对象被克隆时,被调用

__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用。

__destruct() 当删除一个对象或对象操作终止的时候,调用该方法。

系统常量

__FILE__ 当前文件名
__LINE__ 当前行数
__FUNCTION__ 当前函数名
__CLASS__ 当前类名
__METHOD__ 当前对象的方法名

posted @ 2017-11-12 21:04  自行脑补  阅读(1113)  评论(0编辑  收藏  举报