(Recommended tutorial: PHP video tutorial)
When the class is instantiated
Simply put, when a new class is created, this method will automatically execute
<?php class autofelix { public function __construct() { echo '我是飞兔小哥~'; } } new autofelix();
When the class is destroyed Automatically triggered when
You can use the unset method to trigger this method
<?php class autofelix { public function __destruct() { echo '我是飞兔小哥,别销毁我~'; } } unset(new autofelix());
It will be automatically called when the class is cloned
<?php class autofelix { public function __clone() { echo '我是飞兔小哥,我想克隆你~'; } } $a = new autofelix(); clone $a;
It will be automatically called when the method to be called does not exist or has insufficient permissions
For example, if I call a private modified method inside the class from outside the class
<?php class autofelix { private function say() { echo '我是飞兔小哥~'; } public function __call($name, $arguments) { echo '你无权调用' . $name . '方法'; die; } } (new autofelix())->say();
It will be automatically called when the static method to be called does not exist or has insufficient permissions
For example, I call a private modified static method inside the class from outside the class
<?php class autofelix { private static function say() { echo '我是飞兔小哥~'; } public function __callStatic($name, $arguments) { echo '你无权调用' . $name . '方法'; die; } } $a = new autofelix(); $a::say();
This method will be called when var_dump() class object
If this method is not defined, var_dump() will print out all classes Attribute
<?php class autofelix { public function __debugInfo() { echo '飞兔小哥给你温馨提示'; } } var_dump(new autofelix());
Through it, you can get private member attributes outside the object
<?php class autofelix { private $name = '飞兔小哥'; public function __get($name) { if(in_array($name, ['name', 'age'])) { echo $this->name; } else { echo '不是什么东西都能访问的~'; } } } (new autofelix())->name;
When pairing Inaccessible properties will be automatically called when calling isset() or empty()
<?php class autofelix { private $name = '飞兔小哥'; public function __isset($name) { if(in_array($name, ['name', 'age'])) { echo $this->name; } else { echo '不是什么东西都能访问的~'; } } } isset(new autofelix()->name);
Will be triggered when assigning a value to an undefined property
<?php class autofelix { public function __set($name, $value) { echo '你想给' . $name . '赋值' . $value; } } (new autofelix())->name = '飞兔小哥';
The object itself cannot be used directly as a function
If the object is called as a function, this method will be triggered
<?php class autofelix { public function __invoke() { echo '你想调用我?'; } } (new autofelix())();
Will be automatically called when serialize() is called outside the class
<?php class autofelix { public function __sleep() { echo '我是飞兔小哥~'; } } serialize(new autofelix());
Will be called when the unserialize() method is executed Automatic call
<?php class autofelix { public function __wakeup() { echo '我是飞兔小哥~'; } } unserialize(new autofelix());
What should be returned when a class is treated as a string
A string type must be returned here, otherwise a fatal error will be reported
<?php class autofelix { public function __toString() { return '我是你得不到的对象...'; } } $a = new autofelix(); echo $a;
When unset() is called on an inaccessible property, it will be automatically called
<?php class autofelix { private $name = '飞兔小哥'; public function __unset($name) { echo '别删我,我是你兔哥'; } } $a = new autofelix(); unset($a->name);
(Recommended tutorial: PHP video tutorial)
The above is the detailed content of Commonly used magic methods in PHP (summary sharing). For more information, please follow other related articles on the PHP Chinese website!