Чем отличаются директивы (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.