Sobes.tech
Junior

What are magic methods in PHP?

sobes.tech AI

Answer from AI

Magic methods in PHP are special methods whose names start with a double underscore (__). They are called automatically in certain situations or in response to specific actions with an object.

The most common magic methods:

  • __construct(): Called when a new object is created. Used for initializing object properties.
  • __destruct(): Called when an object is destroyed or garbage collected. Used for cleanup or resource release.
  • __call($name, $arguments): Called when attempting to invoke an inaccessible (private or non-existent) method of an object.
  • __callStatic($name, $arguments): Called when attempting to invoke an inaccessible static method of a class.
  • __get($name): Called when attempting to read an inaccessible (private or non-existent) property of an object.
  • __set($name, $value): Called when attempting to write to an inaccessible (private or non-existent) property of an object.
  • __isset($name): Called when checking the existence of an inaccessible property using isset() or empty().
  • __unset($name): Called when unsetting an inaccessible property using unset().
  • __sleep(): Allows the object to prepare for serialization. Must return an array of property names to serialize.
  • __wakeup(): Called after an object is unserialized. Used to restore resources that may have been lost during serialization.
  • __toString(): Allows the object to define how it should be represented as a string. Called when the object is used in a string context.
  • __invoke(...): Called when the object is used as a function.
  • __set_state(array $properties): Called when creating an object with the var_export() function.
  • __clone(): Called when the object is cloned using the clone keyword. Used for setting up the cloned object.
  • __debugInfo(): Customizes the debug output for the object when used with functions like var_dump().

Example of using __get() and __set():

<?php
class Person {
    private $data = [];

    public function __set($name, $value) {
        echo "Setting property '$name' to '$value'\n";
        $this->data[$name] = $value;
    }

    public function __get($name) {
        echo "Getting property '$name'\n";
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null; // Or throw an exception
    }
}

$person = new Person();
$person->name = "Alice"; // Calls __set()
echo $person->name;     // Calls __get()
?>

Magic methods provide a mechanism to intercept and manage certain operations with objects, allowing for more flexible and dynamic classes. However, their excessive use can complicate code readability and debugging.

What are magic methods in PHP? — PHP - sobes.tech