【问题标题】:Is it possible to explicitly declare the type of a local variable in PHP?是否可以在 PHP 中显式声明局部变量的类型?
【发布时间】:2020-11-13 20:58:40
【问题描述】:

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

class HasString {
    private string $value;

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

    public function setAttribute(string $arg0)
    {
        $this->value = $arg0;
    }
}

但是,以下将不起作用。

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

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

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

【问题讨论】:

    标签: php


    【解决方案1】:

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

    $string = (string) 3;

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

    如果您只想允许一种类型(并且没有任何转换/转换),简单的答案是:在 PHP 中您不能真正做到这一点,因为 PHP 是一种弱类型语言。有一些解决方法,您可以阅读更多关于它的信息in this question。

    【讨论】:

    • 这个技巧帮助 IDE 识别变量类型并保证变量是强制类型转换的,但是你仍然会得到一些意想不到的结果:一个数字将被转换为它的十进制字符串表示和一个数组将被转换为"Array" 字符串,而不是我们得到类型分配不正确的运行时错误。
    【解决方案2】:

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

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

    您正在寻找的是 PHPDoc Annotations,因为不幸的是,您无法对局部变量上的类属性进行操作。你可以在这里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
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 2011-09-16
      相关资源
      最近更新 更多