紫气东来 | 2023-08-28 23:42:25 | 编程 | 1

php动态属性赋值

在php中魔术方法是一种特殊的方法,当对对象执行某些操作时会覆盖 PHP 的默认操作。

PHP 保留所有以 __ 开头的方法名称。 因此,除非覆盖 PHP 的行为,否则不建议使用此类方法名称。

下列方法名被认为是魔术方法: __construct()、 __destruct()、 __call()、 __callStatic()、 __get()、 __set()、 __isset()、 __unset()、 __sleep()、 __wakeup()、 __serialize()、 __unserialize()、 __toString()、 __invoke()、 __set_state()、 __clone()、 __debugInfo()。

​在给不可访问(protected 或 private)或不存在的属性赋值时,__set() 会被调用。

​读取不可访问(protected 或 private)或不存在的属性的值时,__get() 会被调用。

​当对不可访问(protected 或 private)或不存在的属性调用 isset() 或 empty() 时,__isset() 会被调用。

​当对不可访问(protected 或 private)或不存在的属性调用 unset() 时,__unset() 会被调用。

以下是php中使用魔术方法动态给对象的属性赋值。

<?php
class Myclass {
    private $data = [];
    public function __get($name) {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null;
    }
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
    public function __isset($name) {
        return isset($this->data[$name]);
    }
    public function __unset($name) {
        unset($this->data[$name]);
    }
}


$obj = new Myclass();

//设置
$obj->name = "tosry";
$obj->age = 30;

//获取
echo $obj->name;
echo $obj->age;

//检查是否存在
if (isset($obj->name)) {
    echo "Name is set.
";
}

删除
unset($obj->age);

上一篇:base64转码解码
下一篇:网页计算器

【小记】

【最近更新】
免责声明
js生成怪物地图
svg图片链接
js生成游戏世界地图
js禁止加载图片
2024年9月
人生真正的需求
网址收藏
php动态属性赋值