Grayscale profile picture

Patrique Ouimet

Senior Product Engineer

The Difference Between new self and new static in PHP

Sat, May 2, 2020 12:27 PM

Introduction

In this short article we'll take a look at the difference between new self and new static as it relates to inheritance in PHP. When you call new self it will always reference the class in which it is defined, where as new static will reference the calling class.

Let's look at some examples

<?php

class ParentClass
{
    public static function create()
    {
        return new self();
    }
}


class ChildClass extends ParentClass
{
}

echo get_class(ParentClass::create()) . PHP_EOL;
echo get_class(ChildClass::create()) . PHP_EOL;

If we run the above file php index.php, the output will look like:

ParentClass
ParentClass

As we can see from the output regardless of the calling class it references the parent where new self is defined.

Let's modify the file to use new static

<?php

class ParentClass
{
    public static function create()
    {
        return new static();
    }
}


class ChildClass extends ParentClass
{
}

echo get_class(ParentClass::create()) . PHP_EOL;
echo get_class(ChildClass::create()) . PHP_EOL;

Let's run this again php index.php, now the output looks like this:

ParentClass
ChildClass

As we can see from the output using new static references the calling class instead of the class where the new call is defined.