php面相对象的魔术方法使用总结

下面本文章给各位简单的总结一下php面相对象的魔术方法相关方法命令了,希望这几个例子能帮助到大家理解魔术方法吧.

1.__construct()

实例化对象是被自动调用,当__construct和以类名为函数名的函数,同时存在时调用__construct,另一个不背调用,类名为函数名的函数为老版的构造函数.

2.__destruct()

当删除一个对象或一个对象操作结束是被调用。

3.__call()

对象调用某个方法。若方法不存在,这调用__call 这个方法

4.__get()

读取一个对象属性,如果对象属性是私有的会调用它

5.__set()

给一个对象属性赋值时如果属性是私有的会调用它

6.__toString()

打印一个对象的时候会被调用。

7.__clone()

克隆对象时被调用,如:$a=new test(); $a1=clone $a;

8.__sleep()

Serialize 之前被调用,若对象比较大,想删减一点东西在序列化可以用它.

9.__wakeup()

Unserialize时被调用,做些对象的初始化工作.

10.__isset()

检测一个对象的属性是否存在如果检测的属性是私有的时候会被调用.

11.__unset()

删除一个对象属性时如果 删除的对象属性是私有的会被调用.

12.__set_state()

调用var_export时,被调用,用__set_state的返回值做为var_export的返回值.

13.__autoload()

实例化一个对象时,如果对应的类不存在,则该方法被掉用.

实例代码如下:

  1. <?php
  2. class BookStore{
  3. private $p = array();
  4. function __set($name,$value){
  5. print "set:::::{$name}:{$value}<br />";
  6. $this->p[$name] = $value;
  7. } //开源软件:phpfensi.com
  8. function __get($name){
  9. print "get:::::{$name}<br />";
  10. //array_key_exists检查给定的键名或索引是否存在于数组中
  11. return array_key_exists($name,$this->p) ? $this->p[$name] : null;
  12. }
  13. }
  14. $computer = new BookStore();
  15. $computer->php = 'php web开发大全';
  16. echo "php书籍=".$computer->php;
  17. ?>

__autoload(),你是不是还在因为调用的类或函数过多而烦恼,是不是还在因为写了n遍的require()和include()而烦恼,知道__autoload()方法,你就不需这么做了,下面我来做一个抛砖引玉的作用.

MyClass.php文件代码如下:

  1. <?php
  2. class MyClass{
  3. function printWeb(){
  4. echo "你现在访问的网站是www.phpfensi.com";
  5. }
  6. }
  7. ?>

general.inc.php文件

  1. <?php
  2. function __autoload($class_name){
  3. $file(dirname(__FILE__))."/libs/classes/$class_name.php";
  4. if (!file_exists($file)){
  5. return false;
  6. }else{
  7. require_once($file);
  8. }
  9. }
  10. ?>

main.php

  1. <?php
  2. require("general.inc.php");
  3. $obj = new Myclass();
  4. if (is_object($obj)){
  5. $obj->printWeb();
  6. }else{
  7. echo "类文件没调入";
  8. }
  9. ?>

运行结果:你现在访问的网站是www.phpfensi.com

当然还有很多魔术方法,比如__isset(),__unset(),__toString(),__clone()这里就不一一介绍了.