构造方法(构造函数)
触发条件:由类生成一个对象时触发
方法名: __construct
作用:对象的初始化
析构方法:
触发条件:当对象释放的时候则触发
方法名:__destruct
作用:释放或关闭资源
什么时候会销毁对象?
1、当php脚本执行结束(php文件加载完毕),会释放所有的资源
2、通过unset()手动释放对象
unset() 不一定导致对象的释放,当所有引用对象的变量都被unset掉之后,对象才会被释放
只要有一个没有被释放,则对象都不会释放
clone 对象:
1、克隆可以产生新对象,不会触发构造方法
2、魔术方法 __clone
触发条件:当克隆对象的时候触发
对象克隆与对象赋值的区别?
克隆:产生新的对象,一个对象发生改变其他的不会改变。彼此之间相互独立
赋值:不会产生新的对象,只是增加对对象的引用,一个发生变化其他的都会随之改变
unset(变量名):释放变量
__unset($name):
触发场景:当释放一个不可见的成员属性的时候触发该魔术方法
参数:
$name:获取你要释放不可见的成员属性名
__toString()
触发条件:当你echo一个对象的时候会触发该魔术方法
返回值:返回值必须是一个字符串,用于代替对象输出展示
__sleep:
触发条件:当序列化一个对象的时候触发
返回值:类型为一个数组,里面包含要序列化的成员属性名
__wakeup:
触发条件:当反序列化生成一个对象的时候触发
serialize 序列化
unserialize 反序列化
__set($name,$value)
触发场景:当设置一个类中不可见的成员属性触发该魔术方法
参数:
$name:接收不可见的成员属性名
$value:要设置的值
empty:判断一个变量是否为空
isset:判断一个变量是否存在
__isset($name):
触发条件:使用empty或isset判断一个不可见的成员属性是否为空或是否存在的时候触发
参数:
$name:接收要检测的不可见的成员属性名
魔术方法:
1、方法名
2、触发条件
3、参数:参数代表的含义
4、返回值:含义和数据类型
不可见说明:
1、无权访问
2、不存在
__get:当访问类中不可见的成员属性的时候触发
参数:
必须有一个参数,用来接收不可见成员属性的名称
__callStatic($name,$args)
触发场景:当你访问不可见的静态成员方法时触发该魔术方法
参数:
$name:接收访问不可见的成员方法名
$args:接收调用方法时传入的参数,数据类型是数组
注意:
1、该魔术方法需为静态方法
2、静态成员方法中只能含有静态成员属性,不可以含有非静态成员属性
3、类常量是否可以存在于静态方法中?可以
__call($name,$args)
触发场景:当你访问不可见的成员方法时触发该魔术方法
参数:
$name:接收访问不可见的成员方法名
$args:接收调用方法时传入的参数,数据类型是数组
__autoload($className)
触发条件:在使用不存在的类的时候会自动触发该函数
作用:实现类的自动加载
参数: $className 接受类名
__autoload() 已经被弃用 建议使用 spl_aotoload_register()
举例说明
1 魔术方法 __get() 当试图读取一个并不存在的属性的时候被调用。
如果试图读取一个对象并不存在的属性的时候,PHP就会给出错误信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中反射的各种操作。
class Test
{
public function __get($key)
{
echo $key . " 不存在";
}
}
$t = new Test();
echo $t->name; 就会输出:name 不存在
2 魔术方法 __set() 当试图向一个并不存在的属性写入值的时候被调用。
class Test
{
public function __set($key, $value)
{
echo '对' . $key . "附值" . $value;
}
}
$t = new Test();
$t->name = "aninggo"; 就会输出:对 name 附值 aninggo
3 魔术方法 __call() 当试图调用一个对象并不存在的方法时,调用该方法。
class Test
{
public function __call($Key, $Args)
{
echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true);
}
}
$t = new Test();
$t->getName(aning, go); 程序将会输出:
您要调用的 getName 方法不存在。参数是:Array
(
[0] => aning
[1] => go
)4 魔术方法 __toString() 当打印一个对象的时候被调用,这个方法类似于java的toString方法,当我们直接打印对象的时候回调用这个函数。
class Test
{
public function __toString()
{
return "打印 Test";
}
}$t = new Test();
echo $t; 运行echo 的时候,就会调用 __toString(); 从而程序将会输出:打印 Test;
5 魔术方法__clone() 当对象被克隆时,被调用。
class Test
{
public function __clone()
{
echo "我被复制了!";
}
}
$t = new Test();
$t1 = clone $t; 程序输出:我被复制了!