带你吃透16个PHP魔术方法
发布时间:2022-08-10 11:22:23 所属栏目:PHP教程 来源:互联网
导读:在PHP中,以双下划线(__)开始命名的方法被称作PHP中的魔术方法,它们在PHP中充当很重要的角色。魔术方法包括: 方法名 描述 __construct() 类的构造函数 __destruct() 类的析构函数 __call($funName, $arguments) 当调用一个未定义或不可达方法时, __call
|
在PHP中,以双下划线(__)开始命名的方法被称作PHP中的魔术方法,它们在PHP中充当很重要的角色。魔术方法包括: 方法名 描述 __construct() 类的构造函数 __destruct() 类的析构函数 __call($funName, $arguments) 当调用一个未定义或不可达方法时, __call() 方法将被调用。 __callStatic($funName, $arguments) 当调用一个未定义或不可达的静态方法时, __callStatic() 方法将被调用。 __get($propertyName) 当获取一个类的成员变量时, __get() 方法将被调用。 __set($property, $value) 当赋值一个类的成员变量时, __set() 方法将被调用。 __isset($content) 当调用 isset() 或 empty() 对一个未定义或不可达的成员赋值时, __isset() 方法将被调用。 __unset($content) 当调用 reset() 对一个未定义或不可达的成员更新时, __unset() 方法将被调用。 __sleep() 当执行序列化 serialize() 时,__sleep() 方法将首先被调用。 __wakeup() 当执行反序列化 deserialization() 时, __wakeup() 方法将首先被调用。 __toString() 当使用 echo 方法直接输出显示对象时,__toString() 方法首先被调用。 __invoke() 使用调用函数(function)访问一个对象时, __invoke() 方法将首先被调用。 __set_state($an_array) 当调用 var_export() 方法时,__set_state() 方法将被调用。 __clone() 当对象被复制赋值时,__clone() 方法将被调用。 __autoload($className) 试图载入一个未定义的类时调用。 __debugInfo() 输出 debug 信息。 本文将使用一些实例展示 PHP 魔术方法的运用。 1.__construct() 当创建对象时,PHP 类的构造方法是第一个被调用的方法。每个类都有构造方法。若你没在类中明确声明定义它,将会有一个默认的无参类构造方法存在,虽然它不会在类中定义出现。 1) 构造方法的运用 类的构造方法通常用于执行一些初始化任务,诸如当创建对象时,为成员初始化赋值。 2) 类中构造方法的声明格式 function __constrct([parameter list]){ 方法具体实现 //通常为成员变量初始赋值。 } 注意: 在多数类中仅可以声明一个构造方法。因为, PHP 不支持构造方法重载。 下面是个完整的例子: <?php class Person { public $name; public $age; public $sex; /** * 明确定义含参的构造方法 */ public function __construct($name="", $sex="Male", $age=22) { $this->name = $name; $this->sex = $sex; $this->age = $age; } /** * say 方法定义 */ public function say() { echo "Name:" . $this->name . ",Sex:" . $this->sex . ",Age:" . $this->age; } } 无参创建 $Person1 对象。 $Person1 = new Person(); echo $Person1->say(); //显示:Name:,Sex:Male,Age:22 使用一个参数 "Jams" 调用创建 $Person2 对象。 $Person2 = new Person("Jams"); echo $Person2->say(); // 显示: Name: Jams, Sex: Male, Age: 22 使用3个参数调用创建 $Person3 对象。 $Person3 = new Person ("Jack", "Male", 25); echo $Person3->say(); // 显示:Name: Jack, Sex: Male, Age: 25 __destruct() 析构函数与构造函数相反。 析构函数允许你在销毁对象之前执行一些操作,例如关闭文件,清空结果集等等。 析构函数是 PHP 5 引入的新功能。 析构函数的声明与构造函数类似,以两个下划线开头,名称固定为 __destruct()。 析构函数的声明 function __destruct() { //method body } 析构函数不能带参数。 析构函数的使用 析构函数在类中一般不常见。它是类的可选部分,通常用于在类销毁之前完成一些清理任务。 这是使用析构函数的示例: <?php class Person{ public $name; public $age; public $sex; public function __construct($name="", $sex="Male", $age=22) { $this->name = $name; $this->sex = $sex; $this->age = $age; } /** * say method */ public function say() { echo "Name:".$this->name.",Sex:".$this->sex.",Age:".$this->age; } /** * declare a destructor method */ public function __destruct() { echo "Well, my name is ".$this->name; } } $Person = new Person("John"); unset($Person); //destroy the object of $Person created above 输出结果 Well, my name is John __call() 该方法接受两个参数。第一个参数为未定义的方法名称,第二个参数则为传入方法的参数构成的数组 使用 function __call(string $function_name, array $arguments) { // method body } 在程序中调用未定义方法时, __call() 方法将被调用。 (编辑:揭阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



