Я устанавливаю 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;
}
}
Статический вызов нестатического метода в 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 может быть устранена поддержка статического вызова нестатических методов.
Надеюсь это поможет 🙂
Других решений пока нет …