__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);