目的

  • 拿取資料的 model 只實例化一次存於 runtime cache 中

紀錄

程式

Singleton.php

<?php
abstract class Singleton
{
    final protected function __construct(){}
    abstract protected function init( $initData );
    public static function getInstance( $initData )
    {
        static $object = array();

        // 子物件 ClassName
        $class = static::class;

        // 未建立 RuntimeObject
        if( !isset($object[$class]) )
        {
            $object[$class] = new $class();
        }

        // Runtime中有該物件則執行
        if( isset($initData) )
        {
            $object[$class]->init($initData);
        }

        // 返回該物件
        return $object[$class];
    }
}

UserInfo.php

<?php
class UserInfo extends Singleton
{
    protected $userId;
    public function init( $userId )
    {
        $this->userId = $userId;
    }

    public function getUserData()
    {
        // cache
        // sqlData
        return $this->userId;
    }
}

實例化

<?php
$userA = UserInfo::getInstance(123)->getUserId();
echo $userA;

結果

123