<?php
require_once 'OrderItem.php';

class 
ItemDao
{
    private static 
$_instance;
    private 
$_items;

    private function 
__construct()
    {
        
$fp fopen('item_data.csv''r');
        if (!
$fp) {
            throw new 
RuntimeException('File [item_data.csv] is not readable.');
        }

        
$dummy fgets($fp1024);

        
$this->_items = array();
        while (
$buffer fgets($fp1024)) {
            list(
$itemId$itemName$itemPrice) = explode(','rtrim($buffer));

            
$this->_items[$itemId] = new Item($itemId$itemName$itemPrice);
        }

        
fclose($fp);
    }

    public static function 
getInstance()
    {
        if (!isset(
self::$_instance)) {
            
self::$_instance = new ItemDao();
        }
        return 
self::$_instance;
    }

    public function 
findById($itemId)
    {
        if (
array_key_exists($itemId$this->_items)) {
            return 
$this->_items[$itemId];
        } else {
            return 
null;
        }
    }

    public function 
setAside(OrderItem $orderItem)
    {
        echo 
$orderItem->getItem()->getName() . 'の在庫引当を行いました。<br />';
    }

    public final function 
__clone()
    {
        throw new 
LogicException('Clone is not allowed against [' get_class($this) . '].');
    }
}