加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP之十六个把戏要领详解

发布时间:2016-10-29 23:47:45 所属栏目:PHP教程 来源:segmentfault
导读:副标题#e# 前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括: __construct(),,类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不可访问方法时调用 __callSt

运行结果:

  1. 当在类外部使用serialize()时会调用这里的__sleep()方法 
  2.  
  3. string(58) "O:6:"Person":2:{s:4:"name";s:8:"5bCP5piO";s:3:"age";i:25;}" 当在类外部使用serialize()时会调用这里的__sleep()方法 
  4.  
  5. 当在类外部使用unserialize()时会调用这里的__wakeup()方法 
  6.  
  7. object(Person)#2 (3) { ["sex"]=> string(3) "男" ["name"]=> int(2) ["age"]=> int(25) }  

十一、 __toString(),类被当成字符串时的回应方法

作用:

__toString() 方法用于一个类被当成字符串时应怎样回应。例如 `echo $obj;` 应该显示些什么。

注意:

此方法必须返回一个字符串,否则将发出一条 `E_RECOVERABLE_ERROR` 级别的致命错误。

警告:

不能在 __toString() 方法中抛出异常。这么做会导致致命错误。

代码:

  1. <?php 
  2. class Person 
  3.     public $sex; 
  4.     public $name; 
  5.     public $age; 
  6.  
  7.     public function __construct($name="",  $age=25, $sex='男') 
  8.     { 
  9.         $this->name = $name; 
  10.         $this->age  = $age; 
  11.         $this->sex  = $sex; 
  12.     } 
  13.  
  14.     public function __toString() 
  15.     { 
  16.         return  'go go go'; 
  17.     } 
  18.  
  19. $person = new Person('小明'); // 初始赋值  

结果:

  1. go go go 

那么如果类中没有 __toString() 这个魔术方法运行会发生什么呢?让我们来测试下:

代码:

  1. <?php 
  2. class Person 
  3.     public $sex; 
  4.     public $name; 
  5.     public $age; 
  6.  
  7.     public function __construct($name="",  $age=25, $sex='男') 
  8.     { 
  9.         $this->name = $name; 
  10.         $this->age  = $age; 
  11.         $this->sex  = $sex; 
  12.     } 
  13.      
  14.  
  15. $person = new Person('小明'); // 初始赋值 
  16. echo $person;  

结果:

  1. Catchable fatal error: Object of class Person could not be converted to string in D:phpStudyWWWtestindex.phpon line 18 

很明显,页面报了一个致命错误,这是语法所不允许的。

十二、 __invoke(),调用函数的方式调用一个对象时的回应方法

作用:

当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

注意:

本特性只在 PHP 5.3.0 及以上版本有效。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读