The magic of magic method __toString in PHP

Written 1 year ago by Al Imran Ahmed on PHP

PHP has some of its method’s name with __ (double underscore) as prefix. These methods are called magic method. It is recommended by PHP not to create any custom method as a name with __ prefix. Example of available magic methods in PHP are __toString(), __sleep(), __isset(), __set(), __construct() etc.

Today we are going to talk about __toString method of PHP.

__toString() Method

This method allows a class to decide how to react when an object of that class is being used as a string.

For example, let’s think of a very simple class named as TestClass

<?php
class TestClass{
    public $msg = “Hello world”;
}

Now, let’s create an object of that class as below

$test = new TestClass();

What if we echo out this $test object of TestClass just like string? Let’s try it out

echo $test;

The complete code is:

<?php
class TestClass{
    public $msg = “Hello world”;
}
$test = new TestClass();
echo $test;

Let’s execute the code, BOOM!! It’s an error! The error message says:

PHP Catchable fatal error:  Object of class TestClass could not be converted to string in TestClass

The error message has a very clear indication that we are using an instance of TestClass as String. This is a SIN! I mean a FATAL ERROR

Can’t we do this in PHP? Can’t we use an object(or instance) of a Class as string? The answer is Yes, we can. But the real question is what do we expect? What do we want to see when that $test object is used as String?

If we just want to see the content of $msg property of the object then we can do this using magic method __toString as below:

<?php
class TestClass{
    public $msg = “Hello world”;
    public function __toString(){
        return $this->msg;
    }
}

What have we done here? We have added the magic method __toString() in our TestClass. That method return the content of $msg. We could have returned what we want as string from the __toString() method. I mean, it’s not mandatory to return a property of the object.

Let’s test it again our modified TestClass now.

$test = new TestClass();
echo $test;

The complete code is:

<?php
class TestClass{
    public $msg = “Hello world”;
    public function __toString(){
        return $this->msg;
    }
}
$test = new TestClass();
echo $test;

Let’s run it, YES!! The output is

Hello world

This is the magic of magic method __toString()


Keywords:

More Articles on PHP

Comments(0)