PHP 设计模式之数据对象映射模式

11 篇文章 1 订阅
<?php

// 数据对象映射模式
class User
{
    public $id;
    public $name;
    public $mobile;
    public $regtime;

    private $dataFile;


    public function __construct($id)
    {
        $this->dataFile = "user.$id.data";
        if(file_exists($this->dataFile)) {
            $data = json_decode(file_get_contents($this->dataFile), 1);

            $this->name = $data['name'];
            $this->mobile = $data['mobile'];
            $this->regtime = $data['regtime'];
        }
    }

    public function __destruct()
    {
        return file_put_contents($this->dataFile, json_encode([
            'name' => $this->name,
            'mobile' => $this->mobile,
            'regtime' => $this->regtime
        ]));
    }
}

// 结合注册器模式
class Register
{
    private static $object;

    public static function get($key)
    {
        return isset(self::$object[$key]) ? self::$object[$key] : false;
    }

    public static function set($key, $obj)
    {
        self::$object[$key] = $obj;
    }
}


// 结合工厂模式
class Factory
{
    public static function getUser($id)
    {
        if(!$user = Register::get($id)) {
            $user = new User($id);
            Register::set($id, $user);
            echo "register set \n";
        }
        return $user;
    }
}


class Page
{
    public function index()
    {
        $user = Factory::getUser(1);
        $user->mobile = '15165854585';
        $user->name = 'test';
        $user->regtime = time();
    }

    public function test()
    {
        $user = Factory::getUser(1);
        $user->mobile = '15165854585';
        $user->name = 'test23333';
        $user->regtime = time();
    }
}



$page = new Page;
$page->index();
$page->test();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值