如果在类中变量,方法被设置权限,外部想要设置,访问可以使用参考以下:
__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__ 当前对象的方法名