@Kirill-Gorelov
С ума с IT

Как из статичного метода вызвать динамичный?

Как в статичном методе вызвать класс логирования. Привожу супер упрощенный код.

<?php
// Enter your code here, enjoy!
class Logger
{
	public function log($test)
	{
		echo $test;
	}
}

class start
{
	private Logger $logger;
	
	public function __contructor(Logger $logger)
	{
		$this->logger = $logger;
	}
	public static function exec()
	{
		$this->logger->log('Привет');
	}
}

var_dump(start::exec());


Ругается на $this, что вполне логично, но и использование self не решает эту проблему((((
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 3
vabka
@vabka
Токсичный шарпист
Убрать static? И создать экземпляр класса start?
Добавить статичное поле с Logger?
Создать экземпляр логгера на 1 раз?
Не понятно, какой результат в итоге хочется достичь.
Ответ написан
Комментировать
ddv88
@ddv88
Binance Futures
Привожу упрощенный ответ.
Static Factory например.
Хотя задача неясна.
Ответ написан
Комментировать
@rPman
Динамические методы при работе работают с экземпляром объекта (внутри это $this а снаружи эито то что перед '->'), а статические методы не имеют такого объекта и в таком случае нужно явно передавать его.

В твоем случае например добавить в метод static exec параметр $this (кстати не называй это так, чтобы путаницы не было) либо завести статичную переменную и хранить в ней в виде массива (или последний созданный, в общем под задачу) все экземпляры объекта.

p.s. весь смысл статичных методов - работа до того как экземпляр объекта создан, например создать его.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽