[英]Type hinting in class variables
<?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_dump
,它将是private Sandbox\\Sandbox
而不是Sandbox\\Connectors\\ISandboxconnector
,为什么?
PHP 7.3 及以下版本不支持类型化属性。 您只能定义如下变量:
class Sandbox {
private $connection;
但是,为了帮助编辑器理解您的代码,您可以使用@var
标记来记录属性的预期类型:
class Sandbox {
/** @var Connectors\ISandboxConnector */
private $connection;
PHP 7.4.0
感谢@Manuel 提到新的更新,PHP 7.4 现在根据PHP RFC: Typed Properties 2.0引入了类型化属性。
属性类型声明支持 PHP 支持的所有类型声明,除了void
和callable
。 还支持任何类或接口名称、stdClass、标量和复合类型、对父对象和自己的对象的引用。
class Sandbox {
public int $id;
public string $name;
private Connectors\ISandboxConnector $connection;
}
注意:注意副作用,例如未初始化状态和继承严格规则。
自PHP 7.4你可以在类的属性类型提示,如图所示这里。 例如,您的$connection
属性将如下所示:
class Sandbox {
private Connectors\ISandboxConnector $connection;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.