@property, @property-read, @property-write
The @property
tag is used to declare which "magic" properties are supported.
Syntax
@property[<-read|-write>] [Type] [name] [<description>]
Description
The @property
tag is used when a class
or trait
implements the
\__get() and/or
\__set() "magic"
methods to resolve non-literal properties at run-time.
The @property-read
and @property-write
variants MAY be used to indicate "magic"
properties that can only be read or written.
For example, the @property-read
tag could be used when a class contains
a \__get() magic
method which allows for specific names, while those names are not covered in the
\__set() magic method.
Property supported via | Tag to use |
---|---|
__get()
and __set()
|
@property
|
__get()
only |
@property-read
|
__set()
only |
@property-write
|
The @property
, @property-read
and @property-write
tags can ONLY be used
in a PHPDoc that is associated with a class
or trait
.
Effects in phpDocumentor
Structural Elements
of type class
or trait
tagged with the
@property
, @property-read
or @property-write
tag will show an extra
property in their property listing matching the data provided with this tag. Native properties
always take precedence over properties defined with this tag.
Examples
class Parent
{
public function __get()
{
<...>
}
public function __set()
{
<...>
}
}
/**
* @property string $myProperty
* @property-read string $myReadOnlyProperty
* @property-write string $myWriteOnlyProperty
*/
class Child extends Parent
{
<...>
}
In the following concrete example, a class User
implements the magic __get()
method,
in order to implement a "magic", read-only $full_name
property:
/**
* @property-read string $full_name
*/
class User
{
/**
* @var string
*/
public $first_name;
/**
* @var string
*/
public $last_name;
public function __get($name)
{
if ($name === "full_name") {
return "{$this->first_name} {$this->last_name}";
}
}
}
The @property-write
is ignored by phpDocumentor as the native php property is defined.
/**
* @property-write mix $full_name
*/
class User
{
public string $full_name;
}