@Xveeder

Как обратиться к членам класса через конструктор (new Class()->method())?

Доброго времени суток, господа. Кажется, где-то на тостере видел примерно такой код:

auth(new Cookies()->getCookie());

Разумеется, подобная конструкция не работает, хотя, например, подобный вызов можно сделать если вызвать функцию, которая возвращает объект.

И да, такой вариант - не вариант:
auth((new Cookies())->getCookie());

Быть может есть какой-то магический метод?
Спасибо.
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
DevMan
@DevMan
задача бессмысленная.
и не нужно никакой магии, достаточно статических методов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
VladimirAndreev
@VladimirAndreev
php web dev
Если не путаю, то (new Example())->getWathever()
Создаёт экземпляр Example и вызывает его getWathever()
А New Example()->getWathever() пытается вызвать функцию Example, в её результате вызвать метод getWathever и уже из его возврата создать инстанс класса
Ответ написан
glaphire
@glaphire Куратор тега PHP
PHP developer
Это работает только в том случае, если ((new Cookies())->getCookie()) возвращает ровно то, что принимает auth() в качестве аргумента. Такое избегание вызовов статических методов через мгновенное создание экземпляра и вызова метода часто связано с будущими юнит тестами (там статика не приветствуется).
Ответ написан
Комментировать
IgorPI
@IgorPI
Согласно ТС.
Class User {
public function __construct(){
return $this;
}

public function myMethod (){

return $this;

}
}


По существу.
Есть Паттерн singleton.
Только там нужно создать статический метод и приватноне статическое свойство.

Метод должен при необходимости создавать объект в приватное свойство и возвращать его.

Так же объявить приватный конструктор.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 14:02
5000 руб./за проект
24 апр. 2024, в 13:45
15000 руб./за проект
24 апр. 2024, в 13:32
300 руб./за проект