67
Despertando para o PHP Rafael Dohms Friday, January 29, 2010

Despertando para o PHP

Embed Size (px)

DESCRIPTION

Um a breve introdução ao mundo PHP, sintaxe, mercado e ecossistema

Citation preview

Page 1: Despertando para o PHP

Despertando para o PHP

Rafael DohmsFriday, January 29, 2010

Page 2: Despertando para o PHP

PHPabbr PHP [ˌpiː eitʃ ˈpiː]Abreviatura de PHP HyperText Preprocessor; 1. Linguagem Server-Side focada em criação de sistemas para a web; 2. Criada por Rasmus Ledorf em 94 e apoiada pelos fundadores da Zend; 3. Sintaxe simples com influências fortes de C, Perl e Java; 4. Linguagem dominante na internet moderna utilizada em mais de 21M domínios; 5. Terceira colocada do Ranking TIOBE; 6. Fácil de aprender, díficil de dominar.

Friday, January 29, 2010

Page 3: Despertando para o PHP

PHPabbr PHP [ˌpiː eitʃ ˈpiː]Abreviatura de PHP HyperText Preprocessor;

1. Linguagem Server-Side focada em criação de sistemas para a web; 2. Criada por Rasmus Ledorf em 94 e apoiada pelos fundadores da Zend; 3. Sintaxe simples com influências fortes de C, Perl e Java; 4. Linguagem dominante na internet moderna utilizada em mais de 21M domínios; 5. Terceira colocada do Ranking TIOBE; 6. Fácil de aprender, díficil de dominar.

Friday, January 29, 2010

Page 4: Despertando para o PHP

Quem é Rafael Dohms?

Rafael Dohms é graduado Engenheiro da Computação pelo UniCEUB, com MBA em Projetos pela FGV. Tem 9 anos de experiência no mercado PHP e atualmente ocupa o cargo de Desenvolvedor Sênior e Especialista em PHP na empresa sul-africana SWAT/MIH. É certificado ZCE PHP5.

Grande agitador da comunidade PHP é co-fundador do PHPDF e atual coordenador do PHPSP. Contribui ativamente na área de testes do PHP e é Host do PHPSPCast, o primeiro podcast sobre PHP do Brazil.

Friday, January 29, 2010

Page 5: Despertando para o PHP

Arquitetura de um acesso

Friday, January 29, 2010

Page 6: Despertando para o PHP

Arquitetura de um acesso

Friday, January 29, 2010

Page 7: Despertando para o PHP

http://www.php.net

Arquitetura de um acesso

Friday, January 29, 2010

Page 8: Despertando para o PHP

http://www.php.net

Arquitetura de um acesso

Friday, January 29, 2010

Page 9: Despertando para o PHP

http://www.php.net

Arquitetura de um acesso

Friday, January 29, 2010

Page 10: Despertando para o PHP

http://www.php.net

Servidor HTTP

Arquitetura de um acesso

Friday, January 29, 2010

Page 11: Despertando para o PHP

http://www.php.net

Servidor HTTPHTML

Arquitetura de um acesso

Friday, January 29, 2010

Page 12: Despertando para o PHP

http://www.php.net

Servidor HTTP

C:\

HTML

HTML

Arquitetura de um acesso

Friday, January 29, 2010

Page 13: Despertando para o PHP

Quem usa PHP?

Friday, January 29, 2010

Page 14: Despertando para o PHP

A escolhaPor que PHP?

Friday, January 29, 2010

Page 15: Despertando para o PHP

Cliente/Gerente

• Custo baixo

• Praticamente todo ecossistema PHP é gratuito

• Mão-de-obra

• Programadores iniciantes e intermediários não faltam

• Performance e Escalabilidade

• Testado e provado

Friday, January 29, 2010

Page 16: Despertando para o PHP

Desenvolvedor

• Baixa curva de Aprendizado

• Sintaxe simples, material amplo

• Oportunidades

• O mercado tem abundância de vagas

• Robusta

• Flexível e mutante, pode fazer tudo que você imaginar

Friday, January 29, 2010

Page 17: Despertando para o PHP

PHP Fácil e Simples

WAMP - www.wampserver.com

XAMPP - www.apachefriends.org

XAMPP - www.apachefriends.org

XAMPP - www.apachefriends.orgMAMP -www.mamp.info

Zend Server CE -http://www.zend.com/

Zend Server CE -http://www.zend.com/

Zend Server CE -http://www.zend.com/Friday, January 29, 2010

Page 18: Despertando para o PHP

Codando PHP• IDE’s

• Zend Studio (Eclipse)

• PDT (Eclipse)

• Aptana (Eclipse)

• Komodo

• NetBeans

• Text Editors

• TextMate (PHP Bundle)

• VIM

• EMACS

Vantagens de uma IDE

- Autocomplete- Integração com VCS- Debugging e profiling integrado- Ferramentas em geral

Friday, January 29, 2010

Page 19: Despertando para o PHP

Rodando PHP

• Web

• http://seusite.com/index.php

• Linha de comando

• php arquivo.php

Friday, January 29, 2010

Page 20: Despertando para o PHP

Show me the code!

Friday, January 29, 2010

Page 21: Despertando para o PHP

Sintaxe básica<?php

$string = "Hello World! \n";

echo $string;

# Substituir World por Campus Party$string = str_replace("World", "Campus Party", $string);

echo $string;

// Adicionar um "Como vai?"$string = $string . "Como vai? \n";

echo $string;

?>

Hello World! Hello Campus Party! Hello Campus Party! Como vai?

Friday, January 29, 2010

Page 22: Despertando para o PHP

Sintaxe básica<?php

$string = "Hello World! \n";

echo $string;

# Substituir World por Campus Party$string = str_replace("World", "Campus Party", $string);

echo $string;

// Adicionar um "Como vai?"$string = $string . "Como vai? \n";

echo $string;

?>

Hello World! Hello Campus Party! Hello Campus Party! Como vai?

Friday, January 29, 2010

Page 23: Despertando para o PHP

Sintaxe básica<?php

$string = "Hello World! \n";

echo $string;

# Substituir World por Campus Party$string = str_replace("World", "Campus Party", $string);

echo $string;

// Adicionar um "Como vai?"$string = $string . "Como vai? \n";

echo $string;

?>

Hello World! Hello Campus Party! Hello Campus Party! Como vai?

Friday, January 29, 2010

Page 24: Despertando para o PHP

Sintaxe básica<?php

$string = "Hello World! \n";

echo $string;

# Substituir World por Campus Party$string = str_replace("World", "Campus Party", $string);

echo $string;

// Adicionar um "Como vai?"$string = $string . "Como vai? \n";

echo $string;

?>

Hello World! Hello Campus Party! Hello Campus Party! Como vai?

Friday, January 29, 2010

Page 25: Despertando para o PHP

Sintaxe básica<?php

$string = "Hello World! \n";

echo $string;

# Substituir World por Campus Party$string = str_replace("World", "Campus Party", $string);

echo $string;

// Adicionar um "Como vai?"$string = $string . "Como vai? \n";

echo $string;

?>

Hello World! Hello Campus Party! Hello Campus Party! Como vai?

Friday, January 29, 2010

Page 26: Despertando para o PHP

Sintaxe básica<?php

$string = "Hello World! \n";

echo $string;

# Substituir World por Campus Party$string = str_replace("World", "Campus Party", $string);

echo $string;

// Adicionar um "Como vai?"$string = $string . "Como vai? \n";

echo $string;

?>

Hello World! Hello Campus Party! Hello Campus Party! Como vai?

Friday, January 29, 2010

Page 27: Despertando para o PHP

Sintaxe básica<?php

$string = "Hello World! \n";

echo $string;

# Substituir World por Campus Party$string = str_replace("World", "Campus Party", $string);

echo $string;

// Adicionar um "Como vai?"$string = $string . "Como vai? \n";

echo $string;

?>

Hello World! Hello Campus Party! Hello Campus Party! Como vai?

Friday, January 29, 2010

Page 28: Despertando para o PHP

Sintaxe básica<?php

$string = "Hello World! \n";

echo $string;

# Substituir World por Campus Party$string = str_replace("World", "Campus Party", $string);

echo $string;

// Adicionar um "Como vai?"$string = $string . "Como vai? \n";

echo $string;

?>

Hello World! Hello Campus Party! Hello Campus Party! Como vai?

Friday, January 29, 2010

Page 29: Despertando para o PHP

Tipagem fraca

<?php

$a = "2";echo '$a => ' . $a . '/' . gettype($a) . PHP_EOL;

$a = "2" + 1;echo '$a => ' . $a . '/' . gettype($a) . PHP_EOL;

$a = 1;echo '$a => ' . $a . '/' . gettype($a) . PHP_EOL;

$a = 1 . "2";echo '$a => ' . $a . '/' . gettype($a) . PHP_EOL;

?>

$a => 2/string

$a => 3/integer

$a => 1/integer

$a => 12/string

Friday, January 29, 2010

Page 30: Despertando para o PHP

Tipagem fraca

<?php

$a = "2";echo '$a => ' . $a . '/' . gettype($a) . PHP_EOL;

$a = "2" + 1;echo '$a => ' . $a . '/' . gettype($a) . PHP_EOL;

$a = 1;echo '$a => ' . $a . '/' . gettype($a) . PHP_EOL;

$a = 1 . "2";echo '$a => ' . $a . '/' . gettype($a) . PHP_EOL;

?>

$a => 2/string

$a => 3/integer

$a => 1/integer

$a => 12/string

Tipos do PHP:

BooleanIntegerFloat (ou double)StringArrayObjectResourceNULL

Friday, January 29, 2010

Page 31: Despertando para o PHP

Tipos: Array e Hashes<?php// Um array$a = array('a', 'b', 'c');print_r($a);

//Um Hash$b = array('a' => 'b', 'c' => 'd');print_r($b);

// Acessando dadosecho $a[0] . PHP_EOL;echo $b['c'] . PHP_EOL;

//Funçõesrsort($a);print_r($a);

echo array_shift($a) . PHP_EOL;print_r($a);

Array( [0] => a [1] => b [2] => c)Array( [a] => b [c] => d)

ad

Array( [0] => c [1] => b [2] => a)

c

Array( [0] => b [1] => a)

Friday, January 29, 2010

Page 32: Despertando para o PHP

<?php

$a = true;$b = false;

if ($a){ echo "A" . PHP_EOL;}

if ($b){ echo "B" . PHP_EOL;}else{ echo "B?" . PHP_EOL;}

if ($a || $b){ echo "A || B"; }if ($a && $b){ echo "A && B"; }

Condicionais: If

Friday, January 29, 2010

Page 33: Despertando para o PHP

<?php

$a = true;$b = false;

if ($a){ echo "A" . PHP_EOL;}

if ($b){ echo "B" . PHP_EOL;}else{ echo "B?" . PHP_EOL;}

if ($a || $b){ echo "A || B"; }if ($a && $b){ echo "A && B"; }

Condicionais: If

O que é falso no PHP:

FALSE0 (zero) (integer)0.0 (zero) (float)“0” (zero) (string)String vazia (“”)Array VazioNULL

Friday, January 29, 2010

Page 34: Despertando para o PHP

<?php

$a = "joao";

switch($a){ case 'jose': echo "jose?" . PHP_EOL; break; case 0: echo "zero?" . PHP_EOL; break; case true: echo "verdadeiro?" . PHP_EOL; break; case 'joao': echo "joao!" . PHP_EOL; default: echo "qualquer um?!" . PHP_EOL;}

Condicionais: SwitchCuidados com Tipagem Fraca

“string” => integer == 0

zero?

Friday, January 29, 2010

Page 35: Despertando para o PHP

Loops: For e Foreach

<?php

$a = array('a', 'b', 'c');

for ($i = 0; $i < count($a); $i++){ echo $a[$i] . PHP_EOL;}

foreach( $a as $key => $letra){ echo $key . " => " . $letra. PHP_EOL;}

abc

0 => a1 => b2 => c

Friday, January 29, 2010

Page 36: Despertando para o PHP

Paradigmas: Estrutural<?php

function add($a, $b){ return $a + $b;}

echo add(1,2) . PHP_EOL;

function divide($a, $b = 2){ return $a/$b;}

echo divide(6) . PHP_EOL;

function multiply(&$a, $b){ $a = $a * $b;}

$a = 10;multiply($a, 5);echo $a . PHP_EOL;

3350

Friday, January 29, 2010

Page 37: Despertando para o PHP

Paradigmas: OO<?phpclass HAL // extends Computer // implements UserInterface{ public $nome; public function __construct($nome) { $this->nome = $nome; } public function whoareyou() { echo $this->nome . PHP_EOL; } public static function version() { echo __CLASS__ . " Model 2.34" . PHP_EOL; } }

$a = new HAL('Scott');$a->whoareyou();

HAL::version();

ScottHAL Model 2.34

Friday, January 29, 2010

Page 38: Despertando para o PHP

Manipulação de Strings

<?php

$a = "Hello World!";

echo strtoupper($a) . PHP_EOL;echo str_repeat($a, 3) . PHP_EOL;echo str_rot13($a) . PHP_EOL;echo strlen($a) . PHP_EOL;echo strrev($a) . PHP_EOL;

HELLO WORLD!Hello World!Hello World!Hello World!Uryyb Jbeyq!12!dlroW olleH

Friday, January 29, 2010

Page 39: Despertando para o PHP

Database

<?php

$db = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'user', 'passwd');

$qry = $db->prepare('SELECT * FROM tabela WHERE id = ?');

$res = $qry->execute(array(22)); //SELECT * FROM tabela WHERE id = 22

foreach($res as $linha){ echo $linha->id . PHP_EOL;}

Friday, January 29, 2010

Page 40: Despertando para o PHP

File System

<?php

$file = 'exemplo.txt';

file_put_contents($file, 'conteudo do arquivo');

echo file_get_contents($file) . PHP_EOL;

chmod($file, "777");

Friday, January 29, 2010

Page 41: Despertando para o PHP

SuperGlobals e Formulários

<form action"" method="POST"> <input id="nome" name="nome"></form>

<?php

$nome = filterInput($_POST['nome']);

Friday, January 29, 2010

Page 42: Despertando para o PHP

SuperGlobals e Formulários

<form action"" method="POST"> <input id="nome" name="nome"></form>

<?php

$nome = filterInput($_POST['nome']);

SuperGlobals

$_GET$_POST

$_COOKIE$_SESSION

Friday, January 29, 2010

Page 43: Despertando para o PHP

Procure evitar!

• Código spaghetti

• Misturar lógica de negócio e código HTML

• Consumir Super Globals sem filtrar

• $_POST/GET... não devem ser confiadas, sempre filtre seu conteudo

• “Filtre entradas, Escape saídas”

Friday, January 29, 2010

Page 44: Despertando para o PHP

O Mercadocomo ganhar dinheiro

http

://w

ww.

flick

r.com

/pho

tos/

man

uelp

ichl

er/

Friday, January 29, 2010

Page 45: Despertando para o PHP

Iniciante

Jedi Master

$

$$$$$

Friday, January 29, 2010

Page 46: Despertando para o PHP

Iniciante

Jedi Master

$

$$$$$

Friday, January 29, 2010

Page 47: Despertando para o PHP

Iniciante

Jedi Master

$

$$$$$

Controle de Versão

Friday, January 29, 2010

Page 48: Despertando para o PHP

Iniciante

Jedi Master

$

$$$$$

Controle de Versão

Debugging

Friday, January 29, 2010

Page 49: Despertando para o PHP

Iniciante

Jedi Master

$

$$$$$

Controle de Versão

Debugging

Profiling

Friday, January 29, 2010

Page 50: Despertando para o PHP

Iniciante

Jedi Master

$

$$$$$

Controle de Versão

Debugging

Profiling

Frameworks

Friday, January 29, 2010

Page 51: Despertando para o PHP

Iniciante

Jedi Master

$

$$$$$

Controle de Versão

Debugging

Profiling

Frameworks

OO

Friday, January 29, 2010

Page 52: Despertando para o PHP

Iniciante

Jedi Master

$

$$$$$

Controle de Versão

Debugging

Profiling

Frameworks

OO

Testes

Friday, January 29, 2010

Page 53: Despertando para o PHP

Iniciante

Jedi Master

$

$$$$$

Controle de Versão

Debugging

Profiling

Frameworks

OO

Testes

Design Patterns

Friday, January 29, 2010

Page 54: Despertando para o PHP

Os dois lados

• “Sobrinhos”

• Desvalorização do mercado

• Média de salários menor

• Estagnado.

• O Desenvolvedor

• Procuram valorizar o mercado

• Salários melhores

• Faltam profissionais

Friday, January 29, 2010

Page 55: Despertando para o PHP

Certificação

• Pode ser um critério de desempate

• Polêmica: decoreba X qualidade do dev.

• Não é fácil, possui muitos detalhes

• Prova com peguinhas

• Estudar casos extraordinários e parâmetros incomuns

• De uma forma geral: Vale a pena!

Zend Certified Engineer - PHP 5

Friday, January 29, 2010

Page 56: Despertando para o PHP

Construa o seu nome

• Escreva! (blog, artigos, revistas)

• Participe! (GU, Eventos)

• Contribua! (Frameworks, PHP, OSS ...)

Friday, January 29, 2010

Page 57: Despertando para o PHP

EcossistemaFerramentas

http

://w

ww.

flick

r.com

/pho

tos/

hleg

ius/

Friday, January 29, 2010

Page 58: Despertando para o PHP

O servidorEscolha seu sabor

LAMP WIMPWAMPLAPP WIPP

Friday, January 29, 2010

Page 59: Despertando para o PHP

Misture e Combine...

• Multiplataforma

• *Nix, BSD, Windows, ...

• Banco de Dados

• Oracle, SQL Server, MySQL, PostGresSQL, ...

• Servidores

• Apache, IIS, LightHTTP...

Friday, January 29, 2010

Page 60: Despertando para o PHP

Frameworks

• Abstraem camadas inferiores

• Evitam que você se repita (DRY)

• Aumentam a produtividade da equipe

• Use moderadamente e adequadamente

Friday, January 29, 2010

Page 61: Despertando para o PHP

Não deixe de estudar

• XDebug

• debugging / profiling

• Controle de versão (Subversion, git...)

• phpDoc - Documentação intra-código

• Design Patterns - como montar seu código

• PHPUnit - Testes unitários

Friday, January 29, 2010

Page 62: Despertando para o PHP

Comunidadesempre pronta para

ajudar

http

://w

ww.

flick

r.com

/pho

tos/

skoo

p/

Friday, January 29, 2010

Page 63: Despertando para o PHP

Movido à Comunidade

• Core Developers

• Escutam a comunidade e desenvolvem o PHP

• Líderes da Comunidade

• Promovem o PHP em seu ambiente

• Contribuidores

• Constróem todo resto (Frameworks, ferramentas..)

• Desenvolvedores

Friday, January 29, 2010

Page 64: Despertando para o PHP

Os Canais

• Grupos de Usuários (GU)

• Presentes em 20 dos 26 estados brasileiros

• Freenode

• #phpc (en), #php-avancado, #php-br, #phpsp

• Listas de discussão, twitter ...

Friday, January 29, 2010

Page 65: Despertando para o PHP

Quero aprender!

• Procure o GU mais perto de você: www.php.org.br

• Em São Paulo: www.phpsp.org.br

• Site do PHP: www.php.net

• Google: PHP

• Comece! Escolha um projeto pequeno e aproveite seu tempo livre

Fique ligado na programação do Campus Party/PHPSP

Friday, January 29, 2010

Page 66: Despertando para o PHP

dúvidas?

Friday, January 29, 2010

Page 67: Despertando para o PHP

Obrigado!

Rafael Dohmswww.rafaeldohms.com.br

[email protected]

Twitter: @rdohms

Friday, January 29, 2010