php魔术方法介绍

  1. PHP5魔術方法  
  2. 魔术常量  
  3.   1。__LINE__  
  4.   返回文件中的当前行号。  
  5.   2。__FILE__  
  6.   返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。  
  7.   3。__FUNCTION__  
  8.   返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。  
  9.   4。__CLASS__  
  10.   返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。  
  11.   5。__METHOD__  
  12.   返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。  
  13.   
  14. 魔术函数:    
  15. 1。__construct()  
  16.   构造函数 : 实例化对象时被调用,  
  17.   当__construct和以类名为函数名的构造函数同时存在时,__construct将被调用,另一个不被调用。  
  18. 2。__destruct()  
  19. 析构函数 : 当删除一个对象或对象操作终止时被调用(程序结束后对象就摧毁)。  
  20. 永远都是最后执行的。  
  21. 3。__call()  
  22.   对象调用某个方法,  
  23.   若方法存在,则直接调用;  
  24. 若不存在,则会去调用__call函数。  
  25. 4。__get()  
  26.   读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。  
  27. 5。__set()  
  28.   设置一个对象的属性时,  
  29.   若属性存在,则直接赋值;  
  30.   若不存在,则会调用__set函数。  
  31. 6。__toString()  
  32.   打印一个对象的时被调用。如echo $obj;或print $obj;  
  33. 7。__clone()  
  34.   克隆对象时被调用。如:$t=new Test();$t1=clone $t;  
  35. 8。__sleep()  
  36.   serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。  
  37. 9。__wakeup()  
  38.   unserialize时被调用,做些对象的初始化工作。  
  39. 10。__isset()  
  40.   检测一个对象的属性是否存在时被调用。如:isset($c->name)。  
  41. 11。__unset()  
  42.   unset一个对象的属性时被调用。如:unset($c->name)。  
  43. 12。__set_state()  
  44.   调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。  
  45. 13。__autoload()  
  46.   实例化一个对象时,如果对应的类不存在,则该方法被调用。  
  47. 魔术方法介绍  
  48. (1)初识魔术方法  
  49.   Php5.0发布以来为我们提供了很多面向对象的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统。今天我们就来认识下php5.0给我们提供的魔术方法。   
  50. PHP | 魔术方法 | __toString(),__clone(),__call(),__autoload() 详解  
  51. __toString()  
  52. 如果我有一个类:  
  53. class Person  
  54. {  
  55. private $name = “”;  
  56. private $age = 0;  
  57. function __construct($name = “”, $age = “”)  
  58. {  
  59. $this->name = $name;  
  60. $this->age = $age;  
  61. }  
  62. function say()  
  63. {  
  64. echo “name:”.$this->name.”<br/>”.”age:”.$this->age.”<br/>”;     
  65. }  
  66. }  
  67. 现在我去实例化这个类,然后去打印这个实例:  
  68. $p1 = new person(“liuzy”,20);  
  69. echo $p1;  //直接打印会出错  
  70. 显然这样直接打印对象是会出现错误的,因为对象是引用句柄,不能直接打印。这时,我们可以用到__toString()方法。我们在Person类里加一个__toString()方法:  
  71. function __toString()  
  72. {  
  73. return “I am  Person,my name is “.$this->name.”<br/>”;  
  74. }  
  75. 然后再刷新页面,发现什么了?  
  76. 现在我们明白,__toString()是在直接打印对象时执行的方法,我们可以用该方法打印类的一些相关信息。注意:是两个下划线,方法必须有返回值。  
  77. __clone()  
  78. 我们知道对象是可以直接赋值的,比如  
  79. $p2 = $p1;   //这里是一个对象有两个引用  
  80. 那么我执行:  
  81. $p1->say();  
  82. $p2->say();  
  83. 是都可以执行的,而且效果一样。  
  84. 我们还有一种方法:  
  85. $p3 = clone $p1;     //注意clone是克隆关键字,这里与上面的不同是$p3是一个新的对象。  
  86. 同时我们在类里加入一个方法:  
  87. function __clone()  
  88. {  
  89. $this->name = “我是副本”;  //注意:这里的$this是克隆产生的对象本身,不是当前类  
  90. }  
  91. 然后我们执行:  
  92. $p3->say();  
  93. 打印出:  
  94. name:我是副本  
  95. age:20  
  96. 到这里我们明白,__clone()方法是在克隆对象的时候执行的方法,它的作用是对新克隆出来的副本  
  97. 进行属性初始化等操作。  
  98. __call()  
  99. 这个方法的主要功能是:在该类的实例调用一个不存在的方法时,执行该__call()方法。注意需要提前在类里  
  100. 声明:  
  101. function __call($fname,$argus)  
  102. {  
  103. echo “你调用的方法:”.$fname.”不存在<br/>”;  
  104. echo “参数是”.print_r($argus);  
  105. }  
  106. 声明时包含两个参数,第一个参数是string型,是调用的不存在的方法的方法名($fname),第二个参数是  
  107. array型,是调用的不存在的方法的参数($argus)。  
  108. __autoload()  
  109. 我们在平时调用一个类的时候,必须要先将该类所在的文件引入(include “xxx.php”),如果我们在一个页里调用的类很多,那么我们不得不使用许多的include “xxx.php”。显然这样很麻烦。  
  110. __autoload()方法可以帮我们解决这个问题。  
  111. 比如我们将上面的那个Person类所在的文件定义为 Person_class.php  ,  
  112. 再新建一个php文件  test.php,编辑内容:  
  113. function  __autoload($calssName)  
  114. {  
  115. include $className.”_class.php”;  //看到这也许你就明白了吧?哈哈  
  116. }  
  117. $p = new Person(“mifan”, 22);  
  118. $p->say();  
  119. 这样执行该test.php页面就不会出现错误了。  
  120. __autoload()方法是在生命不存在的类时调用的方法,它有一个string类型的参数是声明该不存在类的类名。  
  121. 当然,类文件的命名也是很有讲究的。最好是和类有关系,比如Person_class.php  

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

www.admin122.com 关注微信
24小时客服在线