Laravel 5.2执行composer update后出现Inflector.php语法错误求助
解决Laravel 5.2.45 Composer Update后的Inflector.php语法错误
问题根源
你遇到的这个语法错误本质是PHP版本兼容问题:
- 出错的
Inflector::tableize方法用了PHP 7.0才引入的参数类型提示(string $word)和返回类型声明(: string) - 你的Laravel 5.2.45要求PHP版本
>=5.5.9,但如果当前运行的是PHP 5.5/5.6,这些版本完全不支持这类语法,所以直接抛出syntax error。
出现这个问题的核心是:composer update时,laravelcollective/html或illuminate/support这类依赖被更新到了仅支持PHP 7+的版本,和Laravel 5.2的环境不匹配。
解决方案
方案1:锁定依赖到Laravel 5.2兼容版本
修改你的composer.json,把laravelcollective/html的版本明确锁定为5.2分支,避免拉取高版本:
"require": { "php": ">=5.5.9", "laravel/framework": "5.2.*", "laravelcollective/html": "5.2.*" }
接着执行以下步骤:
- 删除项目根目录的
composer.lock文件和vendor文件夹 - 运行命令:
composer install
这会重新安装所有和Laravel 5.2完全兼容的依赖,illuminate/support会保持在5.2版本,其Inflector.php中的方法不会包含PHP 7专属语法。
方案2:升级PHP版本到7.0+
如果服务器环境允许,直接把PHP版本升级到7.0或更高(Laravel 5.2对PHP 7.0+是兼容的)。升级后PHP就能正确解析类型提示和返回类型声明,错误会自动消失。
验证方法
安装完成后,你可以打开vendor/illuminate/support/Inflector.php查看tableize方法,Laravel 5.2的正确版本应该是这样的(无类型声明):
public static function tableize($word) { return strtolower(preg_replace('~(?<=\w)([A-Z])~', '_$1', $word)); }
内容的提问来源于stack exchange,提问作者Abdul Qadir R.
相关产品推荐
相关产品推荐

