__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执行类外部不可访问的属性