Question

I could not understand why __unset() not work.

class myclass {
    public $name = array();

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

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

    public function __unset($argu){ 
        echo "Working: Unset $this->name[$argu]";
        unset($this->name[$argu]);
    }
}

$obj = new myclass;
$obj->name = 'Arfan Haider';

var_dump(isset($obj->name));

unset($obj->name);

I read that whenever the unset() function is called, then Magic Method __unset() automatically is called and unsets the variable.

In above code I am using unset but it does not call __unset(). Why? Am I missing something in understanding the Magic Method __unset()?

Was it helpful?

Solution

The magic methods __set, __get, __isset and __unset only get called when accessing inaccessible properties. That means either private properties, protected properties (accessed outside of a child class) or properties which haven't been created.

Calling your internal variable $_name instead of $name, or setting $name to private or protected instead of public will fix your problem.

Note:

You should only use protected properties or functions when they need to be accessible from an extending class - don't use it just because.

OTHER TIPS

__unset() is invoked when unset() is used on inaccessible properties. (source)

Thus it can only be effective on inaccessible (i.e. private and protected) props.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top