Нестатический метод AJAXChatFileSystem :: getFileContents () не должен вызываться статически - PullRequest
0 голосов
/ 09 февраля 2019

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

Устаревший: нестатический метод AJAXChatFileSystem :: getFileContents () не должен бытьвызывается статически в C: \ Apache24 \ htdocs \ services \ chat \ lib \ class \ AJAXChatTemplate.php в строке 37

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

Неустранимая ошибка: необученная ошибка: использование $ 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 Ответ

0 голосов
/ 09 февраля 2019

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

Это поведение вызвало предупреждение E_STRICT в версиях PHP 5. *.

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

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

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


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

Продолжить использовать версию 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 может быть устранена поддержка статического вызова нестатических методов.

Надеюсь, это поможет:)

...