error: не должен вызываться статически, принимая $ this из несовместимого контекста. только на моей машине

Члены моей команды написали статические вызовы функций в контроллере, такие как:

$data = ModelName::functionName($param);

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

$model = new Model();
$data = $model->functionName($param);

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

Я всегда обновляю свой проект через композитора. Моя версия php 5.4.

Кто-нибудь может знать, о чем это?

4

Решение

Возможно, у вас работает PHP E_STRICT Отчет об ошибках. Попробуйте отключить его и посмотреть, не устранила ли это проблему — например, очередь сообщений об ошибках для E_STRICT ошибки. Смотрите этот пост на SO :

<?php
error_reporting(E_ALL ^ E_STRICT);

Но я должен сказать, это плохая идея смешивать вызовы в стиле объекта и в стиле статики. Вызовы функций должны явно показывать, что функция вызывается в статическом или объектном контексте, и действовать соответственно. Даже если это немного сложно (насколько сложно сделать grep для всех файлов и изменить неправильные вызовы?), Я бы порекомендовал сначала исправить ваш код.

А также я рекомендую прочитать о статическое ключевое слово в объектно-ориентированном программировании — есть причина различать статические и объектные вызовы методов, и это не причина «сделать вещи проще», но больше «чтобы было понятнее», Я бы сказал.

7

Другие решения

Извините, но я не очень хорошо пишу по-английски, но я понимаю, что ваш вопрос таков:

вам нужно поставить статическую функцию:

static public function functionName () {

$data = ModelName :: functionName ($ param);

}

Это происходит через разные версии PHP что серверы обрабатывают.
Я надеюсь, что я понял ваш вопрос и хорошо его перевёл, потому что мне показалась похожая ошибка, и я решил ее таким образом.

0

По вопросам рекламы [email protected]