Ответ сводится к тому, что означает реализовать интерфейс. Когда класс реализует интерфейс, это означает, что каждый экземпляр класса будет отвечать на каждый метод интерфейса. Когда вы реализуете метод как статический, вы можете вызвать метод без экземпляра класса, но это не соответствует обещанию реализации наследования, что метод будет доступен для каждого экземпляра класс.
Если бы я должен был догадаться, я бы сказал, что вы установили PPA 7.1.8 только как CLI (php7-cli). Вы получаете информацию о своей версии, но ваш пакет libapache2-mod-php по-прежнему составляет 14.04, что составляет 5.6. Проверьте свою phpinfo в своем браузере, чтобы подтвердить версию. Вы также можете рассмотреть возможность перехода на Ubuntu 16.04, чтобы получить PHP 7.0 в основном.
Если вы столкнулись с этой ошибкой при использовании командной строки, потому что вы должны использовать php 7 для выполнения всего, что вы пытаетесь выполнить. Случилось так, что код пытается использовать оператор, доступный только в php7 +, и вызывает синтаксическую ошибку.
Если у вас уже есть php 7+ на вашем компьютере, попробуйте указать в командной строке более высокую версию php, которую хотите использовать.
export PATH=/usr/local/[php-7-folder]/bin/:$PATH
Вот точное местоположение, которое работало на основе моей установки для ссылки:
export PATH=/usr/local/php5-7.1.4-20170506-100436/bin/:$PATH
Оператор, который фактически вызвал перерыв, является «нулевым коалесцирующим оператором», который вы можно прочитать здесь:
Если вы недавно обновили свою версию php, вы можете забыть перезагрузить службу веб-сервера.
У меня была примерно такая же проблема с Laravel 5.5 на ubuntu, наконец, я нашел решение здесь для переключения между версиями php, используемыми apache:
и работает