Вопрос про статические функции в php, как избавиться от Strict Standards: Non-static method?

Добрый вечер, столкнулся с такой проблемой со статической функцией.
Вызывая функцию newClass:
class newClass extends controllerClass{
  public function auth(){
  // Здесь я делаю проверки и в конечном итоге, вызываю класс:
  oldClass::view();
  //Данный класс тоже наследуется от controllerClass, но в конечном результате, мне выдаёт ошибку (Strict Standards: Non-static method), что метод вызова не статичен, так-как функция view не имеет в себе static, но когда я делаю функцию статичной, то не могу уже вызывать какую-либо функцию из controllerClass, так-как $this в статичной функции уже не доступен
  }
}

Вопрос такой, каким ещё методом можно воспользоваться, чтобы из функции auth вызывать класс с функцией так, чтобы унаследованный controllerClass в конечном итоге не запрашивал заново в конструктор значения. Т.к если я выполняю oldClass::view();, то уже в самой функции view(), я спокойно могу вызвать функцию из controllerClass: $this->controllfunction();, но увы, мне выдаёт как предупреждение, что Strict Standards: Non-static method и уже ниже показывает сообщение, которое я вывожу.
  • Вопрос задан
  • 355 просмотров
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Каша. В основном в голове. Не понимаете как работает наследование, не понимаете как работают классы. Ошибку вам четко указали, просто вы не знаете основ.
Я знаю, как расшифровывается Non-static method и понимаю, что функция идёт не статичной, как её хочет видеть сам php.
. PHP не хочет ее видеть статичной, просто указывает что вы ее статичной не сделали, а обращаетесь как к статик.
хочу вызвать класс oldClass, которая наследуется от controllerClass и функцию view, дабы уже вызвать $this->_message (как пример), уже из обновлённого controllerClass

1) Классы не вызываются, вызываются методы класса.
2) То что он наследуется от какого-то класса не делает его автоматически видимым внутри родительского класса, это ВООБЩЕ ДРУГОЙ КЛАСС теперь, никак не связанный с родителем, просто имеющий некоторые одинаковые методы и свойства. Чтобы вызвать его метод, сначала нужно создать объект - экземпляр нужного класса.
Ответ написан
Комментировать
Понятия не имею про ваш код, но предположу такой вариант:
<?php
class NewClass extends ControllerClass
{
    public function __construct(OldClass $oldController)
    {
        $this->oldController = $oldController;
    }

    public function auth()
    {
        $this->oldController->view();
    }
}
Ответ написан
trevoga_su
@trevoga_su
как избавиться от Strict Standards: Non-static method?
я заразился гриппом, скажите, как избавиться от болезни, не принимая лекарства

никак.

писать код нужно не тяп-ляп, а правильно. переписать в конце-концов. это не займет много времени.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы