PHP Parse error: syntax error, unexpected '?' in helpers.php 233

PHP Parse error: syntax error, unexpected '?' in helpers.php 233

当我创建一个新的 Laravel 项目时,浏览器显示错误 500。我在日志中发现:

PHP Parse error: syntax error, unexpected '?' in vendor/laravel/framework/src/Illuminate/Foundation/helpers.php on line 233

233 中的代码是:

return app('cache')->get($arguments[0], $arguments[1] ?? null);

但据我所知,PHP 7.0

支持空合并运算符 ( ?? )

我的PHP版本:

PHP 7.1.8-2+ubuntu14.04.1+deb.sury.org+4 (cli)(内置:2017 年 8 月 4 日 14:34:05)(NTS) 版权所有 (c) 1997-2017 PHP 集团 Zend Engine v3.1.0,版权所有 (c) 1998-2017 Zend Technologies 使用 Zend OPcache v7.1.8-2+ubuntu14.04.1+deb.sury.org+4,版权所有 (c) 1999-2017,Zend Technologies

Laravel版本:5.5.0

谁知道发生了什么事?

如果我不得不猜测,我会说您仅将 PPA 7.1.8 安装为 CLI (php7-cli)。您正在从中获取版本信息,但是您的 libapache2-mod-php 包仍然是 14.04 main,即 5.6。在浏览器中检查 php 信息以确认版本。您也可以考虑迁移到 Ubuntu 16.04 以在 main.

中获得 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

实际导致中断的运算符是 "null coalesce operator" 您可以在此处阅读更多相关信息:

php7 New Operators

如果您新升级了 php 版本,您可能会忘记重新启动网络服务器服务。

我在 ubuntu 上遇到了与 Laravel 5.5 大致相同的问题,最后我找到了一个解决方案 here 在 apache 使用的 php 版本之间切换:

  1. sudo a2dismod php5
  2. sudo a2enmod php7.1
  3. sudo service apache2 restart

并且有效

我遇到了同样的错误,问题是我没有正确安装 Composer。

我正在使用 Windows,并且我从 getcomposer.org 安装了 Composer-Setup.exe,当您安装了多个版本的 PHP 时,您必须 select安装时您 运行 的版本

我在 laravel 启动时遇到了同样的问题。解决方案如下。

1st - 我检查了 PHP 的版本。它是 5.6 很快就会给 laravel 带来问题。

2nd - 我将 PHP 的版本更改为 PHP 7.1.1。注意,在我的例子中,我更改了我的环境变量,该变量正在获取 Xampp 的 PHP 版本 5.6 我为 laragon 更改为 7.1.1。

3rd - 我去了终端/控制台并导航到我的项目所在的文件夹并键入以下命令:php artisan 服务。 它奏效了!在我的例子中,它从端口 8000 开始,请参见下面的示例。

C:\laragon\www\第一个>phpartisan服务 Laravel 开发服务器已启动:http://127.0.0.1:8000

我希望我能帮助到和我遇到同样问题的人。

我遇到过类似的问题。它看起来像这样:

我的 PHP 版本不支持空合并运算符 (??)。因为我没有升级版本的选项,所以我写了这样的东西:{{ $product->price ? $product->price:'' }} 而不是 {{ $product->price ?? '' }},它解决了问题。