<?php
namespace Sandbox;
class Sandbox {
private Connectors\ISandboxConnector $connection;
public function __construct(Connectors\ISandboxConnector $conn) {
$this->connection = $conn;
}
}
?>
For the above code I'm getting the following error:
Parse error: syntax error, unexpected 'Connectors' (T_STRING), expecting variable (T_VARIABLE)
When I remove the type hinting and var_dump
that $connection variable, it will be private Sandbox\Sandbox
and not Sandbox\Connectors\ISandboxconnector
, why?
PHP 7.3 and below does not support typed properties. You could only define a variable as below:
class Sandbox {
private $connection;
However, to help editors understand your code, you may use a @var
tag to document the expected type of the property:
class Sandbox {
/** @var Connectors\ISandboxConnector */
private $connection;
PHP 7.4.0
Thanks @Manuel for mentioning the new update, PHP 7.4 now introduces typed properties according to PHP RFC: Typed Properties 2.0.
Property type declarations support all type declarations supported by PHP, with the exception of void
and callable
. Any class or interface name, stdClass, scalar and compound types, references to parent and own objects are also supported.
class Sandbox {
public int $id;
public string $name;
private Connectors\ISandboxConnector $connection;
}
Note: keep an eye on side effects such as uninitialised state and inheritance strict rules.