public static function setConnection(PDO $conn)
 {
     self::$conn = $conn;
 }
<?php

require_once 'classes/dm/Produto.php';
require_once 'classes/dm/Venda.php';
require_once 'classes/dm/VendaMapper.php';
try {
    $p1 = new Produto();
    $p1->id = 1;
    $p1->preco = 12;
    $p2 = new Produto();
    $p2->id = 2;
    $p2->preco = 14;
    $venda = new Venda();
    $venda->addItem(10, $p1);
    $venda->addItem(20, $p2);
    $conn = new PDO('sqlite:database/estoque.db');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    VendaMapper::setConnection($conn);
    VendaMapper::save($venda);
} catch (Exception $e) {
    print $e->getMessage();
}
 */
final class VendaMapper
{
    function insert(Venda $venda)
    {
        $id = $venda->getID();
        date_default_timezone_set('America/Sao_Paulo');
        $date = date("Y-m-d");
        // insere a venda no banco de dados
        $sql = "INSERT INTO venda (id, data) values ('{$id}', '{$date}')";
        echo $sql . "<br>\n";
        // percorre os itens vendidos
        foreach ($venda->getItens() as $item) {
            $quantidade = $item[0];
            $produto = $item[1];
            $descricao = $produto->getDescricao();
            // insere os itens da venda no banco de dados
            $sql = "INSERT INTO venda_items (ref_venda, produto, quantidade)" . " values ('{$id}', '{$descricao}', '{$quantidade}')";
            echo $sql . "<br>\n";
        }
    }
}
// instancia objeto Venda
$venda = new Venda(1000);
// adiciona alguns produtos
$venda->addItem(3, new Produto('Vinho', 10, 15));
$venda->addItem(2, new Produto('Salame', 20, 20));
$venda->addItem(1, new Produto('Queijo', 30, 10));
// Data Mapper persiste a venda
VendaMapper::insert($venda);