Нестатический метод не должен вызываться статически

Недавно я обновил PHP 5.4 и получил сообщение об ошибке статического и нестатического кода.

Это ошибка:

PHP Strict Standards:  Non-static method VTimer::get() 
should not be called statically in /home/jaco/public_html/include/function_smarty.php on line 371

Это строка 371:

$timer  = VTimer::get($options['magic']);

Я надеюсь, что кто-то может помочь.


person Novice Hobby PHP Boy    schedule 30.10.2013    source источник
comment
Добро пожаловать в переполнение стека. Вы должны выбрать имя пользователя. Я предлагаю Novice Hobby PHP Boy.   -  person webbiedave    schedule 31.10.2013
comment
Спасибо, и это хорошее имя для меня, Серджиу ;)   -  person Novice Hobby PHP Boy    schedule 31.10.2013


Ответы (4)


Это означает, что он должен называться так:

$timer = (new VTimer)->get($options['magic']);

Разница между static и non-static заключается в том, что первый не нуждается в инициализации, поэтому вы можете вызвать classname, затем добавить к нему :: и немедленно вызвать метод. Вот так:

ClassName::method();

и если метод не статичен, вам нужно его инициализировать так:

$var = new ClassName();
$var->method();

Однако в PHP 5.4 вы можете использовать этот синтаксис в качестве сокращения:

(new ClassName)->method();
person mamdouh alramadan    schedule 30.10.2013
comment
Или, возможно, ему следует изменить метод на статический (поскольку это существующая кодовая база, которая сейчас запускается в обновленной среде PHP). - person webbiedave; 31.10.2013
comment
@mamdouh Вы молодец, ошибка исчезла. Спасибо за помощь. Приятно провести вечер. искренне, Жако - person Novice Hobby PHP Boy; 31.10.2013
comment
@ user2938848 - пожалуйста. Надеюсь, вы отметите ответ как принятый, так как он работает с вами :) - person mamdouh alramadan; 31.10.2013
comment
Более быстрым вызовом: (new ClassName)-›method(); ты имеешь в виду стенографию. Правильно? - person Piyush Balapure; 17.04.2015
comment
Я уверен, что синтаксис - это намерение. - person blackmambo; 23.10.2015

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

class Handler {
    public static function helloWorld() {
        echo "Hello world!";
    }
}
person deadghost    schedule 21.06.2016

Самый элегантный способ:

(new ClassName)->method();

Вы также можете преобразовать свою функцию в static function call() {}, но это зависит от вашей функции и того, что вы с ней делаете.

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

person Particle Effect    schedule 01.05.2020

я решил эту проблему таким образом.

error_reporting('E_NONE');// add this in the pdf dwonload function
$this->load->library('mpdf/mpdf');

Это должно помочь.

person Anupam Hayat Shawon    schedule 09.12.2020
comment
Отчеты об ошибках резки не являются решением, они просто скрывают проблему... - person Jean-Philippe Murray; 15.02.2021