Задать вопрос
@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 не решает эту проблему((((
  • Вопрос задан
  • 59 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
Убрать static? И создать экземпляр класса start?
Добавить статичное поле с Logger?
Создать экземпляр логгера на 1 раз?
Не понятно, какой результат в итоге хочется достичь.
Ответ написан
Комментировать
Привожу упрощенный ответ.
Static Factory например.
Хотя задача неясна.
Ответ написан
Комментировать
@rPman
Динамические методы при работе работают с экземпляром объекта (внутри это $this а снаружи эито то что перед '->'), а статические методы не имеют такого объекта и в таком случае нужно явно передавать его.

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

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽