1、构造函数:__construct():
构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数。
function __construct($name){
$this -> name = $name;
}
2、析构函数:__destruct():
①析构函数在对象被销毁释放之前自动调用;
②析构函数不能带有任何的参数;
③析构函数常用于对象使用完以后,释放资源,关闭资源等。
function __destruct(){
echo "over!";
}
3、 __set($key,$value):
给类私有属性赋值时自动调用,调用是给方法传递两个参数:需要设置的属性名、属性值
function __set($key,$value){
if($key=='name'){
$this->$key=$value."(这是__set设置的文字!)";
return;
}
}
4、 __get($key):
给获取类私有属性时自动调用,调用是给方法传递一个参数:需要获取的属性名
function __get($key){
return $this->$key;
}
5、 __isset($key):
外部使用isset()函数检测私有属性时,自动调用。
>>>类外部使用isset();检测私有属性,默认检测不到(false)
>>>所以,我们可以使用__isset()函数,在自动调用时,返回内部检测结果
function __isset($key){
return isset($this->$key);
}
当外部使用isset($对象名->私有属性);检测时,将自动调用上述__isset()返回的结果!
6、 __unset($key):
外部使用unset()函数删除私有属性时,自动调用;
function __unset($key){
unset($this->$key);
}
当外部使用unset($对象名->私有属性);删除属性时,自动将属性名传给__unset(),并交由这个魔术方法处理
7、__clone:
① 当使用clone关键字,克隆对象时,自动调用clone函数
② __clone()函数类似于克隆是使用的构造函数,可以给新克隆对象赋初值
③ 克隆函数里面的$this指的是新克隆的对象
class Person{
public $name;
public $age;
function __construct($name,$age){
$this->name=$name;
$this->age=$age;
}
function __clone(){$this->name="李5";
} }
$zhangsan=new Person("张三",14);
$lisi=clone $zhangsan;
8、__tostring()
当使用echo等输出语句,直接打印对象时,调用 echo $zhangsan;那么, 可以指定__tostring()方法的返回值,返回值需要是字符串。
则使用echo函数打印时,将会打印出__tostring()函数返回的字符串
function __tostring(){
return "hahaha";
}
echo $zhangsan;
9、__call()
调用类中未定义或未公开的方法时,会自动执行__call()方法,自动执行时,会给call方法传递两个参数:
① 调用的方法名
② (数组)调用的方法的参数列表
function __call($funcName,$funcParams){
echo "{$funcName}<br>";
print_r($funcParams);
}
10、__autoload()
① 这是唯一一个不在类中使用的魔术方法
② 当实例化一个不存在的类时,自动调用这个魔术方法
③ 调用时,会自动给__autoload()传递一个参数:实例化的类名
所以,可以实现 使用这个方法,自动加载类文件的功能:
function __autoload($className){
include strtolower($className).".class.php"
}
$zhangdan=new Person("战三");
//本文件没有Person类,会自动执行__autoload加载person.class.php文件
11、__sleep():
① 当执行对象串行化(将对象通过一系列操作,转化为字符串的过程,称为串行化)的时候,会自动执行__sleep()函数;
② __sleep()函数要求返回一个数组,数组中的值,就是可以串行化的属性, 不在数组中的属性,不能被串行化。
function __sleep(){
return array("name","age");
}
12、__wakeup()
① 当反串行化对象时,自动调用__wakeup()方法;
② 自动调用时,用于给反串行化产生的新对象的属性,进行重新赋值;
function __wakeup(){
$this->name="李四";
}