• Nenhum resultado encontrado

Avançando em orientação a objetos

No documento Book_ Desenvolvimento Web Com PHP e MySQL (páginas 106-109)

13.6

 Avançando em orientaç

 Avançando em orientação a objetosão a objetos

Orientação a objetos é muito mais do que o pouco que mostrei neste livro. A ideia Orientação a objetos é muito mais do que o pouco que mostrei neste livro. A ideia aqui foi fazer apenas uma introdução para incentivar o leitor a pesquisar mais sobre aqui foi fazer apenas uma introdução para incentivar o leitor a pesquisar mais sobre o assunto.

o assunto.

Trabalhar com orientação a objetos costuma ser o pesadelo de muitos inician- Trabalhar com orientação a objetos costuma ser o pesadelo de muitos inician- tes em programação, mas depois que se entendem os conceitos de classes, objetos tes em programação, mas depois que se entendem os conceitos de classes, objetos e de comunicação entre os objetos e padrões de desenvolvimento como os famosos e de comunicação entre os objetos e padrões de desenvolvimento como os famosos

design patterns, percebe-se a importância desde tipo de desenvolvimento de código. Os mais avançados em desenvolvimento orientado a objetos podem ter encon-

trado diversos pontos de melhoria no código da classe Tarefas, como o fato de ela ser uma espécie de entidade, um repositório e uma coleção ao mesmo tempo. Mas não fiquem impacientes! Esta foi apenas uma maneira de mostrar como a orientação a objetos pode ser útil na centralização e organização de código. A lista de e-mails desde livro pode e deve ser usada para apresentar implementações diferentes e mais avançadas.

13.7

MVC e Frameworks

Um conceito importante que infelizmente não coube neste livro é o MVC, que é um padrão para desenvolvimento de software que separa a aplicação em basicamente três camadas distintas, sendo que cada uma é responsável por uma função. Neste livro 195

13.7. MVC e Frameworks Casa do Código

não usamos estritamente o MVC, mas os exemplos foram feitos de forma a manter as responsabilidades separadas em cada arquivo. Veja que o arquivo banco.php sempre foi o responsável pelo acesso ao banco, até a classe Tarefas aparecer. Os arquivos tarefas.php, editar.php e remover.php foram os responsáveis por

receber as requisições do navegador e então decidir o que fazer. E também temos alguns arquivos que contêm bastante HTML e servem para montar os templates da aplicação.

No MVC existem três camadas: Model, View e Controller.

 A camada Model é a responsável pelas regras de negócio e, em geral, pelo acesso ao banco de dados ou outras fontes de dados. Podemos meio que fazer uma associ- ação da Model com nosso arquivo banco.php ou com a classe Tarefas.

 A camada Controller é responsável por receber as requisições e decidir o que deve ser feito com elas. Em geral, o controller usa as models para obter e gravar dados, e envia informações para que as views exibam dados para quem solicitou. Já a camada View é responsável por interagir com os usuários exibindo as pági- nas (as views também podem conversar com outros sistemas através de linguagens como XML e JSON).

Existem ferramentas que implementam o MVC e facilitam e uniformizam o tra- balho dos desenvolvedores. Estas ferramentas são os frameworks.

Em geral um framework já vem com diversas diretrizes para desenvolvimento, como onde colocar um controller, como fazer uma view, uniformização de acesso aos diversos bancos de dados, ajudantes para envio de e-mails, validação de formulários, camadas de segurança etc.

Existem diversos frameworks para PHP, cada um com seu foco e seu público. Fica aqui uma lista com alguns frameworks PHP:

• CodeIgniter — leve, rápido e fácil de aprender. Bom para aplicações menores. • Laravel — uma das estrelas do mundo PHP atualmente. Usado para a pro- dução de projetos pequenos e grandes. Sua biblioteca de banco de dados é bastante elogiada.

• CakePHP — um dos mais conhecidos e utilizados de pequenas a grandes apli- cações.

• Zend Framework — framework oficial da Zend, cheio de recursos e um dos preferidos das empresas para grandes aplicações.

196

Casa do Código

Capítulo 13. Programando com orientação a objetos

• Symfony — um dos mais robustos, bastante usado para grandes aplicações. Experimente conhecer dois ou três frameworks. Tente fazer a aplicação das ta- refas em cada um deles e veja como eles tratam o acesso ao banco, como fazem o upload de arquivos etc.

É sempre bom conhecer alguns frameworks para poder escolher na hora de criar uma nova aplicação, além de aprender com os detalhes de cada um.

13.8 Resumo

Neste capítulo foi apresentada uma pequena introdução à programação orientada a objetos. Conseguimos criar uma classe Tarefas que passou a servir de centrali- zadora para os trechos de código responsável por lidar com as tarefas no banco de dados. Também alteramos a utilização do MySQLi para sua forma orientada a obje- tos e centralizamos o acesso ao banco no objeto $mysqli em vez de usar diversas funções.

Orientação a objetos é um tópico bastante extenso e vale a pena entender mais profundamente, pois grande parte dos softwares PHP (e de outras linguagens) a utili- zam para criar sistemas grandes ou pequenos de forma mais organizada e facilitando a manutenção.

Também foi feita uma pequena introdução a conceitos como MVC e fra-

meworks, que também são tópicos que rendem boas horas de estudo e calorosas discussões entre desenvolvedores.

13.9 Desafios

 Agora mais alguns desafios, dessa vez para treinar orientação a objetos. • Transforme as funções

buscar_anexos(), gravar_anexo() e

remover_tarefa() em métodos da classe Tarefas.

• Mova a validação dos formulários de criação e edição de tarefas para dentro da classe Tarefas. Este é mais complexo, pois você deve retornar as mensagens de erro, caso necessário.

• Crie uma classe Contatos e transforme as funções de manipulação do banco de dados em métodos desta classe no projeto dos contatos.

197

13.9. Desafios Casa do Código

• No projeto do estacionamento crie uma classe Veiculos que será responsá- vel por manipular os dados dos veículos no banco de dados.

• Escolha um dos frameworks listados e tente recriar a aplicação das tarefas nele. Uma dica é fazer a aplicação de exemplo que em geral existe no manual de casa framework . Quase sempre esta aplicação de exemplo é um blog, o que envolve diversos recursos.

198

Capítulo 14 Proteção e ajustes

Este é um capítulo bônus que não poderia ficar de fora deste livro.

Existem diversas formas de ataques a sites e aplicações web e, quando colocamos nosso código online, corremos o risco de receber algum tipo de ataque para quebrar a segurança de nossas aplicações e roubar informações — ou mesmo para transformar nossas aplicações em robôs que enviam spam ou outros tipos de ameaças virtuais. Um dos tipos mais comuns de ataque é a SQL Injection, com a qual o atacante consegue burlar o acesso ao banco de dados da aplicação e, em geral, consegue apagar todos os dados.

Nossa aplicação das tarefas está vulnerável a este tipo de ataque, pois um usuário poderia digitar um pouco de SQL em alguns de campos. Experimente cadastrar uma tarefa chamada Assistir 'Star Wars' e você verá que ela não será cadastrada.

Isso acontece pois montamos o código SQL usando o apóstrofo para delimitar nossos campos de texto e, quando colocamos mais um apóstrofo no nome da tarefa, o código SQL é gerado incorretamente. Isso é ruim, certo?

14.1. Protegendo-se contra SQL Injection Casa do Código

14.1

Protegendo-se contra SQL Injection

Para proteger nossa aplicação precisamos escapar os caracteres que podem ser usa- dos para compor código SQL, como é o caso de aspas e apóstrofos.

Para escapar esses caracteres, devemos usar a função mysqli_real_escape_string() ou o método escape_string() da classe mysqli.

classes/Tarefas.php: <?php

class Tarefas {

...

public function gravar_tarefa($tarefa) {

$nome = $this->mysqli->escape_string($tarefa['nome']); $descricao = $this->mysqli->escape_string($tarefa['descricao']); $prazo = $this->mysqli->escape_string($tarefa['prazo']); $sqlGravar = "

INSERT INTO tarefas

(nome, descricao, prioridade, prazo, concluida)  VALUES ( '{$nome}', '{$descricao}', {$tarefa['prioridade']}, '{$prazo}', {$tarefa['concluida']} ) "; $this->mysqli->query($sqlGravar); } ...

Perceba que os dados que contêm textos foram colocados em variáveis que são 200

Casa do Código

Capítulo 14. Proteção e ajustes

os retornos do método $mysql->escape_string(). Escapar um texto é algo mais ou menos assim:

O texto era isso Assistir 'Star Wars' e virou isso Assistir \'Star

Wars\'. Dessa forma, o MySQL trata o apóstrofo como um apóstrofo mesmo e não como um delimitador de campos de texto.

No documento Book_ Desenvolvimento Web Com PHP e MySQL (páginas 106-109)

Documentos relacionados