<!DOCTYPE html>
<meta charset="utf-8">
<?php
//クラスを切り替えるだけで、本番コードとテストコードを切り替えられる
require_once 'DbFactory.php';
$factory = new DbFactory();
//require_once 'MockFactory.php';
//$factory = new MockFactory();

//以降は同じインターフェースで利用できる
$itemDao $factory->createItemDao();

$itemId 2;
$item $itemDao->findById($itemId);
echo 
'ID.' $itemId 'の商品は' $item->getName() . 'です。<br />';

$orderDao $factory->createOrderDao();

$orderId 3;
$order $orderDao->findById($orderId);
echo 
'ID.' $orderId 'の注文は以下のとおりです。<br />';
foreach (
$order->getItems() as $item) {
    echo 
$item['object']->getId() . ' : ' $item['object']->getName() . '<br />';
}

/*
//本番コードを直接呼び出した場合のコード
require_once 'DbItemDao.php';
require_once 'DbOrderDao.php';

$itemDao = new DbItemDao();

$itemId = 2;
$item = $itemDao->findById($itemId);
echo 'ID.' . $itemId . 'の商品は' . $item->getName() . 'です。<br />';

$orderDao = new DbOrderDao(new DbItemDao());

$orderId = 3;
$order = $orderDao->findById($orderId);
echo 'ID.' . $orderId . 'の注文は以下のとおりです。<br />';
foreach ($order->getItems() as $item) {
    echo $item['object']->getId() . ' : ' . $item['object']->getName() . '<br />';
}
*/

/*
//テストコードを直接呼び出した場合のコード
require_once 'MockItemDao.php';
require_once 'MockOrderDao.php';

$itemDao = new MockItemDao();

$itemId = 2;
$item = $itemDao->findById($itemId);
echo 'ID.' . $itemId . 'の商品は' . $item->getName() . 'です。<br />';

$orderDao = new MockOrderDao(new MockItemDao());

$orderId = 3;
$order = $orderDao->findById($orderId);
echo 'ID.' . $orderId . 'の注文は以下のとおりです。<br />';
foreach ($order->getItems() as $item) {
    echo $item['object']->getId() . ' : ' . $item['object']->getName() . '<br />';
}
*/