Задача не в том, чтобы обратиться к методу не создавая объекта. Просто видел подобный вызов, стало интересно а как подобное сделать (если я конечно правильно всё запомнил и это возможно). Хотя по сути экземпляр класса в данном случае всё-же создаётся.
New Example() вызывает конструктор класса, который возвращает объект. И по идее, эти записи должны быть синонимичны:
$obj = new Class(); $obj->method(); new Class()->method();
Но тем не менее, второй вариант не работает. В силу чего, возник интерес - а почему?
потому что парсер тупенький и не может понять, что от него хотят.
поэтому new Class()->method(); не работает, а если подсказать (new Class())->method();, то вполне работает. https://ideone.com/zsRu7w
Если не путаю, то (new Example())->getWathever()
Создаёт экземпляр Example и вызывает его getWathever()
А New Example()->getWathever() пытается вызвать функцию Example, в её результате вызвать метод getWathever и уже из его возврата создать инстанс класса
Xveeder, все становится понятно, если вы вспомните, что в php можно так:
$class = Foo::class;
$foo = new $class;
Тогда ваша запись будет двусмысленной: $bar = new $class->method();
не известно либо мы инстанцируем экземпляр класс $class, либо у объекта $class вызываем method, который возвращает FQCN.
Это работает только в том случае, если ((new Cookies())->getCookie()) возвращает ровно то, что принимает auth() в качестве аргумента. Такое избегание вызовов статических методов через мгновенное создание экземпляра и вызова метода часто связано с будущими юнит тестами (там статика не приветствуется).