PHP 中是否可以显式声明局部变量的类型?

Leo*_*ele 5 php

我知道可以声明函数参数、函数返回和类属性的类型。(如下所示)

class HasString {
    private string $value;

    public function getValue() : string
    {
        return $value;
    }

    public function setAttribute(string $arg0)
    {
        $this->value = $arg0;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,以下内容将不起作用。

// Tested in PHP 7.4.1
string $localVar = "value"; // Parse error: syntax error, unexpected '$localVar' (T_VARIABLE) in php shell code on line 1
Run Code Online (Sandbox Code Playgroud)

php 是否有可用于显式声明局部变量类型的语法?

这对于捕获变量接收意外值的错误非常有用,并有助于 IDE 在处理混合或未指定的函数返回时识别变量类型。

Dir*_*ber 6

您可以使用类型转换将变量强制转换为如下类型:

$string = (string) 3;

您会发现$string现在是字符串:"3"

如果您只想允许一种类型(而不进行任何转换/强制转换),简单的答案是:在 PHP 中您不能真正做到这一点,因为 PHP 是一种弱类型语言。有一些解决方法,您可以在这个问题中阅读更多相关信息。


小智 2

我认为仅对变量进行类型转换有点冒险,因为可能会发生意外行为。

如果将 int 转换为字符串,这在很多情况下可能有效,但也可能导致不那么明显的错误。

您正在寻找的是 PHPDoc 注释,因为不幸的是,无法对局部变量上的类属性执行您所做的操作。您可以在这里了解更多信息https://www.phpdoc.org/https://phpstan.org/writing-php-code/phpdocs-basics

但如果您使用任何框架,它已经附带了这些框架。或者您的 IDE 也只支持它们,例如 Phpstorm 或 Eclipse。

代码示例

public function foo(): void {
    /* @var string */
    $localVar;
    // ... do other stuff
}
Run Code Online (Sandbox Code Playgroud)