PHP 魔术方法 __isset() 和 __unset()

在 PHP 的面向对象中,如果使用 isset()、empty() 和 unset() 这样的内置方法判断或删除一个对象的非公有属性时,是会报错的。要想可以实现这样的判断或删除操作,需要类里面有 __isset() 或 __unset() 的魔术方法

__isset() 和 __unset()

  • 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被自动调用。
  • 当对不可访问属性调用 unset() 时,__unset() 会被自动调用。
public function __isset($name)

public function __unset($name)

案例:

class Person
{
    public $sex;
    private $name;
    private $age;

    /**
     * Person constructor.
     * @param string $name
     * @param int $age
     * @param string $sex
     */
    public function __construct($name = '', $age = 25, $sex = '男')
    {
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }

    /**
     * 当在类外部使用 isset() 函数测定私有成员时,自动调用
     * @param $name
     */
    public function __isset($name)
    {
        echo isset($this->$name);
    }

    /**
     * @param $name
     */
    public function __unset($name)
    {
        unset($this->$name);
    }
}
$person = new Person('kevin', 18, 'male');
// __isset()
echo isset($person->sex), "\n";     // 1
echo isset($person->name), "\n";    // 1
echo isset($person->age), "\n";     // 1

// __unset()
unset($person->name);
echo isset($person->name) ? 'has' : 'not_has', "\n"; // not_has
echo "\r\n";

你可能感兴趣的:(PHP 魔术方法 __isset() 和 __unset())