当前位置:首页 > PHP教程 > php面向对象 > 列表

php中的常用魔术方法汇总

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-09 23:10:35 浏览: 评论:0 

这篇文章详细的对php中的常用魔术方法进行了整理归纳,分享给大家供大家参考,具体内容如下。

1、PHP把所有”__”开头的方法当做魔术方法,所以任何自定义的方法都不能是”__”开头

php提供的重载,是指动态的创建属性或方法。重载是通过魔术方法来实现的。这些魔术方法的参数不能饮用传递,__get(),__set(),__isset(),__unset(),实现类属性重载。

2、当访问类中不可访问的属性时,将调用__get()方法

3、当访问类中不可访问的属性时,根据不同的情况会调用__get(),__set(),__isset(),__unset(),其中当访问属性 时,使用函数isset()或empty()时,将调用__isset()方法使用unset()函数时,将调用__unset()方法。

4、这四个方法不能使用static关键词定义,在php5.3.0后,一个warning级别的警告将发生,当使用static方法定义这4个方法。

5、何谓不可访问的属性:(1)类中没有的属性,(2)私有变量在类外被访问。方法重载,通过__call()和__callstatic()来实 现,两者的区别是一个上下文环境是否是静态方法,后者在调用不可访问的静态方法时会被调用。__callstatic()是在php5.3.0中才被添 加。

6、__sleep()和__wakeup()

serialize()序列化时,会先检查是否存在__sleep()函数,如果存在,则先调用__sleep(),返回一个包含所有变量名称的数组,如果该方法不返回任何内容,则null被序列化,并产生一个notice级别的错误。

__wakeup()方法和__sleep()相反,在调用unserialize()时被调用

7、__toString(),让一个类决定它如何转换成字符串,在php5.2.0之前,这个方法只能结合echo或print方法生效,php5.2.0之后,可以结合printf()修饰,但修饰的时候也不能用类似%d之类的非字符修饰符。

8、__invoke(),当尝试以调用函数的方式调用对象时,将出发这个函数,只在php5.3之后生效。

9、__set_state()静态方法,当调用var_export()的时候,才会调用这个静态方法,php5.1.0之后生效。唯一参数是接收一个数组。

10、__construct()和__destruct(),构造函数和析构函数,构造函数主要用于类的初始化,析构函数在某个对象的所有引用都 删除后或者对象被显示的销毁时运行。在析构函数中不允许抛出异常,否则会出发一个fatal error,析构函数在脚本结束时调用,此时所有的http header都已经发出.

11、__clone(),对象复制,此方法不能直接被调用,必须通过clone关键字显示调用

代码:

  1. //实例化对象时,会调用对象的__construct方法 
  2. $obj = new Object(); 
  3. //给对象不存在的属性赋值时,会调用对象的__set方法 
  4. $obj->title = "hello"
  5. //使用对象不存在的属性时,会调用对象的__get方法 
  6. echo $obj->title; 
  7. //调用对象不存在的方法时,会调用对象的__call方法 
  8. $obj->test("hello",123,567); 
  9. //调用不存在的类静态方法时,会调用类的__callStatic方法 
  10. Object::staticMethod("static","not found method"); 
  11. //直接输出对象时,会调用对象的__toString方法 
  12. echo $obj
  13. //将一个对象当作函数一样使用时,会调用对象的__invoke方法 
  14. echo $obj("test"); 
  15. //克隆对象时,会调用对象的__clone方法 
  16. $obj2 = clone $obj
  17. //判断对象属性是否存在时,会调用对象的__isset方法 
  18. var_dump(isset($obj->aaa)); 
  19. //销毁对象属性时,会调用对象的__unset方法 
  20. unset($obj->aaa); 
  21.    
  22.    
  23. class Object{ 
  24.    
  25.   protected $array = array(); 
  26.    
  27.   function __construct() 
  28.   { 
  29.     echo __METHOD__."你正在实例化对象<br>"
  30.   } 
  31.    
  32.   function __set($name$value
  33.   { 
  34.     $this->array[$name]=$value
  35.   } 
  36.    
  37.   function __get($name
  38.   { 
  39.     return $this->array[$name]; 
  40.   } 
  41.    
  42.   function __call($name$arguments
  43.   { 
  44.     var_dump($name,$arguments); 
  45.     return "magic function\n"
  46.   } 
  47.    
  48.   static function __callStatic($name$arguments
  49.   { 
  50.     var_dump($name,$arguments); 
  51.     return "magic static function"
  52.   } 
  53.    
  54.   function __toString() 
  55.   { 
  56.     return __CLASS__.'<br>'
  57.   } 
  58.    
  59.   function __invoke($arguments
  60.   { 
  61.     var_dump($arguments); 
  62.     return __METHOD__.'<br>'
  63.   } 
  64.    
  65.   function __clone() 
  66.   { 
  67.     echo __METHOD__."你正在克隆对象<br>"
  68.   } 
  69.    
  70.   function __isset($name
  71.   { 
  72.     echo __METHOD__."你想判断有没有属性".$name."<br>"
  73.     return 1; 
  74.   } 
  75.    
  76.   function __unset($name
  77.   { 
  78.     echo __METHOD__."你想删除属性".$name."<br>"
  79.   } 
  80.    
  81.    
  82.   function __destruct() 
  83.   { 
  84.     echo __METHOD__."你正在注销对象<br>"
  85.   } 
  86.    
  87.    
  88.    

以上就是关于php中的常用魔术方法的全部内容,希望对大家的学习有所帮助。

Tags: php魔术方法

分享到: