Home >Backend Development >PHP Tutorial >PHP Magic Methods Cheatsheet

PHP Magic Methods Cheatsheet

William Shakespeare
William ShakespeareOriginal
2025-03-07 11:25:09593browse

PHP Magic Methods Cheatsheet

This article provides a quick lookup table of PHP magic methods for easy reference.

Whether you are an experienced PHP developer or a newbie in PHP development, if you have used PHP object-oriented programming, you must have used at least several PHP magic methods. If you have not heard of the magic method of PHP, let me introduce it:

PHP provides many magic methods such as __destruct(), __callStatic(), __set(), __unset(), __wakeup(), __invoke(), __clone(), __get(), __call(), __serialize(), etc. Avoid writing too much code in these methods, for clarity and maintenance considerations, it is best to define well-defined methods for member acquisition and setting, or define class methods. The __unserialize() and

methods require the use of virtual properties.

Example:
<?php 
class Student {
    private $name;
    private $email;
    private $phone;
    private $db_connection_link;

    public function __construct($name, $email, $phone) 
    {
        $this->name = $name;
        $this->email = $email;
        $this->phone = $phone;
    }

    public function __serialize()
    {
        return ['name' => $this->name, 'email' => $this->email, 'mobile' => $this->phone];
    }

    public function __wakeup($data)
    {
        $this->name = $data['name'];
        $this->email = $data['email'];
        $this->phone = $data['mobile'];

        $this->db_connection_link = your_db_connection_function();
    }
}
?>

__wakeup()It should be noted that the __serialize() and __unserialize() methods will only be called when the

method is defined at the same time.

__invoke()

Method

__invoke()

Magic method is a special method called when trying to call an object like a function. Let's first look at how it works, and then see what this magic method is for.
<?php 
class Student {
    private $name;
    private $email;

    public function __construct($name, $email) 
    {
        $this->name = $name;
        $this->email = $email;
    }

    public function __invoke()
    {
        echo 'Student 对象被当作函数调用!';
    }
}

$objStudent = new Student('John', 'john@tutsplus.com');
$objStudent();
?>

$objStudentAs you can see, the __invoke() object is treated as a function, and since we have defined the __invoke() method, it will be called instead of returning an error. The main purpose of the

method is that you can implement this method if you want to treat an object as callable.

__clone()

Method

clone If you want to copy an existing object, you can use the __clone() keyword. But after cloning, if you want to modify the properties of the cloned object, you can define the

magic method in your class.
<?php 
Class Student_School {}

class Student {
    private $name;
    private $email;
    private $object_student_school;

    public function __construct()
    {
        $this->object_student_school = new Student_School();
    }

    public function __clone()
    {
        $this->object_student_school = clone $this->object_student_school;
    }
}

$objStudentOne = new Student();
$objStudentTwo = clone $objStudentOne;
?>

The problem with the above method is that it creates a shallow copy of the object when cloning, so the inner object of the cloned object will not be cloned.

__clone()In the above example, if you do not define the $objStudentTwo method, the cloned object $objStudentOne will still point to the same Student_School object referenced by the __clone() object. Therefore, by implementing the Student_School method, we ensure that the

object is cloned together with the main object.

__debugInfo()

Method

__debugInfo()var_dump() The magic method is called when trying to dump an object using the

function. If you do not define this method in the class, it will dump all public, private, and protected properties. So if you want to limit the information displayed when dumping, you can use this method.
<?php 
class Student {
    private $name;
    private $email;
    private $phone;
    private $db_connection_link;

    public function __construct($name, $email, $phone) 
    {
        $this->name = $name;
        $this->email = $email;
        $this->phone = $phone;
    }

    public function __serialize()
    {
        return ['name' => $this->name, 'email' => $this->email, 'mobile' => $this->phone];
    }

    public function __wakeup($data)
    {
        $this->name = $data['name'];
        $this->email = $data['email'];
        $this->phone = $data['mobile'];

        $this->db_connection_link = your_db_connection_function();
    }
}
?>

This method should return an array of key-value pairs that will be displayed when the var_dump() function is called on the object. As you can see, you have full control over what you want to display when dumping an object using the var_dump() function.

__set_state() Method

The

__set_state() method is a static method used with the var_export() function. var_export() Function outputs structured information about variables. When you export a class using this function, you need to define the __set_state() method in the class.

<?php 
class Student {
    private $name;
    private $email;

    public function __construct($name, $email) 
    {
        $this->name = $name;
        $this->email = $email;
    }

    public function __invoke()
    {
        echo 'Student 对象被当作函数调用!';
    }
}

$objStudent = new Student('John', 'john@tutsplus.com');
$objStudent();
?>

As you can see, the exported string is valid PHP code that you can use to restore the original object.

Summary

This article introduces all the magic methods available in PHP. For each approach, I have provided a short but meaningful example that should help you understand its purpose. I hope you can use this article as a quick reference or quick lookup table in daily PHP development.

This article has been updated and contains contributions from Monty Shokeen. Monty is a full-stack developer who also loves writing tutorials and learning new JavaScript libraries.

The above is the detailed content of PHP Magic Methods Cheatsheet. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn