Bird
Raised Fist0
PHPprogramming~5 mins

Why magic methods exist in PHP

Choose your learning style10 modes available
Introduction

Magic methods let PHP objects do special things automatically. They help make code easier and cleaner by handling common tasks behind the scenes.

When you want to run code automatically when an object is created or destroyed.
When you want to control what happens if someone tries to get or set a property that does not exist.
When you want to customize how an object converts to a string.
When you want to handle method calls that are not defined in the class.
Syntax
PHP
<?php
class MyClass {
    public function __construct() {
        // Code runs when object is created
    }

    public function __destruct() {
        // Code runs when object is destroyed
    }

    public function __get($name) {
        // Code runs when getting a property that does not exist
    }

    public function __set($name, $value) {
        // Code runs when setting a property that does not exist
    }

    public function __toString() {
        // Code runs when object is used as a string
        return "";
    }

    public function __call($name, $arguments) {
        // Code runs when calling a method that does not exist
    }
}
?>

Magic methods always start with two underscores (__).

They are called automatically by PHP in special situations.

Examples
This example uses __set and __get to store and retrieve properties dynamically.
PHP
<?php
class Person {
    private $data = [];

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }

    public function __get($name) {
        return $this->data[$name] ?? 'Not set';
    }
}

$person = new Person();
$person->age = 30;
echo $person->age;
?>
This example shows __construct and __destruct running automatically when the object is created and destroyed.
PHP
<?php
class Logger {
    public function __construct() {
        echo "Logger started\n";
    }

    public function __destruct() {
        echo "Logger stopped\n";
    }
}

$log = new Logger();
?>
This example shows how __toString lets an object be printed as a string.
PHP
<?php
class Message {
    public function __toString() {
        return "Hello from Message!";
    }
}

$msg = new Message();
echo $msg;
?>
Sample Program

This program shows magic methods working together: constructor, setter, getter, toString, and destructor. It prints messages automatically when properties are set or accessed, and when the object is created or destroyed.

PHP
<?php
class MagicDemo {
    private $properties = [];

    public function __construct() {
        echo "Object created\n";
    }

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

    public function __get($name) {
        echo "Getting '$name'\n";
        return $this->properties[$name] ?? "Property '$name' not found";
    }

    public function __toString() {
        return "MagicDemo object with properties: " . implode(", ", array_keys($this->properties));
    }

    public function __destruct() {
        echo "Object destroyed\n";
    }
}

$demo = new MagicDemo();
$demo->color = 'blue';
echo $demo->color . "\n";
echo $demo . "\n";
?>
OutputSuccess
Important Notes

Magic methods help you write less code for common tasks.

They make your objects behave more like built-in types.

Use them carefully to keep code clear and easy to understand.

Summary

Magic methods run automatically in special situations.

They help manage object creation, property access, method calls, and string conversion.

Using magic methods can make your code cleaner and more flexible.

Practice

(1/5)
1. Why do magic methods exist in PHP?
easy
A. To replace all normal methods in a class
B. To automatically handle special object behaviors like creation and property access
C. To make PHP run faster by skipping checks
D. To prevent objects from being created

Solution

  1. Step 1: Understand the role of magic methods

    Magic methods are special functions that PHP calls automatically in certain situations, like when creating objects or accessing properties.
  2. Step 2: Identify their purpose

    They help manage object behaviors automatically, making code cleaner and more flexible without replacing all normal methods or preventing object creation.
  3. Final Answer:

    To automatically handle special object behaviors like creation and property access -> Option B
  4. Quick Check:

    Magic methods = automatic special behavior [OK]
Hint: Magic methods run automatically for special object tasks [OK]
Common Mistakes:
  • Thinking magic methods replace all normal methods
  • Believing magic methods speed up PHP execution
  • Assuming magic methods stop object creation
2. Which of the following is the correct syntax for a PHP magic method that runs when an object is created?
easy
A. function _construct() {}
B. function construct() {}
C. function __create() {}
D. function __construct() {}

Solution

  1. Step 1: Recall the constructor magic method name

    The magic method for object creation in PHP is named exactly __construct with two underscores.
  2. Step 2: Check syntax correctness

    Only function __construct() {} uses the correct double underscore and spelling; others are invalid or not magic methods.
  3. Final Answer:

    function __construct() {} -> Option D
  4. Quick Check:

    Constructor magic method = __construct [OK]
Hint: Constructor magic method always starts with double underscores __ [OK]
Common Mistakes:
  • Using single underscore instead of double
  • Misspelling the method name
  • Confusing __construct with __create
3. What will be the output of this PHP code?
$obj = new class {
public function __toString() {
return "Hello!";
}
};
echo $obj;
medium
A. Hello!
B. Error: Cannot convert object to string
C. Object
D. NULL

Solution

  1. Step 1: Understand __toString magic method

    The __toString method defines how an object converts to a string when echoed or printed.
  2. Step 2: Analyze the code output

    The anonymous class defines __toString returning "Hello!", so echoing the object prints "Hello!".
  3. Final Answer:

    Hello! -> Option A
  4. Quick Check:

    __toString returns string output [OK]
Hint: echo object calls __toString if defined [OK]
Common Mistakes:
  • Expecting an error without __toString
  • Thinking it prints 'Object' by default
  • Assuming NULL is printed
4. Identify the error in this PHP class using magic methods:
class Test {
public function __get($name) {
return $this->$name;
}
}
$obj = new Test();
echo $obj->value;
medium
A. No error, outputs the property value
B. Undefined method __get
C. Infinite recursion causing error
D. Syntax error in __get method

Solution

  1. Step 1: Understand __get behavior in this code

    The __get method tries to return $this->$name, but accessing $this->$name triggers __get again.
  2. Step 2: Identify the problem

    This causes infinite recursion because __get calls itself repeatedly without a base case or existing property.
  3. Final Answer:

    Infinite recursion causing error -> Option C
  4. Quick Check:

    __get calling itself = infinite recursion [OK]
Hint: Accessing undefined property in __get can cause recursion [OK]
Common Mistakes:
  • Thinking __get has syntax errors
  • Assuming no error occurs
  • Confusing __get with __set
5. You want to create a PHP class that logs every time a property is set or accessed without manually writing code for each property. Which magic methods should you use together to achieve this?
hard
A. __get and __set
B. __construct and __destruct
C. __call and __callStatic
D. __toString and __invoke

Solution

  1. Step 1: Identify magic methods for property access and setting

    __get is called when reading inaccessible properties, __set when writing them.
  2. Step 2: Match methods to logging requirement

    Using __get and __set lets you add logging code centrally for all properties without manual code per property.
  3. Final Answer:

    __get and __set -> Option A
  4. Quick Check:

    Property access logging = __get + __set [OK]
Hint: Use __get and __set to catch all property access [OK]
Common Mistakes:
  • Confusing __call with property access
  • Using __construct which runs only once
  • Thinking __toString handles properties
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard