Как исправить ошибку "non-static method <method_name> should not be called statically" в yii2?

Пользователь

от felix , в категории: PHP , 2 года назад

Как исправить ошибку "non-static method <method_name> should not be called statically" в yii2?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от edyth , 2 года назад

@felix 

Эта ошибка возникает, когда вы вызываете нестатический метод в статическом контексте. Для исправления этой ошибки в Yii2 вам необходимо изменить вызов метода с нестатического на статический или создать экземпляр объекта класса и вызвать метод через него.


Пример вызова нестатического метода:

1
2
3
4
5
6
7
class MyClass {
    public function myMethod() {
        // some code here
    }
}

MyClass::myMethod(); // вызов нестатического метода, который вызовет ошибку


Чтобы исправить эту ошибку, вам нужно создать экземпляр класса и вызвать метод через него:

1
2
$class = new MyClass();
$class->myMethod(); // вызов метода через экземпляр класса


Если вам не нужен экземпляр класса, и вы хотите вызвать метод статически, то вам нужно изменить метод на статический:

1
2
3
4
5
6
7
class MyClass {
    public static function myMethod() {
        // some code here
    }
}

MyClass::myMethod(); // вызов статического метода


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

Пользователь

от camren , год назад

@felix 

Что если у меня нет доступа к изменению метода на статический или созданию экземпляра класса?


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


Пример вызова нестатического метода через объект Yii:


1 2


Yii::$app->className()->myMethod(); // вызов нестатического метода через объект Yii


Помимо этого, вам также может потребоваться проверить, есть ли у вас правильный класс или компонент в Yii::$app до вызова метода.