Home >Backend Development >PHP Tutorial >Summary of common magic methods in php, summary of php magic_PHP tutorial
This article organizes and summarizes the common magic methods in php in detail, and shares it with everyone for your reference. The specific content is as follows
1. PHP treats all methods starting with "__" as magic methods, so any custom methods cannot start with "__"
Overloading provided by PHP refers to dynamically creating attributes or methods. Overloading is achieved through magic methods. The parameters of these magic methods cannot be passed. __get(), __set(), __isset(), __unset() implements class attribute overloading.
2. When accessing an inaccessible attribute in a class, the __get() method will be called
3. When accessing inaccessible attributes in a class, __get(), __set(), __isset(), __unset() will be called according to different situations. When accessing attributes, use the function isset() or empty() When the unset() function is used, the __isset() method will be called.
4. These four methods cannot be defined using the static keyword. After php5.3.0, a warning level warning will occur when these four methods are defined using the static method.
5. What are inaccessible attributes: (1) attributes that are not in the class, (2) private variables are accessed outside the class. Method overloading is implemented through __call() and __callstatic(). The difference between the two is whether a context is a static method. The latter will be called when an inaccessible static method is called. __callstatic() was added in php5.3.0.
6. __sleep() and __wakeup()
When serialize() is serializing, it will first check whether the __sleep() function exists. If it exists, it will first call __sleep() and return an array containing all variable names. If the method does not return anything, null will be serialized. ization and generate a notice-level error.
The __wakeup() method is the opposite of __sleep() and is called when unserialize() is called
7. __toString(), let a class decide how to convert it into a string. Before php5.2.0, this method can only be effective in combination with the echo or print method. After php5.2.0, it can be combined with printf() modification, but when modifying Non-character modifiers such as %d cannot be used.
8. __invoke(), when trying to call an object by calling a function, this function will be triggered. It only takes effect after php5.3.
9. __set_state() static method. This static method will only be called when var_export() is called. It will take effect after php5.1.0. The only parameter is to receive an array.
10. __construct() and __destruct(), constructor and destructor. The constructor is mainly used for class initialization. The destructor runs after all references to an object are deleted or when the object is explicitly destroyed. Exceptions are not allowed to be thrown in the destructor, otherwise a fatal error will be triggered. The destructor is called at the end of the script, when all http headers have been sent.
11. __clone(), object copy, this method cannot be called directly, it must be called explicitly through the clone keyword
Code:
//实例化对象时,会调用对象的__construct方法 $obj = new Object(); //给对象不存在的属性赋值时,会调用对象的__set方法 $obj->title = "hello"; //使用对象不存在的属性时,会调用对象的__get方法 echo $obj->title; //调用对象不存在的方法时,会调用对象的__call方法 $obj->test("hello",123,567); //调用不存在的类静态方法时,会调用类的__callStatic方法 Object::staticMethod("static","not found method"); //直接输出对象时,会调用对象的__toString方法 echo $obj; //将一个对象当作函数一样使用时,会调用对象的__invoke方法 echo $obj("test"); //克隆对象时,会调用对象的__clone方法 $obj2 = clone $obj; //判断对象属性是否存在时,会调用对象的__isset方法 var_dump(isset($obj->aaa)); //销毁对象属性时,会调用对象的__unset方法 unset($obj->aaa); class Object{ protected $array = array(); function __construct() { echo __METHOD__."你正在实例化对象<br>"; } function __set($name, $value) { $this->array[$name]=$value; } function __get($name) { return $this->array[$name]; } function __call($name, $arguments) { var_dump($name,$arguments); return "magic function\n"; } static function __callStatic($name, $arguments) { var_dump($name,$arguments); return "magic static function"; } function __toString() { return __CLASS__.'<br>'; } function __invoke($arguments) { var_dump($arguments); return __METHOD__.'<br>'; } function __clone() { echo __METHOD__."你正在克隆对象<br>"; } function __isset($name) { echo __METHOD__."你想判断有没有属性".$name."<br>"; return 1; } function __unset($name) { echo __METHOD__."你想删除属性".$name."<br>"; } function __destruct() { echo __METHOD__."你正在注销对象<br>"; } }
The above is all about the common magic methods in php. I hope it will be helpful to everyone's learning.