63
5 de Novembro PHP'n Rio 2011 1 Alexandre Gomes Gaigalas http://about.me/alganet

PHP Maroto

Embed Size (px)

DESCRIPTION

PHP é uma linguagem multi-paradigma. Muitas pessoas esquecem disso e acabam desenvolvendo nela como se ela fosse puramente orientada a objetos. Aprenda a utilizar os vários paradigmas que o PHP suporta e como uma combinação de orientação a objetos, programação funcional e imperativa podem transformar as peculiaridades da linguagem em poderosas ferramentas sem cometer nenhum assassinato a boas práticas.

Citation preview

Page 1: PHP Maroto

5 de Novembro PHP'n Rio 2011 1

Alexandre Gomes Gaigalas

http://about.me/alganet

Page 2: PHP Maroto

5 de Novembro PHP'n Rio 2011 2

Hoje você vai ver...

● Como são alguns dos paradigmas de programação.

● PHP funcionando em múltiplos paradigmas.

● Recursos MUITO FODA da linguagem.

Page 3: PHP Maroto

5 de Novembro PHP'n Rio 2011 3

PHP Maroto

Page 4: PHP Maroto

5 de Novembro PHP'n Rio 2011 4

PHP Imperativo, Procedural

Page 5: PHP Maroto

5 de Novembro PHP'n Rio 2011 5

PHP Imperativo, Procedural

Ordens para ointerpretador

Page 6: PHP Maroto

5 de Novembro PHP'n Rio 2011 6

PHP Imperativo, Procedural

Ordens para ointerpretador

Reuso de subrotinas

Page 7: PHP Maroto

5 de Novembro PHP'n Rio 2011 7

PHP Orientado a Objetos

Page 8: PHP Maroto

5 de Novembro PHP'n Rio 2011 8

PHP Orientado a Objetos

Agrupamento de responsabilidades

Page 9: PHP Maroto

5 de Novembro PHP'n Rio 2011 9

PHP Reflexivo

Page 10: PHP Maroto

5 de Novembro PHP'n Rio 2011 10

PHP Reflexivo

Sabe sobre si mesmo

em tempo de execução

Page 11: PHP Maroto

5 de Novembro PHP'n Rio 2011 11

PHP Reflexivo

Sabe sobre si mesmo

em tempo de execução

É daqui que vem a mágica do PHP!

Page 12: PHP Maroto

5 de Novembro PHP'n Rio 2011 12

PHP Funcional

Page 13: PHP Maroto

5 de Novembro PHP'n Rio 2011 13

PHP Funcional

Funções como recurso

de primeira-classe

Page 14: PHP Maroto

5 de Novembro PHP'n Rio 2011 14

PHP Funcional

Funções como recurso

de primeira-classe

Closures!

Page 15: PHP Maroto

5 de Novembro PHP'n Rio 2011 15

PHP Multi-Paradigma

Page 16: PHP Maroto

5 de Novembro PHP'n Rio 2011 16

PHP Multi-Paradigma

Pelo menos 4 paradigmas!

Page 17: PHP Maroto

5 de Novembro PHP'n Rio 2011 17

PHP Multi-Paradigma

Pelo menos 4 paradigmas!

Por que só focar em OOP? :(

Page 18: PHP Maroto

5 de Novembro PHP'n Rio 2011 18

Assembly(apenas pra curiosidade da galera)

Page 19: PHP Maroto

5 de Novembro PHP'n Rio 2011 19

A maioria dos programadores nunca viu Assembly code na vida.

Page 20: PHP Maroto

5 de Novembro PHP'n Rio 2011 20

A maioria dos programadores nunca viu Assembly code na vida.

Por mais que insistam que tenham visto, não acredite!

Page 21: PHP Maroto

5 de Novembro PHP'n Rio 2011 21

Assembly(apenas pra curiosidade da galera)

● Assembler == Montador● Assembly == Montagem● Vários Assemblers!

● AS86● MASM● GAS● etc

● Depende da arquitetura do processador

Page 22: PHP Maroto

5 de Novembro PHP'n Rio 2011 22

Procedural / Imperativo

● Chamadas de sub-rotinas

● Estruturas de controle

● Variáveis com estado

Page 23: PHP Maroto

5 de Novembro PHP'n Rio 2011 23

Procedural / Imperativo

● Chamadas de sub-rotinas

● Estruturas de controle

● Variáveis com estado

mysql_connect(), mysql_last_insert_id(), etc.

If, else, for, while, switch, foreach, et..

$oi = “Tudo bem”;

Page 24: PHP Maroto

5 de Novembro PHP'n Rio 2011 24

Procedural / Imperativo

Page 25: PHP Maroto

5 de Novembro PHP'n Rio 2011 25

Procedural / Imperativo / OO

Page 26: PHP Maroto

5 de Novembro PHP'n Rio 2011 26

OOP não substitui outros paradigmas.

Page 27: PHP Maroto

5 de Novembro PHP'n Rio 2011 27

OOP complementa outros paradigmas.

Page 28: PHP Maroto

5 de Novembro PHP'n Rio 2011 28

Smalltalk?

Page 29: PHP Maroto

5 de Novembro PHP'n Rio 2011 29

Smalltalk?

O resultado da comparaçãoé um objeto booleano

Page 30: PHP Maroto

5 de Novembro PHP'n Rio 2011 30

Smalltalk?

O resultado da comparaçãoé um objeto booleano

IfTrue e ifFalse são métodos

Page 31: PHP Maroto

5 de Novembro PHP'n Rio 2011 31

Smalltalk?

O resultado da comparaçãoé um objeto booleano

Mas a condiçãoainda é imperativa!

IfTrue e ifFalse são métodos

Page 32: PHP Maroto

5 de Novembro PHP'n Rio 2011 32

OOP pura é impraticável.

Page 33: PHP Maroto

5 de Novembro PHP'n Rio 2011 33

OOP pura é impraticável.(e não existe definição formal de “oop pura”)

Page 34: PHP Maroto

5 de Novembro PHP'n Rio 2011 34

Orientação a Objetos

● Agrupamento de sub-rotinas

● Organização de responsabilidades

● Abstração

PDO->query(), PDO->lastInsertId()

PDO, DateTime, SimpleXML

Zend\Db\Adapter\Pdo\MySql extends ...

Page 35: PHP Maroto

5 de Novembro PHP'n Rio 2011 35

Reflexão

Função nativa

Page 36: PHP Maroto

5 de Novembro PHP'n Rio 2011 36

Reflexão

Função do usuário

Chamada em tempo de execuçãopara qualquer função

Page 37: PHP Maroto

5 de Novembro PHP'n Rio 2011 37

Reflexão

Page 38: PHP Maroto

5 de Novembro PHP'n Rio 2011 38

Reflexão

Page 39: PHP Maroto

5 de Novembro PHP'n Rio 2011 39

Reflexão

● ReflectionClass● ReflectionMethod● ReflectionParameter● ReflectionFunction● ReflectionProperty

http://php.net/reflection (tem mais aqui!)

Page 40: PHP Maroto

5 de Novembro PHP'n Rio 2011 40

Reflexão – Quem, como?

● Doctrine ORM● Conhecer as entidades e criar os proxies● Tornar atributos privados acessíveis

● Zend DI● Saber quais as dependências entre as classes

● Zend Server Reflection● Mapear métodos para serviços

● Muita Gente =)● Chamadas dinâmicas para construtores

Page 41: PHP Maroto

5 de Novembro PHP'n Rio 2011 41

Um mundo sem mágica =/

Page 42: PHP Maroto

5 de Novembro PHP'n Rio 2011 42

Mágica!

Page 43: PHP Maroto

5 de Novembro PHP'n Rio 2011 43

MongoDB sem mágica

Page 44: PHP Maroto

5 de Novembro PHP'n Rio 2011 44

MongoDB com mágica =D

Page 45: PHP Maroto

5 de Novembro PHP'n Rio 2011 45

Mágica no PHP

● __get - Obter propriedades● __set - Definir propriedades● __isset - Checar existência de propriedades● __unset - Remover propriedades● __call - Chamar métodos● __callStatic - Chamar métodos estáticos● __invoke - Chamar a classe como uma função● __toString - Converter a classe para string

http://php.net/oop5.magic (tem mais aqui!)

Page 46: PHP Maroto

5 de Novembro PHP'n Rio 2011 46

Mágica no PHP

● O problema não está na mágica, está no que você coloca dentro dela.

● Forneça sempre uma versão não-mágica.

● Documente sua mágica.

Page 47: PHP Maroto

5 de Novembro PHP'n Rio 2011 47

Funcional

Page 48: PHP Maroto

5 de Novembro PHP'n Rio 2011 48

Funcional

Page 49: PHP Maroto

5 de Novembro PHP'n Rio 2011 49

Funcional

Page 50: PHP Maroto

5 de Novembro PHP'n Rio 2011 50

Funcional

Page 51: PHP Maroto

5 de Novembro PHP'n Rio 2011 51

Funcional

Page 52: PHP Maroto

5 de Novembro PHP'n Rio 2011 52

Funcional

Page 53: PHP Maroto

5 de Novembro PHP'n Rio 2011 53

Funcional

Page 54: PHP Maroto

5 de Novembro PHP'n Rio 2011 54

Funcional

Page 55: PHP Maroto

5 de Novembro PHP'n Rio 2011 55

Imperativo

Page 56: PHP Maroto

5 de Novembro PHP'n Rio 2011 56

OOP(só estrutura!)

Page 57: PHP Maroto

5 de Novembro PHP'n Rio 2011 57

Bônus!

Page 58: PHP Maroto

5 de Novembro PHP'n Rio 2011 58

Bônus!

Page 59: PHP Maroto

5 de Novembro PHP'n Rio 2011 59

Bônus!

Page 60: PHP Maroto

5 de Novembro PHP'n Rio 2011 60

PHP: The Good Parts(na humilde opinião de @alganet)

● Arrays http://php.net/book.array● Streams http://php.net/streams

● http, sockets, arquivos, buffers

● Batteries Included● PDO, SimpleXML, json_*, SOAPClient/Server, MongoDB, mail()● Simples de criar extensões

● Excelente retrocompatibilidade● O menor Hello World do mundo● A melhor documentação online● Excelente comunidade no mundo inteiro

Page 61: PHP Maroto

5 de Novembro PHP'n Rio 2011 61

Hoje você viu...

● Como são alguns dos paradigmas de programação.

● PHP funcionando em múltiplos paradigmas.

● Recursos MUITO FODA da linguagem.

Page 62: PHP Maroto

5 de Novembro PHP'n Rio 2011 62

Perguntas?

Page 63: PHP Maroto

5 de Novembro PHP'n Rio 2011 63

Obrigado!