{"id":3621,"date":"2016-07-05T14:50:03","date_gmt":"2016-07-05T17:50:03","guid":{"rendered":"https:\/\/www.mxcursos.com\/blog\/?p=3621"},"modified":"2019-03-16T20:27:45","modified_gmt":"2019-03-16T23:27:45","slug":"criando-um-carrinho-de-compras-com-php-parte-3","status":"publish","type":"post","link":"https:\/\/www.mxcursos.com\/blog\/criando-um-carrinho-de-compras-com-php-parte-3\/","title":{"rendered":"Criando um carrinho de compras com PHP \u2013 Parte 3"},"content":{"rendered":"<div class=\"embed-container\"><iframe src=\"\/\/www.youtube.com\/embed\/JGJroZ1Z3ek\" frameborder=\"0\" allowfullscreen><\/iframe><\/div>\n<p>Ol\u00e1 pessoal,<\/p>\n<p>Essa \u00e9 a terceira parte do artigo\/v\u00eddeo aula que ensino como criar um carrinho de compra utilizando PHP Orientado a Objeto e\u00a0nesta aula, criaremos realmente a parte do carrinho de compras.<\/p>\n<p>Ao pensarmos em um\u00a0carrinho de compras no mundo real, imaginamos\u00a0um carrinho mesmo, o qual voc\u00ea possa\u00a0colocar v\u00e1rios produtos iguais ou diversificados.<\/p>\n<p>Ao desenvolvermos, precisamos armazenar esses itens para que possamos navegar entre as p\u00e1ginas para realizar novas compras. Dessa forma\u00a0podemos trabalhar com <em>Session, Cookie, Banco de Dados, etc<\/em>. Ent\u00e3o precisamos definir\u00a0um comportamento do nosso carrinho.<\/p>\n<p>No nosso carrinho teremos que ter a possibilidade de adicionar produto, editar a quantidade, excluir, retornar todos os produtos e o valor total da compra.<\/p>\n<pre class=\"lang:php decode:true\">&lt;?php \r\n\r\nnamespace App\\Model\\Shopping;\r\n\r\ninterface Cart{\r\n    public function add(CartItem $item);\r\n    public function update(CartItem $item);\r\n    public function delete($id);\r\n    public function has($id);\r\n    public function getTotal();\r\n    public function getCartItems();\r\n }<\/pre>\n<p>Veja que temos um participante, que \u00e9 o <em>CartItem<\/em>. J\u00e1 sabemos que estamos realizando uma indu\u00e7\u00e3o de tipo garantido que receba um objeto que seja da classe <em>CartItem<\/em>.<\/p>\n<p>Esse <em>CartItem ser\u00e1\u00a0<\/em>respons\u00e1vel por\u00a0receber o produto e quantidade. Com isso, o carrinho de compra s\u00f3 fica respons\u00e1vel\u00a0pelas a\u00e7\u00f5es que informamos anteriormente e tira a responsabilidade de gerenciar a quantidade de um produto.<\/p>\n<p>Com nossa interface definida e nosso\u00a0<em>CartItem<\/em> definido, basta implementar. Na v\u00eddeo aula, utilizei\u00a0a <em>SESSION<\/em>, mas poderia utilizar o banco de dados, implementando\u00a0nossa interface, que\u00a0ter\u00edamos os comportamentos que definimos.<\/p>\n<p>A l\u00f3gica aplicada \u00e9 adicionar as informa\u00e7\u00f5es num atributo chamado itens, e depois salvar as informa\u00e7\u00f5es numa <em>SESSION<\/em>.<\/p>\n<p>Em nosso exemplo, salvamos quando foi encerrado o objeto e salvamos\u00a0o valor serializado na <em>SESSION<\/em>.<\/p>\n<p>Mas por que serializar os itens do carrinho da <em>SESSION<\/em>\u00a0ao inv\u00e9s de\u00a0adicionar normalmente como fosse num array?<\/p>\n<p>Acontece que ap\u00f3s terminar a requisi\u00e7\u00e3o da sua p\u00e1gina, as vari\u00e1veis s\u00e3o serializadas e quando voc\u00ea inicia a sess\u00e3o, como session_start, ele vai recuperar as informa\u00e7\u00f5es, deserializar e se tiver um objeto ele vai recuperar. Se\u00a0este objeto n\u00e3o foi inclu\u00eddo, ele vai retornar um <em><code>__PHP_Incomplete_Class.<\/code><\/em><\/p>\n<p>Como utilizamos autoload, mas inclu\u00edmos s\u00f3 depois de iniciar <em>session_start<\/em>,\u00a0teremos\u00a0esse problema. Temos duas solu\u00e7\u00f5es\u00a0para resolver isso:\u00a0ou iniciamos a <em>session_start<\/em> depois do autoload,\u00a0ou serializamos o objeto\u00a0antes de adicionar a sess\u00e3o e\u00a0depois basta recuper\u00e1-la, mas\u00a0o autoload j\u00e1 estaria j\u00e1 carregado.<\/p>\n<p>Passamos para nossos controller o que desejamos trabalhar com inje\u00e7\u00e3o de\u00a0depend\u00eancia passando s\u00f3 a interface, que no caso seria Cart. Dessa forma poder\u00edamos ter uma implementa\u00e7\u00e3o como <em>CartDb<\/em>, que continuaria a trabalhar, pois\u00a0estaria implementado a interface Cart.<\/p>\n<pre class=\"lang:php decode:true \">&lt;?php \r\n\r\nclass CartSession implements Cart{\r\n\r\n}\r\n\r\nclass CartCookie implements Cart{\r\n\r\n}\r\n\r\nclass CartDb implements Cart{\r\n\r\n}<\/pre>\n<p>Bom, \u00e9 isso!<\/p>\n<p>Espero que tenham gostado desse conte\u00fado.<\/p>\n<p>Um abra\u00e7o e at\u00e9 a pr\u00f3xima.<\/p>\n<p>&nbsp;<\/p>\n<p>F<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 pessoal, Essa \u00e9 a terceira parte do artigo\/v\u00eddeo aula que ensino como criar um carrinho de compra utilizando PHP Orientado a Objeto e\u00a0nesta aula, criaremos realmente a parte do carrinho de compras. Ao pensarmos em um\u00a0carrinho de compras no mundo real, imaginamos\u00a0um carrinho mesmo, o qual voc\u00ea possa\u00a0colocar v\u00e1rios produtos iguais ou diversificados. Ao [&hellip;]<\/p>\n","protected":false},"author":67,"featured_media":3611,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"video","meta":{"footnotes":""},"categories":[704],"tags":[],"class_list":["post-3621","post","type-post","status-publish","format-video","has-post-thumbnail","hentry","category-produtividade","post_format-post-format-video"],"_links":{"self":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts\/3621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/users\/67"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/comments?post=3621"}],"version-history":[{"count":0,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts\/3621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/media\/3611"}],"wp:attachment":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/media?parent=3621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/categories?post=3621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/tags?post=3621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}