{"id":3613,"date":"2016-06-21T08:50:36","date_gmt":"2016-06-21T11:50:36","guid":{"rendered":"https:\/\/www.mxcursos.com\/blog\/?p=3613"},"modified":"2019-03-16T20:27:32","modified_gmt":"2019-03-16T23:27:32","slug":"criando-um-carrinho-de-compras-com-php-parte-2","status":"publish","type":"post","link":"https:\/\/www.mxcursos.com\/blog\/criando-um-carrinho-de-compras-com-php-parte-2\/","title":{"rendered":"Criando um carrinho de compras com PHP \u2013 Parte 2"},"content":{"rendered":"<div class=\"embed-container\"><iframe src=\"\/\/www.youtube.com\/embed\/CAhnGYsOdZg\" frameborder=\"0\" allowfullscreen><\/iframe><\/div>\n<p>Oi pessoal,<\/p>\n<p>Nessa segunda parte\u00a0de <em>Como criar um carrinho de compra utilizando PHP Orientado a Objeto<\/em>, iremos focar no Model, relacionado ao produto, resgatando as informa\u00e7\u00f5es do banco de dados e passando esses registros para View.<\/p>\n<p>O Model \u00e9 uma das camadas do MVC onde \u00e9 especificado a nossa regra de neg\u00f3cio. Ele pode ter\u00a0outras camadas, como persist\u00eancia, que \u00e9 a forma de salvar e resgatar essa informa\u00e7\u00f5es de algum tipo de armazenamento, as entidades, que seria representa\u00e7\u00e3o de uma informa\u00e7\u00e3o, entre outros.<\/p>\n<p>No primeiro momento, criamos nossa entidade <em>Product<\/em>, que representa um produto. \u00a0Nessa entidade,\u00a0fazemos verifica\u00e7\u00f5es de quais valores s\u00e3o v\u00e1lidos. Quando n\u00e3o forem v\u00e1lidos, lan\u00e7amos\u00a0uma exce\u00e7\u00e3o com a classe <a href=\"http:\/\/php.net\/manual\/pt_BR\/class.invalidargumentexception.php\" target=\"_blank\" rel=\"noopener noreferrer\">InvalidArgumentException<\/a>.<\/p>\n<p>Depois definiremos\u00a0o comportamento que queremos para criamos uma interface.<\/p>\n<p>Na\u00a0interface de Objetos, voc\u00ea define quais\u00a0m\u00e9todos voc\u00ea deseja que tenham as classes que implementam,\u00a0definindo como fosse um contrato. Com isso voc\u00ea trabalha com o polimorfismo, onde s\u00f3\u00a0conhece\u00a0uma estrutura, mas n\u00e3o sabe como \u00e9 realizado a implementa\u00e7\u00e3o.<\/p>\n<p>Quando pensamos num contrato, estamos\u00a0tendo um acordo de confian\u00e7a. Sabemos que teremos garantias ao assin\u00e1-lo. E\u00a0quando queremos que isso ocorra, uma das forma \u00e9 utilizar a interface.<\/p>\n<p>No nosso exemplo, definimos que fosse retornado todos os produtos e um produto, mas n\u00e3o \u00e9 relevante a forma que fazemos isso, se \u00e9 usando MySQL, MongoDB, ou arquivo de texto, em mem\u00f3ria&#8230;\u00a0Isso n\u00e3o\u00a0importa mais! O importante que teremos esses m\u00e9todos.<\/p>\n<p>Na\u00a0implementa\u00e7\u00e3o, utilizamos o PDO passando pelo construtor e fazendo a indu\u00e7\u00e3o de tipo, trabalhando assim com a Inje\u00e7\u00e3o de depend\u00eancia, evitando assim o acoplamento da nossa aplica\u00e7\u00e3o.<\/p>\n<p>Vamos ver um exemplo de acoplamento:<\/p>\n<pre class=\"lang:php decode:true\">&lt;?php \r\n\r\nclass ProductPDO{\r\n    private $pdo;\r\n\r\n   public function __construct(){\r\n       $this-&gt;pdo = new \\PDO(\"mysql:host=localhost;dbname=shop\", \"root\", \"\");\r\n   }\r\n}\r\n<\/pre>\n<p>Veja que instanciamos o PDO\u00a0dentro da nossa classe. Se precisamos modificar uma informa\u00e7\u00e3o, precisamos alterar\u00a0a classe, criando assim mais uma responsabilidade al\u00e9m \u00a0dos registros que queremos trabalhar.<\/p>\n<p>Tamb\u00e9m est\u00e1 respons\u00e1vel por inst\u00e2ncia a conex\u00e3o com banco de dados.<\/p>\n<p>Para resolver isso,\u00a0passaremos pelo construtor a instancia do\u00a0PDO:<\/p>\n<pre class=\"lang:php decode:true\">class ProductPDO{\r\n    private $pdo;\r\n\r\n   public function __construct($pdo){\r\n       $this-&gt;pdo = $pdo;\r\n   }\r\n}<\/pre>\n<p>A nossa classe <em>ProductPDO<\/em>, n\u00e3o \u00e9 mais respons\u00e1vel de instanciar o <em>PDO<\/em>, mas temos um outro problema: Como garantir que seja uma instancia do PDO?<\/p>\n<p>Para isso usamos a indu\u00e7\u00e3o de tipo:<\/p>\n<pre class=\"lang:php decode:true \">class ProductPDO{\r\n    private $pdo;\r\n\r\n   public function __construct(\\PDO $pdo){\r\n       $this-&gt;pdo = $pdo;\r\n   }\r\n}<\/pre>\n<p>Agora sim garantimos que ser\u00e1 uma instancia do PDO que ser\u00e1 passada e nossa classe\u00a0n\u00e3o ser\u00e1 mais respons\u00e1vel de\u00a0realizar a conex\u00e3o com banco de dados usando o PDO.<\/p>\n<p>Dessa forma diminu\u00edmos o acoplamento.<\/p>\n<p>Espero que tenham gostado.<\/p>\n<p>Um abra\u00e7o e at\u00e9 a pr\u00f3xima!<\/p>\n<p><strong>Arquivos\u00a0da\u00a0V\u00eddeo Aula<\/strong><\/p>\n<p><a href=\"https:\/\/github.com\/davidchc\/videoula-criando-carrinho-de-comprar-php\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/davidchc\/videoula-criando-carrinho-de-comprar-php<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oi pessoal, Nessa segunda parte\u00a0de Como criar um carrinho de compra utilizando PHP Orientado a Objeto, iremos focar no Model, relacionado ao produto, resgatando as informa\u00e7\u00f5es do banco de dados e passando esses registros para View. O Model \u00e9 uma das camadas do MVC onde \u00e9 especificado a nossa regra de neg\u00f3cio. Ele pode ter\u00a0outras [&hellip;]<\/p>\n","protected":false},"author":67,"featured_media":3611,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"video","meta":{"footnotes":""},"categories":[1178],"tags":[],"class_list":["post-3613","post","type-post","status-publish","format-video","has-post-thumbnail","hentry","category-programacao","post_format-post-format-video"],"_links":{"self":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts\/3613","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=3613"}],"version-history":[{"count":0,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts\/3613\/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=3613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/categories?post=3613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/tags?post=3613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}