PHP Maroto

Preview:

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

5 de Novembro PHP'n Rio 2011 1

Alexandre Gomes Gaigalas

http://about.me/alganet

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.

5 de Novembro PHP'n Rio 2011 3

PHP Maroto

5 de Novembro PHP'n Rio 2011 4

PHP Imperativo, Procedural

5 de Novembro PHP'n Rio 2011 5

PHP Imperativo, Procedural

Ordens para ointerpretador

5 de Novembro PHP'n Rio 2011 6

PHP Imperativo, Procedural

Ordens para ointerpretador

Reuso de subrotinas

5 de Novembro PHP'n Rio 2011 7

PHP Orientado a Objetos

5 de Novembro PHP'n Rio 2011 8

PHP Orientado a Objetos

Agrupamento de responsabilidades

5 de Novembro PHP'n Rio 2011 9

PHP Reflexivo

5 de Novembro PHP'n Rio 2011 10

PHP Reflexivo

Sabe sobre si mesmo

em tempo de execução

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!

5 de Novembro PHP'n Rio 2011 12

PHP Funcional

5 de Novembro PHP'n Rio 2011 13

PHP Funcional

Funções como recurso

de primeira-classe

5 de Novembro PHP'n Rio 2011 14

PHP Funcional

Funções como recurso

de primeira-classe

Closures!

5 de Novembro PHP'n Rio 2011 15

PHP Multi-Paradigma

5 de Novembro PHP'n Rio 2011 16

PHP Multi-Paradigma

Pelo menos 4 paradigmas!

5 de Novembro PHP'n Rio 2011 17

PHP Multi-Paradigma

Pelo menos 4 paradigmas!

Por que só focar em OOP? :(

5 de Novembro PHP'n Rio 2011 18

Assembly(apenas pra curiosidade da galera)

5 de Novembro PHP'n Rio 2011 19

A maioria dos programadores nunca viu Assembly code na vida.

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!

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

5 de Novembro PHP'n Rio 2011 22

Procedural / Imperativo

● Chamadas de sub-rotinas

● Estruturas de controle

● Variáveis com estado

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”;

5 de Novembro PHP'n Rio 2011 24

Procedural / Imperativo

5 de Novembro PHP'n Rio 2011 25

Procedural / Imperativo / OO

5 de Novembro PHP'n Rio 2011 26

OOP não substitui outros paradigmas.

5 de Novembro PHP'n Rio 2011 27

OOP complementa outros paradigmas.

5 de Novembro PHP'n Rio 2011 28

Smalltalk?

5 de Novembro PHP'n Rio 2011 29

Smalltalk?

O resultado da comparaçãoé um objeto booleano

5 de Novembro PHP'n Rio 2011 30

Smalltalk?

O resultado da comparaçãoé um objeto booleano

IfTrue e ifFalse são métodos

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

5 de Novembro PHP'n Rio 2011 32

OOP pura é impraticável.

5 de Novembro PHP'n Rio 2011 33

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

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 ...

5 de Novembro PHP'n Rio 2011 35

Reflexão

Função nativa

5 de Novembro PHP'n Rio 2011 36

Reflexão

Função do usuário

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

5 de Novembro PHP'n Rio 2011 37

Reflexão

5 de Novembro PHP'n Rio 2011 38

Reflexão

5 de Novembro PHP'n Rio 2011 39

Reflexão

● ReflectionClass● ReflectionMethod● ReflectionParameter● ReflectionFunction● ReflectionProperty

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

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

5 de Novembro PHP'n Rio 2011 41

Um mundo sem mágica =/

5 de Novembro PHP'n Rio 2011 42

Mágica!

5 de Novembro PHP'n Rio 2011 43

MongoDB sem mágica

5 de Novembro PHP'n Rio 2011 44

MongoDB com mágica =D

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!)

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.

5 de Novembro PHP'n Rio 2011 47

Funcional

5 de Novembro PHP'n Rio 2011 48

Funcional

5 de Novembro PHP'n Rio 2011 49

Funcional

5 de Novembro PHP'n Rio 2011 50

Funcional

5 de Novembro PHP'n Rio 2011 51

Funcional

5 de Novembro PHP'n Rio 2011 52

Funcional

5 de Novembro PHP'n Rio 2011 53

Funcional

5 de Novembro PHP'n Rio 2011 54

Funcional

5 de Novembro PHP'n Rio 2011 55

Imperativo

5 de Novembro PHP'n Rio 2011 56

OOP(só estrutura!)

5 de Novembro PHP'n Rio 2011 57

Bônus!

5 de Novembro PHP'n Rio 2011 58

Bônus!

5 de Novembro PHP'n Rio 2011 59

Bônus!

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

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.

5 de Novembro PHP'n Rio 2011 62

Perguntas?

5 de Novembro PHP'n Rio 2011 63

Obrigado!