关于php中的一些常见的魔术方法
2016-12-07 21:35
441 查看
在接触到php中的面向对象的部分的时候,接触了一大堆的魔术方法,接下来我们对其一一介绍他们的使用场景,使用方法,参数和返回值。
首先介绍__construct与__destruct:class Test{ public $name='xiaoMing'; protected $age = 18; private $money = 300; public function __construct(){ echo '对象已经创建<br />'; } public function __destruct(){ echo '对象已经销毁<br />'; } } $test = new Test();
这两个魔术方法是在类创建和类销毁的时候自动调用的,说白了就是类的构造方法与析构方法,__construct就是构造方法,所以参数可有可无,如果你想下对象构建的时候对对象初始化,可以写在__construct的参数中,在方法体内给对象赋值。因为方法的性质,这两个方法都不需要返回值。
接着我们看看__toString与__debugInfo:
class Test{ public $name='xiaoMing'; protected $age = 18; private $money = 300; public function __toString(){ return '我是一个对象!'.'<br />'; } public function __debugInfo(){ return ['name'=>$this->name]; } } $test = new Test(); echo $test; var_dump($test);
顾名思义__toString是在对象被当成字符串处理时会调用,比如对象被直接echo的时候。因为是转换成字符串的操作,因此__toString需要返回一个字符串。__debugInfo会在对象被var_dump时被调用。返回值是一个数组,var_dump展示的就是这个数组
__invoke这是一个很无聊的函数,当对象被当成函数使用的时候会被触发,比如:
class B{ public function __invoke($args,$d){ var_dump( $args); var_dump($d); } } $b = new B(); $b('123','sdfds');
值得注意的是函数的参数要与调用的时候个数一致,返回值就是调用对象的返回值。
__clone,是由对象被克隆的时候由新对象调用。唯二值得注意的是是新的对象调用和对象被克隆的时候,要经过clone函数
__sleep与__wakeup是一对相反的函数,前者是对象被序列化的时候调用,后者是字符串被反序列话成对象的事后调用:
class Person{ public $name; public $age; //构造方法 public function __construct($name,$age){ $this->name = $name; $this->age = $age; echo '此处构造了一个新的对象<br />'; } //析构方法 public function __destruct(){ echo '对象已经销毁<br />'; } //对象被转换成字符转是执行的方法 public function __toString(){ return '我是一个对象!<br />'; } //对象被序列换是执行的方法 public function __sleep(){ return ['name']; } //对象被反序列化时调用的方法 public function __wakeup(){ //此处可以对对象的属性进行一些修改,无需返回值 } //对象被var_dump()是调用的方法 public function __debuginfo(){ return [ 'name'=>$this->name, //'age'=>$this->age, ]; } public function __clone(){ echo '克隆开始了<br />'; } //当对象被当做函数来调用的时候 public function __invoke(){ //参数和返回值根据自己的需要自定义即可 echo '是不是就乱用!<br />'; } } $xiaoMing = new Person('xiaoming',20);//创建对象 echo $xiaoMing;//对象被当做字符串处理 var_dump($xiaoMing);//触发__debugInfo $xiaoli = unserialize(serialize($xiaoMing));//序列化与反序列化 $xiao = clone $xiaoMing;//克隆
当然魔术方法还有很多,这里只介绍了一部分。
相关文章推荐
- phpcms调用一个指定的栏目的url和栏目名称
- 轻松搞定laravel的curd操作搞定简易留言版(四)
- thinkPHP第一个坑【心疼脸】
- 关于PHP的基础命令(一)
- php和uploadify上传文件出现的问题及解决办法
- php二维数组排序 根据某一键值排序 array_multisort
- php 闭包函数(匿名函数)的应用
- 对 PHP SESSION 的深刻认识(二)
- 浅析Yii2的view层设计
- phpmyadmin 数据库操作
- PHP过滤所有特殊字符的函数
- php缓存技术
- qrcode-php生成二维码
- php实现页面静态化
- ThinkPHP 字母函数详解
- PHP设计模式——单例模式
- PHP设计模式笔记
- php面向对象之访问权限修饰符
- gstreamer让playbin能够播放rtp over udp流数据
- PHP goto