This article organizes and summarizes the commonly used magic methods in PHP in detail and shares them with you for your reference. The specific content is as follows
1. PHP treats all methods starting with "__" as magic methods, so any customized 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 inaccessible attributes in the class, the __get() method will be called.
3. When accessing inaccessible attributes in the class, __get(), __set(), __isset(() will be called according to different situations. ), __unset(), where when accessing an attribute, using the function isset() or empty(), the __isset() method will be called. When using the unset() function, the __unset() 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()
serialize() When 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 returns nothing, null is serialized and a notice-level error is generated.
The __wakeup() method is opposite to __sleep() and is called when unserialize() is called
7. __toString() allows a class to decide how to convert it into a string. Before php5.2.0, this method could only be combined with echo Or the print method takes effect. After php5.2.0, it can be modified in combination with printf(), but non-character modifiers such as %d cannot be used during modification.
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. At this time, all http headers have been sent.
11. __clone(), object copy, this method cannot To be called directly, the call must be displayed through the clone keyword
//实例化对象时,会调用对象的__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 has introduced a summary of commonly used magic methods in PHP, including relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.