魔术方法
魔术方法
是指某些情况下,会自动调用的方法,称为魔术方法。
构造方法
构造方法就是对象在实例化之后会自动调用的方法。
语法:__construct()
析构方法
析构方法:对象被销毁的时候(销毁前),会自动调用的方法
语法:__destruct()
__clone()
语法:变量 = clone 对象变量:
克隆对象的时候,被克隆出来的对象会去调用的方法。
class Human
{
public $name = '小明';
protected $age = '18';
private $money = 'xxx';
}
$p1 = new Human;
$p2 = clone $p1;
__get()
获取的意思,当对象去访问一个不存在或者权限不够的属性的时候,会自动触发的方法
@param string $param 访问的属性名;
function __get($param)
{
echo '你在访问'. $param .'属性值为:'. $this->$param .'<br>';
}
__set()
设置一个是不存在或者权限不够的属性的时候,会自动触发的设置方法。
@param string $param 设置的属性名;
@param string $val 性值;
function __set($param,$val)
{
echo '你在设置属性',$param,'值为:',$val;
}
__isset()
使用isset或者empty去判断一个权限不够或者不存在的对象属性的时候,会自动调用
@param string $param 设置的属性名;
function __isset($param)
{
echo $param;
return true;
}
Q:isset($obj->xyz) 属性为真,能说明类声明了一个xyz属性吗?
A:不能;
__unset()
当用unset销毁对象的不可见属性时,会引发 __unset();
function __unset($param)
{
echo '你想销毁我的',$param;
}
unset($p1->age);
unset($p1->money);
__call()
当去访问一个权限不够或者不存在的方法的时候,会自动触发的魔术方法。
function __call($key,$arr)
{
echo $key,' ',var_dump($arr);
}
注意:所有的魔术方法都是为了增加类的容错处理以及对结构的控制(对象)
__autoload()
自动加载类的方法 ,放在类的外部,当需要使用某个文件下下的所有类时,只需要设置一个自动加载类的方法,就可以直接通过实例化类名的方式获得类的对象
注意:1、路径问题
2、类文件的命名规范 文件名必须是 类名.class.php
魔术常量
__CLASS__:代表当前类名,只能类的内部使用
__FUNCTION__:代表当前方法名,只能类的内部使用