Summary of magic method examples in PHP object-oriented
Magic method is a unique feature of PHP object-oriented. They are triggered under specific circumstances and all start with a double underscore. You can understand them as hooks. Using pattern methods, you can easily implement overloading in PHP object-oriented (Overloading means dynamically creating class attributes and method). Many magic methods appear in pairs. The following lists all the current pattern methods in PHP.
1.construct, destruct
constuct is called when constructing the object;
destruct is called when the object is explicitly destroyed or the script ends;
2.get, set
set is called when assigning a value to an inaccessible or non-existent property
get is called when reading an inaccessible or non-existent property
3.isset, unset
isset is called when isset() or empty() is called on an inaccessible or non-existent property
unset is called on an inaccessible or non-existent property Called when a non-existing property is unset
4.call, callStatic
call is called when an inaccessible or non-existent method is called
callStatic cannot be called
5.sleep is called when accessing or non-existing static methods, wakeup
sleep is called when using serialize, when you don't need to save all of the large object It is useful for data
wakeup is called when using unserialize and can be used to do some object initialization operations
6.clone
It is called when cloning an object , used to adjust the cloning behavior of objects
7.toString
Called when a class is converted to a string
8 .invoke
Called when an object is called functionally
9.set_state
When var_export() is called to export a class, This static method is called. Use the return value of set_state as the return value of var_export.
10.debuginfo
Called when var_dump() is called to print an object (when you don’t want to print all attributes) Applicable to PHP5.6 version
PHP magic method usage examples are as follows:
<?php class Magic { public $var = 'test'; //构造函数,在创建对象的时候调用 public function construct() { echo 'construct called'.PHP_EOL; } //某个对象的引用都被删除、对象被销毁、调用exit()后、脚本关闭时被调用 public function destruct() { echo 'destruct called'.PHP_EOL; } //当给不可访问或不存在属性赋值时被调用 public function set($name, $value) { echo $name.'-'.$value; echo 'set called'.PHP_EOL; } //读取不可访问或不存在属性时被调用 public function get($name) { echo $name; echo 'get called'.PHP_EOL; } //调用不可访问或不存在的方法时被调用 public function call($name, $arguments) { echo $name . '-' . implode(',', $arguments); echo 'call called'.PHP_EOL; } //调用不可访问或不存在的静态方法时被调用 public static function callStatic($name, $arguments) { echo $name . '-' . implode(',', $arguments); echo 'callStatic called'.PHP_EOL; } //对不可访问或不存在的属性调用isset()或empty()时被调用 public function isset($name) { echo $name; echo 'isset called'.PHP_EOL; return true; } //对不可访问或不存在的属性进行unset时被调用 public function unset($name) { echo $name; echo 'unset called'.PHP_EOL; } //serialize时被调用,当你不需要保存大对象的所有数据时很有用 public function sleep() { echo 'sleep called'.PHP_EOL; return array('var1111111111'); } //unserialize时被调用,可用于做些对象的初始化操作 public function wakeup() { echo 'wakeup called'.PHP_EOL; $this->var = 'test after wakeup'; } //当一个类被转换成字符串时被调用 public function toString() { return 'toString called'.PHP_EOL; } //进行对象clone时被调用,用来调整对象的克隆行为 public function clone() { echo 'clone called'.PHP_EOL; } //当以函数方式调用对象时被调用 public function invoke() { echo 'invoke called'.PHP_EOL; } //当调用var_export()导出类时,此静态方法被调用。用set_state的返回值做为var_export的返回值。 public static function set_state($arr) { return 'set_state called'.PHP_EOL; } //当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本 public function debuginfo($arr) { echo 'debuginfo called'.PHP_EOL; return array( 'var' => 'test fro debuginfo' ); } } $m = new Magic(); //construct()被调用 $m->not_exist_property = test; //set()被调用 echo $m->not_exist_property;//get()被调用 $m->abc(1,2,3); //call()被调用 echo isset($m->not_exist_property); //isset()被调用,返回bool值 unset($m->not_exist_property); //unset()被调用 echo $tmp = serialize($m); //sleep()被调用 unserialize($tmp); //wakeup()被调用 $m1 = clone $m; //clone()被调用,对象默认是引用传递,使用clone关键词则可实现对象复制 $m(); //invoke() eval( '$m2 = ' . var_export ( $m , true ) . ';' );var_dump($m2); var_dump($m); //最后destruct()被调用 /* 结果: construct called not_exist_property-testset called not_exist_propertyget called abc-1,2,3call called not_exist_propertyisset called 1not_exist_propertyunset called sleep called O:5:"Magic":1:{s:13:"var1111111111";N;}wakeup called destruct called clone called invoke called string(20) "set_state called " class Magic#1 (1) { public $var => string(4) "test" } destruct called destruct called */
The above is the detailed content of Summary of magic method examples in PHP object-oriented. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
