在 PHP 中,以双下划线(__)开始命名的方法被称作 PHP 中的魔术方法,它们在 PHP 中充当很重要的角色。魔术方法包括:
![992a3a99ffc9e30a7d6b482ea00e7bf8.png](https://img-blog.csdnimg.cn/img_convert/992a3a99ffc9e30a7d6b482ea00e7bf8.png)
本文将使用一些实例展示 PHP 魔术方法的运用。
我的官方群点击此处。
700粉丝福利安排一波,工作中准备的,大家随便拿
程序猿的生活:【社群福利】30G-PHP进阶资料,助力大家都能30Kzhuanlan.zhihu.com![88d8081b22f0f2e639966659d44acdaf.png](https://img-blog.csdnimg.cn/img_convert/88d8081b22f0f2e639966659d44acdaf.png)
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()
方法将被调用。
示例
<?php
class Person
{
function say()
{
echo "Hello, world!<br>";
}
function __call($funName, $arguments)
{
echo "The function you called:" . $funName . "(parameter:" ; // Print the method's name that is not existed.
print_r($arguments); //