在 php 中,以双下划线(__)开始命名的方法被称作 PHP 中的魔术方法,它们在 PHP 中充当很重要的角色 。魔术方法包括:
文章插图
本文将使用一些实例展示 PHP 魔术方法的运用 。
1.__construct()当创建对象时,PHP 类的构造方法是第一个被调用的方法 。每个类都有构造方法 。若你没在类中明确声明定义它,将会有一个默认的无参类构造方法存在,虽然它不会在类中定义出现 。
1) 构造方法的运用
类的构造方法通常用于执行一些初始化任务,诸如当创建对象时,为成员初始化赋值 。
2) 类中构造方法的声明格式
function __constrct([parameter list]){方法具体实现 //通常为成员变量初始赋值 。}
注意: 在多数类中仅可以声明一个构造方法 。因为,PHP 不支持构造方法重载 。下面是个完整的例子:
<?phpclass 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}
析构函数不能带参数析构函数的使用析构函数在类中一般不常见 。它是类的可选部分,通常用于在类销毁之前完成一些清理任务 。
这是使用析构函数的示例:
<?phpclass 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() 方法将被调用 。示例
<?phpclass 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); // Print the parameter list of the method that is not existed.echo ")does not exist!!<br>n";}}$Person = new Person();$Person->run("teacher"); // If the method which is not existed is called within the object, then the __call() method will be called automatically.$Person->eat("John", "Apple");$Person->say();
显示结果The function you called: run (parameter: Array([0] => teacher)) does not exist!The function you called: eat (parameter: Array([0] => John[1] => apple)) does not exist!Hello world!
4. __callStatic()当在程序中调用未定义的静态方法,__callStatic() 方法将会被自动调用 。__callStatic() 的用法类似于 __call() 。下面举个例子:
<?phpclass Person{function say(){echo "Hello, world!<br>";}public static function __callStatic($funName, $arguments){echo "The static method you called:" . $funName . "(parameter:" ;// 打印出未定义的方法名 。print_r($arguments); // 打印出未定义方法的参数列表 。echo ")does not exist!<br>n";}}$Person = new Person();$Person::run("teacher"); // 如果此项目内不存在的方法被调用了,那么 __callStatic() 方法将被自动调用 。$Person::eat("John", "apple");$Person->say();
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 科普5个良心电脑浏览器插件,免费无广告,好用到见人就推荐
- 清朝和宋朝哪个强大 清朝和宋朝
- 别再问用 Go 语言如何对接微信支付了:看看这个包
- 一个 8 年 PhpStorm 使用者的配置分享
- ThinkPHP5 5.0.23 远程代码执行漏洞
- 个人公众号怎么挣钱运营技巧有哪些?
- APP下载量低是什么原因?要做好这几个优化步骤
- 喝茶应该配什么茶点,个茶壶配应该配几个茶杯
- 春季老人健康养生 五个小条件可“成人之美”
- 为救曹操而死的大将 谁第一个被曹操处死