<?php
require_once 'OrderDaoInterface.php';
require_once 
'Order.php';

class 
DbOrderDao implements OrderDaoInterface
{
    private 
$_orders;

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

        
$dummy fgets($fp1024);

        
$this->_orders = array();
        while (
$buffer fgets($fp1024)) {
            list(
$orderId$itemIds) = explode(','rtrim($buffer));

            
$order = new Order($orderId);
            foreach (
explode('|'$itemIds) as $itemId) {
                
$item $itemDao->findById($itemId);
                if (!
is_null($item)) {
                    
$order->addItem($item);
                }
            }
            
$this->_orders[$orderId] = $order;
        }

        
fclose($fp);
    }

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