Чем отличаются директивы (new self) , (new self()) и self::?

Как я понимаю, это разное написание одного и того же, или что-то не так?


Ответы (1 шт):

Автор решения: Haku Kimura

new self и new self() — это одно и то же, создание экземпляра класса внутри себя, только во втором случае добавлены скобки для передачи аргументов (но сами аргументы отсутствуют).
Пример:

public function instance()
{
    $instance = new self();
    $instance->data = 'Success';

    return $instance;
}

self:: — это ключевое слово для обращения к статическим свойствам или методам внутри класса, либо к константам.
Пример:

class Model
{
    const TIMEOUT = 60;
    public static $url = 'stackoverflow.com';

    public function test()
    {
        return [
            'timeout' => self::TIMEOUT,
            'url' => self::$url,
        ];
    }
}

P.S. По поводу комментария к вашему вопросу, для позднего статического связывания используется ключевое слово static, а не self.

Подробная информация в документации

→ Ссылка