get set isset and unset

suggest change

Whenever you attempt to retrieve a certain field from a class like so:

$animal = new Animal();
$height = $animal->height;

PHP invokes the magic method __get($name), with $name equal to "height" in this case. Writing to a class field like so:

$animal->height = 10;

Will invoke the magic method __set($name, $value), with $name equal to "height" and $value equal to 10.

PHP also has two built-in functions isset(), which check if a variable exists, and unset(), which destroys a variable. Checking whether a objects field is set like so:

isset($animal->height);

Will invoke the __isset($name) function on that object. Destroying a variable like so:

unset($animal->height);

Will invoke the __unset($name) function on that object.

Normally, when you don’t define these methods on your class, PHP just retrieves the field as it is stored in your class. However, you can override these methods to create classes that can hold data like an array, but are usable like an object:

class Example {
    private $data = [];

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }

    public function __get($name) {
        if (!array_key_exists($name, $this->data)) {
            return null;
        }

        return $this->data[$name];
    }

    public function __isset($name) {
        return isset($this->data[$name]);
    }

    public function __unset($name) {
        unset($this->data[$name]);
    }
}

$example = new Example();

// Stores 'a' in the $data array with value 15
$example->a = 15;

// Retrieves array key 'a' from the $data array
echo $example->a; // prints 15

// Attempt to retrieve non-existent key from the array returns null
echo $example->b; // prints nothing

// If __isset('a') returns true, then call __unset('a')
if (isset($example->a)) {
    unset($example->a));
}

empty() function and magic methods

Note that calling empty() on a class attribute will invoke __isset() because as the PHP manual states:

empty() is essentially the concise equivalent to !isset($var) || $var == false

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:


Magic methods:
* get set isset and unset
* clone
* invoke

Table Of Contents
2 Arrays
4 Types
10 Cookies
14 JSON
15 SOAP
17 cURL
19 XML
21 Traits
25 Magic methods
35 UTF-8
36 URLs
38 PHPDoc
41 Loops
44 Closur
72 YAML
77 Cache
78 Streams
81 PDO
82 SQLite3
83 Sockets
87 MongoDB
93 IMAP
94 Redis
95 Imagick
102 APCu
108 PSR