What is the difference between new self vs new static in PHP?

What is the difference between new self and new static? New self vs new static in PHP?
Self: Access to the class that declares it. Static: Access to the current object.

1. Example:

<?php
class A {
    public static function get_self() {
        return new self();
    }

    public static function get_static() {
        return new static();
    }
}

class B extends A {}

echo get_class(B::get_self());  // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A
?>

2. What is the difference between new self and new static?

  • self refers to the same class in which the new keyword is actually written.
  • static, in PHP 5.3’s late static bindings,
    refers to whatever class in the hierarchy you called the method on.
  • In the following example, B inherits both methods from A.
    The self invocation is bound to A because it’s defined in A’s implementation
    of the first method, whereas static is bound to the called class (also see get_called_class()).
  • => Self: Access to the class that declares it. Static: Access to the current object.