Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Вызов публичного метода класса в наследуемом классе статического метода.


 Поделиться

Рекомендованные сообщения

Доброго дня. Подскажите, как обратиться к публичному методу наследуемого класса из статического. Пример: 

abstract class Controllers
{
    protected $components;
    protected $image;
    protected $language;
    

    public function __construct()
    {
        $this->components = Registry::get('load');
        $this->image      = Registry::get('image'); 
        $this->language   = Registry::get('language');
    }
}

Class Errors extends Controllers
{
    public static function goErr404()
    {
        
        $language = self::Language->getLanguage('errors'); // не работает
       
       
        
    }

 

Ссылка на комментарий
Поделиться на других сайтах

19.01.2023 в 12:43, chukcha сказал:

а где он статичный?

Оговорочка. Вызываю из статического метода)

Ссылка на комментарий
Поделиться на других сайтах

19.01.2023 в 12:50, chukcha сказал:

$this->language
???

Не. Ругает меня матом)

image.png.3e71bf17054efba041a46ef924969811.png

Ссылка на комментарий
Поделиться на других сайтах

Мне кажется вы путаете понятия класс и объект. 

Объект это экземпляр класса он создается через new 

А класс это условно шаблон для создания объекта. 
Статический метод - это метод класса, не объекта, когда объект еще не создан. 
Вы не можете из статического метода класса вызвать метод объекта потому что объект еще не создан. 
Вам нужно вначале создать объект (пусть даже из этого статического метода и потом вызывать методы этого объекта) но это очень нестандартный подход. 
Или через статический метод работать с такими же статическими методами или свойствами этого класса - так обычно и делается. 
Или использовать не статические методы для работы с методами объекта. 

 

пс. или в вашем статическом методе 

сделать как-то так не привязываясь к методам этого объекта 

Registry::get('language')->getLanguage('errors');

 

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

20.01.2023 в 12:41, sv2109 сказал:

Мне кажется вы путаете понятия класс и объект. 

Объект это экземпляр класса он создается через new 

А класс это условно шаблон для создания объекта. 
Статический метод - это метод класса, не объекта, когда объект еще не создан. 
Вы не можете из статического метода класса вызвать метод объекта потому что объект еще не создан. 
Вам нужно вначале создать объект (пусть даже из этого статического метода и потом вызывать методы этого объекта) но это очень нестандартный подход. 
Или через статический метод работать с такими же статическими методами или свойствами этого класса - так обычно и делается. 
Или использовать не статические методы для работы с методами объекта. 

 

пс. или в вашем статическом методе 

сделать как-то так не привязываясь к методам этого объекта 

Registry::get('language')->getLanguage('errors');

 

Спасибо. Так и поступил. Пришлось углубиться в данный вопрос

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.