PHP Parse error: syntax error, unexpected ':', expecting ';' or '{'

PHP Parse error: syntax error, unexpected ':', expecting ';' or '{'

我正在尝试玩 php7。我已经安装了 https://github.com/rlerdorf/php7dev 并通过 phpstorm 连接。 我正在尝试使用这样的新功能:

<?php
namespace Kata;

class StringCalculator
{
    public function add(string $parameters): int {
        return 0;
    }
}

然后我尝试这样测试它:

<?php
namespace Kata;

class StringCalculatorTest extends \PHPUnit_Framework_TestCase
{
    public function testAddEmptyString()
    {
        $calc = new StringCalculator();
        $this->assertSame(0, $calc->add(''));
    }
}

并且我使用 php 单元启动,不幸的是我有

PHP Parse error: syntax error, unexpected ':', expecting ';' or '{'

可能我没有正确安装 php7 但当我 php -v

时似乎没问题

PHP 7.0.0-dev (cli) (built: May 25 2015 16:34:33) (DEBUG) Copyright (c) 1997-2015 The PHP Group Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

更新

问题不在 installation/configuration php7(我认为),因为当我 运行 从 cli 像这样:

<?php
    $calc = new Kata\StringCalculator();
    var_dump($calc->add(''));

输出 int(0) 并且没有错误。

所以问题可能出在 php 单元?

从错误中可以明显看出执行您的代码时出现问题。

PHP Parse error: syntax error, unexpected ':', expecting ';' or '{'

您的问题很可能来自 PHPUnit,因为您的 php 7 设置正确。如果 PHPUnit 无法理解你的代码,它会在 PHP 7 代码的第一位失败,在你的情况下使用 return type declaration 在这一行

public function add(string $parameters): int {

当您尝试断言时,它会在您的 php 单元测试中被触发。如果您评论您的断言,错误应该会消失。

我建议验证您正在使用的 PHPUnit 的版本,您应该使用版本 5 或更高版本。 (对于 php 7.0,最好是 6) 有关 PHP 单元版本的更多详细信息,请查看 this link.

这是因为 composer 版本与 php 版本不一致。
"laravel/framework": "^9.11" 适用于 php 8.1。升级到 php 8.1 后,未显示任何错误