PHP基础知识 - PHP魔术方法

PHP 13 个常用魔术方法:

__construct、__destruct、__call 或 __callStatic、__get、__set、__isset、__unset、__toString、__clone、__autoload、__invoke、__sleep、__wakeup

1、__construct 构造方法 

__construct 构造方法,当一个类被实例化创建对象时,会调用构造方法。 

2、__destruct 构造方法  

__destruct 析构方法, 当对象在销毁之前或失去对对象的引用时,会调用 析构方法。 

3、__call 或 __callStatic

  • 当调用一个未定义的或没有权限的成员方法时,会调用 __call 方法。(当在静态方法中调用一个未定义的或没有权限的成员方法时,则会调用 __callStatic 方法。)
  • 如果本类找不到调用的成员方法,会去父类中找。
  • 如果本类找不到 __call 方法,会去父类中找。

4、__get 

当调用一个未定义的或非公有的成员属性时,会调用 __get 方法。 

5、__set 

当给一个未定义的或非公有的成员属性赋值时, 会调用 __set 方法。 

6、__isset

当在一个未定义的或非公有的成员属性上调用 isset函数时,会调用 __isset 方法。 

7、__unset

当在一个未定义或非公有的成员属性上调用 unset函数时,会调用 __unset 方法。 

8、 __toString

在打印输出一个对象时, 会自动调用 __toString 方法。 例: echo 对象名。 

9、__clone

当克隆一个对象时, 会自动调用 __clone 方法。 例: $clone_obj = clone 对象名; 

10、__autoload

在实例化一个尚未被定义的类时会自动调用 __autoload 来加载类文件。 

11、__invoke

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

12、__sleep

serialize() 函数会检查类中是否存在 __sleep 方法,如果存在,先执行 __sleep 方法,再执行 序列化操作。

<?php
    class User
	{
    	public function __sleep(){
            // 
        }
	}
    $obj = new User();
	serialize($obj);

13、__wakeup

unserialize() 函数会检查类中是否存在 __wakeup 方法,如果存在,先执行 __wakeup 方法,再执行 反序列化操作。

<?php
    class User
	{
    	public function __wakeup(){
            // 
        }
	}
    $obj = new User();
	unserialize($obj);

猜你喜欢

转载自blog.csdn.net/wplblog/article/details/128871087