phpDocumentor

@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;
 }

Search results