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

Я устанавливаю Ajax-Chat на моем сервере Apache (2.4) с PHP 7, но я получаю эту ошибку

Устаревший: нестатический метод AJAXChatFileSystem :: getFileContents () не должен вызываться статически в C: \ Apache24 \ HTDOCS \ услуги \ чат \ Lib \ класс \ AJAXChatTemplate.php на линии 37

Я пытался изменить function getContent() в public static function getContent() но после этого он показывает:

Неустранимая ошибка: Uncaught Ошибка: использование $ this, когда не в контексте объекта в C: \ Apache24 \ htdocs \ services \ chat \ lib \ class \ AJAXChatTemplate.php: 36

class AJAXChatTemplate {

var $ajaxChat;
var $_regExpTemplateTags;
var $_templateFile;
var $_contentType;
var $_content;
var $_parsedContent;

// Constructor:
function __construct(&$ajaxChat, $templateFile, $contentType=null) {
$this->ajaxChat = $ajaxChat;
$this->_regExpTemplateTags = '/\[(\w+?)(?:(?:\/)|(?:\](.+?)\[\/\1))\]/se';
$this->_templateFile = $templateFile;
$this->_contentType = $contentType;
}

function getParsedContent() {
if(!$this->_parsedContent) {
$this->parseContent();
}
return $this->_parsedContent;
}

function getContent() {
if(!$this->_content) {
$this->_content = AJAXChatFileSystem::getFileContents($this->_templateFile);
}
return $this->_content;
}
}

1

Решение

Статический вызов нестатического метода в PHP устаревшее поведение начиная с версии 7.0 и поднимает E_DEPRECATED предупреждение. Это означает, что поддержка этого поведения работает, но может быть (и, вероятно, будет) удалена в будущей версии.

Такое поведение подняло E_STRICT предупреждение в версиях PHP 5. *.

Меняя свой AJAXChatTemplate::getContent() метод статический не работает, потому что он использует $this что имеет смысл только в контексте экземпляра класса. Поэтому он вызывает фатальную ошибку в статическом контексте.

Вы используете AJAX-чат библиотека — вы не указали, какую версию вы используете, но есть вопрос в котором обсуждается ошибка, с которой вы столкнулись.

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


Чтобы решить вашу проблему, у вас есть два варианта:

Продолжайте использовать версию AJAX-Chat, установленную на данный момент

Просто используйте AJAXChatFileSystem::getFileContents() не-статический. Создайте экземпляр класса и используйте его, изменив getContent() метод вроде так:

function getContent()
{
if (!$this->_content) {
$ajaxChatFileSystem = new AJAXChatFileSystem();
$this->_content = $ajaxChatFileSystem->getFileContents($this->_templateFile);
}

return $this->_content;
}

Обновите библиотеку до последней версии и используйте статический метод.

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


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

E_DEPRECATED Предупреждения (как и все уведомления, предупреждения и ошибки) должны быть отключены для отображения пользователю в рабочем коде.

Тем не менее, я делаю не рекомендую это, потому что ваши журналы будут полны E_DEPRECATED предупреждения. Более того, как уже упоминалось, в будущих версиях PHP может быть устранена поддержка статического вызова нестатических методов.

Надеюсь это поможет 🙂

1

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

Других решений пока нет …

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