__construct:构造函数,一旦创建对象都就会自动调用
__call:当调用了未定义的方法时会自动触发
__set:当给类外部不可访问的属性设置值时会自动触发
__get:当获取类外部不可访问的属性时会自动触发
__isset:当对类外部不可访问的属性使用了isset()或empty()时会自动触发
__unset:当对类外部不可访问的属性使用了unset()时会自动触发
__destruct:当对象结束其生命周期时就会自动触发
<?php header("content-type:text/html;charset=UTF-8");class Magic{ ???private $testGet; ??????//私有测试__get魔术方法的属性 ???private $testSet; ??????//私有测试__set魔术方法的属性 ???private $testIsset; ????//私有测试__isset魔术方法的属性 ???private $testUnset; ????//私有测试__unset魔术方法的属性 ???public static $a=1; ????//私有用于测试__clone魔术方法的常量 ???/** ????* 测试构成方法,创建新对象时先调用此方法 ????*/ ???public function __construct(){ ???????echo static::$a+2; ???????echo "这是构造函数"."<br>"."<br>"; ???} ???/** ????* 测试isset方法,这是当不可访问的属性被调用了isset()或者empty()方法时会触发 ????*/ ???public function __isset($name){ ???????echo "对不可访问属性:".$name."调用 isset() 或 empty()"."<br>"."<br>"; ???} ???/** ????* 测试unset方法,这是当不可访问的属性被调用了unset()方法时会触发 ????*/ ???public function __unset($name){ ???????echo "当对不可访问属性:".$name."调用unset()"."<br>"."<br>"; ???} ???/** ????* 测试call方法,这是当调用了未定义的方法时会触发 ????*/ ???public function __call($method,$agrs){ ???????echo "调用了不存在的方法:".$method."<br>"."这是接收的参数:"; ???????print_r($agrs); ???????echo "<br>"."<br>"; ???} ???/** ????* 测试set方法,这是当不可访问的属性被设置时会触发 ????*/ ???public function __set($name,$data){ ???????echo "调用了不可设置的属性:".$name."<br>"."参数为:".$data."<br>"; ???} ???/** ????* 测试get方法,这是当不可访问的属性被访问时会触发 ????*/ ???public function __get($name){ ???????echo "调用了不可获取的属性:".$name."<br>"."<br>"; ???} ???/** ????* 测试clone方法,这是类被克隆时会触发 ????*/ ???public function __clone(){ ???????echo static::$a+1; ???????echo "我被克隆了"."<br>"."<br>"; ???} ???/** ????* 测试析构方法,这是当在脚本关闭时被调用 ????*/ ???public function __destruct(){ ???????echo "这是析构函数"; ???}}$test=new Magic(); //实例化Magic类,触发构造函数$test->callMethod(‘123‘); ??//调用不存在的方法$test->testSet=123; ????//设置类外部不可访问的属性$test->testGet; ????????//获取类外部不可访问的属性$test2=clone $test; ????//克隆test类,开辟了另一份一模一样的属性和方法存储空间,但相互不会影响isset($test->testIsset); ??????//用isset执行类外部不可访问的属性unset($test->testUnset); ???????//用unset执行类外部不可访问的属性
php常用的魔术方法
原文地址:https://www.cnblogs.com/legendheng/p/9175692.html