public static function setConnection(PDO $conn)
 {
     self::$conn = $conn;
 }
    $conn = new PDO('sqlite:database/estoque.db');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    ProdutoGateway::setConnection($conn);
    $produtos = ProdutoGateway::all();
    foreach ($produtos as $produto) {
        $produto->delete();
    }
    $p1 = new ProdutoGateway();
    $p1->descricao = 'Vinho Brasileiro Tinto Merlot';
    $p1->estoque = 10;
    $p1->preco_custo = 12;
    $p1->preco_venda = 18;
    $p1->codigo_barras = '13523253235234';
    $p1->data_cadastro = date('Y-m-d');
    $p1->origem = 'N';
    $p1->save();
    $p2 = new ProdutoGateway();
    $p2->descricao = 'Vinho Importado Tinto Carmenere';
    $p2->estoque = 10;
    $p2->preco_custo = 18;
    $p2->preco_venda = 29;
    $p2->codigo_barras = '13523253235234';
    $p2->data_cadastro = date('Y-m-d');
    $p2->origem = 'I';
    $p2->save();
    $produto = ProdutoGateway::find(1);
    $produto->estoque += 2;
    $produto->save();
} catch (Exception $e) {
    print $e->getMessage();
}
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        // executa consulta SQL
        $result = $conn->query($sql);
        $data = $result->fetch(PDO::FETCH_ASSOC);
        unset($conn);
        return $data;
    }
}
class Produto
{
    public $id;
    public $descricao;
    public $estoque;
    public $preco_custo;
}
// instancia objeto ProdutoGateway
$gateway = new ProdutoGateway();
$vinho = new Produto();
$vinho->id = 4;
$vinho->descricao = 'Vinho';
$vinho->estoque = 10;
$vinho->preco_custo = 15;
// insere o objeto no banco de dados
$gateway->insert($vinho);
// exibe o objeto de código 4
print_r($gateway->getObject(4));
$vinho->descricao = 'Vinho Cabernet';
// atualiza o objeto no banco de dados
$gateway->update($vinho);
// exibe o objeto de código 4
print_r($gateway->getObject(4));
        echo $sql . "<br>\n";
        // instancia objeto PDO
        $conn = new PDO('sqlite:produtos.db');
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        // executa consulta SQL
        $result = $conn->query($sql);
        $this->data = $result->fetch(PDO::FETCH_ASSOC);
        unset($conn);
    }
}
// insere produtos na base de dados
$vinho = new ProdutoGateway();
$vinho->id = 5;
$vinho->descricao = 'Vinho Cabernet';
$vinho->estoque = 10;
$vinho->preco_custo = 10;
$vinho->insert();
$salame = new ProdutoGateway();
$salame->id = 6;
$salame->descricao = 'Salame';
$salame->estoque = 20;
$salame->preco_custo = 20;
$salame->insert();
// recupera um objeto e realiza alteração
$objeto = new ProdutoGateway();
$objeto->getObject(6);
$objeto->estoque = $objeto->estoque * 2;
$objeto->descricao = 'Salaminho Italiano';
$objeto->update();
// exclui o produto vinho da tabela
$vinho->delete();
     * método getObjects
     * lista todos registros da tabela de produtos
     */
    function getObjects()
    {
        // cria instrução SQL de SELECT
        $sql = "SELECT * FROM produtos";
        // instancia objeto PDO
        $conn = new PDO('sqlite:produtos.db');
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        // executa a consulta SQL
        $result = $conn->query($sql);
        $data = $result->fetchAll(PDO::FETCH_ASSOC);
        unset($conn);
        return $data;
    }
}
// instancia objeto ProdutoGateway
$gateway = new ProdutoGateway();
// insere alguns registros na tabela
$gateway->insert(1, 'Vinho', 10, 10);
$gateway->insert(2, 'Salame', 20, 20);
$gateway->insert(3, 'Queijo', 30, 30);
// efetua algumas alterações
$gateway->update(1, 'Vinho', 20, 20);
$gateway->update(2, 'Salame', 40, 40);
// exclui o produto 3
$gateway->delete(3);
// exibe novamente os registros
echo "Lista de Produtos<br>\n";
print_r($gateway->getObjects());
 public function save()
 {
     $gw = new ProdutoGateway();
     return $gw->save((object) $this->data);
 }
$data1->descricao = 'Vinho Brasileiro Tinto Merlot';
$data1->estoque = 10;
$data1->preco_custo = 12;
$data1->preco_venda = 18;
$data1->codigo_barras = '13523253235234';
$data1->data_cadastro = date('Y-m-d');
$data1->origem = 'N';
$data2 = new stdClass();
$data2->descricao = 'Vinho Importado Tinto Carmenere';
$data2->estoque = 10;
$data2->preco_custo = 18;
$data2->preco_venda = 29;
$data2->codigo_barras = '73450345423523';
$data2->data_cadastro = date('Y-m-d');
$data2->origem = 'I';
try {
    $conn = new PDO('sqlite:database/estoque.db');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    ProdutoGateway::setConnection($conn);
    $gw = new ProdutoGateway();
    $gw->save($data1);
    $gw->save($data2);
    $produto = $gw->find(1);
    $produto->estoque += 2;
    $gw->save($produto);
    foreach ($gw->all("estoque<=10") as $produto) {
        print $produto->descricao . "<br>\n";
    }
} catch (Exception $e) {
    print $e->getMessage();
}