类变量中的类型提示

2022-08-30 11:54:55
<?php

namespace Sandbox;

class Sandbox {

    private Connectors\ISandboxConnector $connection;

    public function __construct(Connectors\ISandboxConnector $conn) {
        $this->connection = $conn;
    }

}

?>

对于上面的代码,我得到以下错误:

Parse error: syntax error, unexpected 'Connectors' (T_STRING), expecting variable (T_VARIABLE)

当我删除类型提示并且该$connection变量时,它将是而不是,为什么?var_dumpprivate Sandbox\SandboxSandbox\Connectors\ISandboxconnector


答案 1

PHP 7.3 及更低版本不支持类型化属性。您只能定义一个变量,如下所示:

class Sandbox {
    private $connection;

但是,为了帮助编辑者理解您的代码,您可以使用 @var 标记来记录属性的预期类型:

class Sandbox {
    /** @var Connectors\ISandboxConnector */
    private $connection;

更新

7.4.0 菲律宾比索

感谢@Manuel提到新的更新,PHP 7.4 现在根据 PHP RFC 引入了类型化属性:类型化属性 2.0

属性类型声明支持 PHP 支持的所有类型声明,但 和 除外。还支持任何类或接口名称,stdClass,标量和复合类型,对父对象和自己的对象的引用。voidcallable

class Sandbox {
    public int $id;
    public string $name;
    private Connectors\ISandboxConnector $connection;
}

注意:注意副作用,如未初始化的状态和继承严格的规则。


答案 2

从 PHP 7.4 开始,您可以在类属性上键入 hint,如下所示。例如,您的属性将如下所示:$connection

class Sandbox {
    private Connectors\ISandboxConnector $connection;
}

推荐