<?php
class Person
{
public $name;
public $age;
/**
* moshu constructor.
* @param $name
* @param $age
* 执行时机:在使用 new关键字使用类实例化一个对象时自动执行
* 功能作用:通常用于对对象的属性进行初始化
*/
public function __construct($name,$age)
{
$this->name = $name;
$this->age = $age;
print '对象已经创建';
}
/**
* 执行时机:在对象被销毁(unset或PHP执行结束)时自动执行
* 功能作用:通常用于释放对象占用的第三方资源(如:数据库)
*/
public function __destruct(){
print '对象已经销毁';
}
/**
* @return mixed
* 执行时机:在对象被当成字符串使用时自动执行
* 功能作用:兼容对象的字符串调用形式,根据用户需求显示出对象的字符串形态
*/
public function __toString()
{
return $this->name;
}
/**
* 执行时机:在对象被当成函数使用时自动执行
* 功能作用:兼容对象的函数调用形式,允许用户像使用函数一样使用对象
*/
public function __invoke()
{
echo '姓名:'.$this->name.'年龄:'.$this->age;
}
public function __clone()
{
echo '谁在克隆我?';
}
}
$m1 = new Person('单凌峰','25');
//echo $m1->name; //对象已经创建 单凌峰 对象已经销毁
//unset($m1); //对象已经创建 对象已经销毁
//echo $m1.'在吃饭'; //对象已经创建 单凌峰在吃饭 对象已经销毁
//$m1(); //对象已经创建 姓名:单凌峰年龄:25 对象已经销毁
$m2 = clone $m1; //对象已经创建 谁在克隆我? 对象已经销毁 对象已经销毁
还有一些不经常使用的魔术方法,例如:
1、__get、__set
这两个方法是为在类和他们的父类中没有声明的属性而设计的
__get( $property ) 当调用一个未定义的属性时访问此方法
__set( $property, $value ) 给一个未定义的属性赋值时调用
这里的没有声明包括访问控制为proteced,private的属性(即没有权限访问的属性)
2、__isset、__unset
__isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法
__unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法
与__get方法和__set方法相同,这里的没有声明包括访问控制为proteced,private的属性(即没有权限访问的属性)
3、__call
__call( $method, $arg_array ) 当调用一个未定义(包括没有权限访问)的方法是调用此方法
4、__autoload
__autoload 函数,使用尚未被定义的类时自动调用。通过此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。