【问题标题】:PHP8 VS Code: Compiler throws error when using union typesPHP8 VS Code:编译器在使用联合类型时抛出错误
【发布时间】:2022-06-14 00:32:22
【问题描述】:

我正在使用 Visual Studio Code 编写 PHP8 代码。我想试试严格类型declare(strict_types=1)

当使用单一类型时,一切都很好:

function doSomething(int $value): ?float
{
    if ($value === null) return null;
    return round($value, 3);
}

使用联合类型时,编译器会抛出错误:

function doSomething(int|string $value): ?float
{
    if ($value === null) return null;
    return round($value, 3);
}

错误:

'VariableName' expected
')' expected
'{' expected
Unexpected '|'
';'
...

我禁用了 PHP 语言功能,我正在使用 PHP Intelephense v1.8.0 扩展。

【问题讨论】:

  • $value 不能是null,因为$value 的类型是intstring (3v4l.org/e2kuH#v8.0.15)。也就是说,错误表明解析器不知道 PHP8 和联合类型 (3v4l.org/v4OJf)。
  • 所以目前没有支持/适用于 PHP8 的 PHP VS 代码扩展?
  • 您非常强调编译器抛出的错误,但您的 IDE 短绒 (PHP Intelephense) 显示了这一点。实际的 PHP 错误是“Fatal error: Uncaught TypeError: round(): Argument #1 ($num) must be of type int|float, string given” (demo) 因为round() 不接受字符串。
  • 另外,您是否已将 PHP Intelephense 配置为使用 PHP/8.1 语法? stackoverflow.com/questions/70621681/…

标签: php visual-studio-code


【解决方案1】:

我也有这个问题。在PHP Intelephense Quick Start guide 中,它是这样说的:

  1. 禁用内置的 VSCode PHP 语言功能。
  • 转到Extensions
  • 搜索@builtin php
  • 禁用PHP Language Features。让PHP Language Basics 启用语法高亮显示。

请注意,提供类似功能的其他(第 3 方)PHP 扩展 为了获得最佳效果,还应禁用功能。

我禁用了 PHP 语言功能,现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-28
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    相关资源
    最近更新 更多