SlideShare uma empresa Scribd logo
1 de 100
Modern PHP
Ari Stopassola Junior
20 anos
http://haphpy-birthday.net
https://plus.google.com/115682389249477476280/posts
O começo…
• Rasmus Lerdorf
• Conjunto de scripts
• "Personal Home Page
Tools"
• Viveu em Porto Alegre de
1991 a 1993
Extraído de: http://lerdorf.com/resume/
História
Popularidade
http://w3techs.com/technologies/overview/programming_language/
all
+82% de TODA a internet usa PHP
Renascimento
https://pt.wikipedia.org/wiki/Homem_Vitruviano_%28desenho_de_Leonardo_da_Vinci%29
Framework Interoperability Group
PSR
PHP Standards
Recommendations
http://www.php-fig.org/psr/
PSR-1
http://www.php-fig.org/psr/psr-
1/
<?php
namespace AgenciaReceptivo;
class ItinerarioDePasseio
{
const IDADE_MIN = 5;
public function montaRoteiro()
{
}
}
<?php ou <?= ?>
Namespace
s
StudlyCap
s
MAIÚSCULA
S
camelCas
e
PSR-2
http://www.php-fig.org/psr/psr-2/<?php
namespace AgenciaReceptivo;
class ItinerarioDePasseio
{
const IDADE_MIN = 5;
public function montaRoteiro()
{
}
}
Identação com 4 espaços
Não fecha ?>
Visibilidade
Chaves (classes e métodos) sempre em nova linha
Linha em branco após a declaração de namespace
Coding Standards
http://pear.php.net/package/PHP_CodeSniffer
Instalação:
pear install PHP_CodeSniffer
ou
apt-get install php-codesniffer (Linux)
phpcs hello.php
phpcs --standard=zend hello.php
Checar e corrigir
• Para checar o PSR-1 e PSR-2 utilize o
CodeSniffer:
phpcs --standard=PSR2 arquivo.php
• Para corrigir de eventuais problemas utilize
Code Beautifier and Fixer:
phpcbf --standard=PSR2 arquivo.php
Boas
práticas vão
além...
• Controle de versão. Ex.: git
• Metodologias ágeis. Ex.: Scrum
• Padrões de Projeto (design patterns)
• Ambientes homogêneos. Ex.: Vagrant e
Docker
• Mecanismos de implantação
(deployment)
• Testes
• API-centric
• Conduta
https://cleancoders.com
QA: quality assurance
http://phpqatools.org
Outros padrões
recomendados
• PSR-3 Logger Interface
• PSR-4 Autoloading Standard
• PSR-6 Caching Interface
• PSR-7 HTTP Message Interface
Componentes
Gestor de dependências para PHP
http://getcomposer.org
Packagist: repositório de
pacotes
https://packagist.org
php composer.phar require phpoffice/phpword
https://packagist.org/statistics
<?php
require "vendor/autoload.php";
$mail = new PHPMailer;
$mail = null;
$pdf = new fpdfFPDF();
$pdf->output("documento.pdf", "F");
$pdf = null;
use PhpOfficePhpWordPhpWord;
$doc = new PhpWord;
$doc->save("documento.doc", 'Word2007');
use InterventionImageImageManagerStatic as Image;
$img = Image::make('IMG_8529.JPG');
$img->resize(50, 50);
$img->save('miniatura.jpg');
Instalação de componentes
curl -sS https://getcomposer.org/installer | php
php composer.phar require phpmailer/phpmailer
php composer.phar require itbz/fpdf
php composer.phar require phpoffice/phpword
php composer.phar require intervention/image
composer.json
Namespaces
• Definições de classes são globais, portanto o
desenvolvedor precisava ter cuidado ao nomear suas
classes – podendo sobrescrever outras bibliotecas
(de terceiros)
• Uma estratégia de nomenclatura era criar algo como:
Perito_Biblioteca_TrataImagem
• Encapsula classes, funções e constantes
• Resolve problemas no reuso de código, dentre eles:
• Colisão entre nomes
• Habilidade de abreviar nomes longos
Documentação
Documentação
• Faz parser do código em busca de DocBlocks
• Auto-documentação
• Converte em HTML, PDF, CHM e XML
(DocBook)
• phpDocumentor
http://www.phpdoc.org
• DocBlox
http://www.docblox-project.org
• Doxygen
http://www.doxygen.org
• PHP Dox
http://phpdox.net/
phpdoc -t docs/ -o PDF:default:default -d .
Diretório
local
Frameworks
“They all suck!”
Rasmus Lerdorf – PHP Frameworks Day 2013
I'm kidding!
Life is full of choices...
Frameworks
full-stack
Fonte: http://microphp.org
Provisionamento
www.phansible.com
xDebug
• Extensão PHP criada em 2002 por Derick
Rethans
• Ferramenta de debug e profiling para PHP
• Empilhamento de funções e rastreamento de
erros
• Profiling detecta gargalos de performance
• Permite uma execução passo-a-passo, mesmo
remotamente (observando o conteúdo das
variáveis)
• Não utilize em servidores de produção!
• Exibe informações privilegiadas e expõe
brechas de segurança
Otimização
Profiling
• Identificar gargalos
• Analisa a execução do script e mede uso de
memória, tempo de execução e frequência das
chamadas de função
• Ferramentas que fazem a leitura da saída
cache grind:
• KCachegrind
• Webgrind
• MacCallGrind
• WinCacheGrind
• xdebugtoolkit ou CachegrindVisualizer (geram .dot)
• Graphviz (lê o .dot e gera uma árvore)
Profiler: KCachegrind
Profiler: webgrind
https://github.com/jokkedk/webgrind
Opcode Cache
• Scripts PHP são compilados on-the-fly
• Supostamente mais lento que as linguagens
pré-compiladas
• Zend Optimizer+ tornou-se open source e foi
renomeado para OPcache
• Opcache gera um bytecode e o armazena em
memória
• É nativo no PHP 5.5 (desde que o PHP seja
compilado com a opção --enable-opcache)
Lab: ApacheBench
ab -n 100 -c 5 http://www.site.com/
Compare com e sem Opcache, onde diz:
Time taken for tests
Cenário…
Nesse caso o método CargaDescarga
(também útil na classe Transfer) deverá
ser copiado
✗
<?php
class Passeios {
function PagaComissao(){
return "Paga comissao...";
}
}
trait Recursos {
function CargaDescarga(){
return "Realiza carga e
descarga";
}
}
class Transfer extends Passeios {
use Recursos;
}
$obj = new Transfer;
echo $obj->CargaDescarga();
Traits
Ecossistem
a
Editores
Editores (IDEs)
• Commits rápidos
• Trabalha offline
• Todos tem cópia
Controle de versão compartilhado
Hospedado
• GitHub
• BitBucket
• Atlassian
Stash
Servidor próprio
• Gitosis
• Gitorious
• GitLab
• GitBlit
Fonte: http://abload.de/img/in_case_of_fireirrtb.jpg
O que seria um build no PHP?
• Submeter aos testes (unitário, comportamento e
integração)
• Executar as migrations
• Concatenar e minificar arquivos JavaScript e CSS
• Comprimir imagens
• Compilar Sass e LESS
• Atribuir permissões em arquivos/pastas
• Produzir arquivos estáticos, como HTMLs
• Agendamentos na CRON
• php.ini local x php.ini do servidor x php.ini do CLI
• Transformar código de ECMA6 para ECMA5
<?xml version="1.0" encoding="UTF-8"?>
<!-- Demonstração de como alterar as credenciais de BD - by Ari Jr. arijunior@gmail.com (25/4/2013)-->
<project name="CartridgeMagento" default="principal" basedir=".">
<target name="ConfiguraVarAmbiente">
<property name="db_host" value="${env.DBHOST}" override="yes" />
<property name="db_user" value="${env.DBUSER}" override="yes" />
<property name="db_pass" value="${env.DBPASS}" override="yes" />
<property name="db_name" value="${env.DBNAME}" override="yes" />
</target>
<target name="principal" depends="ConfiguraVarAmbiente" description="Altera o arquivo de conf. do
Magento">
<!-- Copia o template e aplica uma cadeia de filtros -->
<copy file="app/etc/local.xml.template" tofile="app/etc/local_outro.xml" overwrite="true">
<filterchain>
<replacetokens begintoken="{{" endtoken="}}">
<token key="db_host" value="${db_host}" />
<token key="db_user" value="${db_user}" />
<token key="db_pass" value="${db_pass}" />
<token key="db_name" value="${db_name}" />
</replacetokens>
</filterchain>
</copy>
</target>
</project>
IaaS
PaaS
SaaS
OpenShift, Heroku, Google App Engine (Google Cloud), AppFog,
Pagoda Box, Fortrabbit, Laravel Forge
Digital Ocean, AWS, Linode, Azure, Rackspace, Open Stack
Hospedagem: cloud
Implantação: simples, previsível e reversível
Foto:https://flic.kr/p/6mNHcj
Deployment
•Capistrano
http://capistranorb.com
•Phing (manual)
http://www.phing.info
•Rocketeer
http://rocketeer.autopergamene.eu
•Magallanes
http://magephp.com
Testes
Codeception
<?php
$I = new AcceptanceTester($scenario);
$I->wantTo('Me autenticar no sistema');
$I->amOnPage('/login');
$I->fillField('email', 'arijunior@gmail.com');
$I->fillField('senha', 'p@$$w0#d');
$I->click('Entrar');
$I->see('Agenda', 'h1');
?>
Migrations: Phinx
https://phinx.org
Segurança
API para hashing de senha
• Converte a senha em um token de uma
só via
• Haviam bibliotecas separadas para essa
finalidade:
http://openwall.com/phpass/
• Dificilmente se consegue aplicar
engenharia reversa para decifrar a senha
original
Funções
<?php
$pass1 = password_hash("senha", PASSWORD_BCRYPT);
echo $pass1;
//$2y$10$bi8RpsxOvEt5mdmZRQjPqewPpw5OhRQcIQZWDld3/GDC3t6dL6wFC
//Tornando a hash ainda mais difícil de decifrar:
//salt (tempero) deve conter 22 caracteres
//cost representa o tempo de CPU utilizado. Deve ser de 4 a 31.
//Obs. a partir de 10 começa a comprometer significativamente a performance
$pass2 = password_hash("senha", PASSWORD_BCRYPT, array('salt'=>'Junicao2k14AriNetoPalo',
'cost'=>8));
echo $pass2;
//$2y$11$Junicao2k14AriNetoPalea7XU5I/HU2TBiIy1ISQPliFAawO8ptq
• Gera uma hash de 60 caracteres
• Constante PASSWORD_BCRYPT representa o algoritmo
BlowFish
• Constante PASSWORD_BCRYPT_DEFAULT_COST possui 10 como
padrão
Mapeamento Objeto Relacional (ORM)
• Persistir o objeto numa
estrutura de dados
relacional
• Tradução para tabelas,
campos e linhas
• ORM mascara detalhes
obscuros
• Overhead
• Requer aprendizagem de
outras tencnologias. Ex.:
DQL (Doctrine), Propel,
Eloquent etc.
http://www.edzynda.com/use-laravels-eloquent-orm-outside-of-laravel/
Object-relational mapping
<?php
//SELECT * FROM artigos WHERE id=23
$artigo = AppArtigos::find(23);
$artigo->titulo = "Apresentando Modern PHP";
$artigo->publicado_em = CarbonCarbon::now();
$artigo->save();
//SELECT * FROM artigos WHERE titulo='Ari'
$artigo = AppArtigos::where('titulo', 'Ari')->get();
//SELECT * FROM artigos WHERE assunto='PHP' ORDER BY
publicado_em DESC LIMIT 10
$artigo = AppArtigos::where('assunto', 'PHP')
->orderBy('publicado_em', 'desc')
->take(10)
->get();
$artigos = AppArtigos::all();
return $artigos;
HHVM, Hack e PHP7
http://alshain4.deviantart.com/art/Elephant-whisperer-292023268
Facebook
• 12.5 milhões de
requisições por segundo
(tráfego dinâmico!)
• 260 milhões de
conexões abertas
simultaneamente
• 1.1 bilhão de usuários
ativos/mês
Dados extraídos da palestra do gaúcho
Marlon Dutra no FISL14 (em julho/2013)
intitulada "Facebook: gerenciando
tráfego globalmente para atender 1
bilhão de usuários":
https://www.youtube.com/watch?v=Sv_xpGzRiOo
http://wp.clicrbs.com.br/login/2013/07/05/conheca-marlon-o-gaucho-que-controla-os-numeros-do-facebook/?topo=13,1,1,,11,13
Declaração de tipos
<?php
declare(strict_types=1);
function obterTotal(float $a, float $b) : float {
return $a + $b;
}
obterTotal(2, "Ari"); //Fatal error
obterTotal(2.8, "3.2"); //Fatal error
obterTotal(2.5, 1);
//int(1) muda para float(1.0) e retorna float(3.5)
Tratamento de erros fatais
<?php
declare(strict_types=1);
function soma(int $a, int $b) : int {
return $a + $b;
}
try {
$total = soma(3, 5.6);
echo $total;
} catch (Throwable $e) {
echo $e->getMessage();
} finally {
echo "Finaliza independentemente";
}
Comunidades
Por onde eu começo?
Fonte: http://doc.php.net/revcheck.php
http://vitaly-sokol.deviantart.com/art/An-African-Elephant-Underwater-583948615
Ao infinito e além
Fonte:https://leanpub.com/php
• Linha de
comando (CLI)
• GUI
• Daemons
• Impressão
• Raspberry Pi e
Arduino
e MUITO mais…
Code Climate
https://codeclimate.com
Travis CI
www.travis-ci.org
.travis.yml
• TeamCity (by JetBrains)
www.jetbrains.com/teamcity
• Continuous PHP
www.continuousphp.com
• PHPCI
www.phptesting.org
• Semaphore
www.semaphoreci.com
• Scrutinizer
www.scrutinizer-ci.com
• SensioLabs Insight
www.insight.sensiolabs.com
• Buildkite
www.buildkite.com
• Codacy
www.codacy.com
Mercado de
Trabalho
Fonte: Craigslist em http://www.langpop.com
Comparativo de ofertas
"Life" by Edward Monkton
Josh Lockhart
PHP do jeito certo:
http://br.phptherightway.com
Awesome PHP
https://github.com/ziadoz/awesome-
phpJamie York
AMP
Década
passada
Hoje
Dicas
• Estruturada x Orientada à Objetos
• Relacional x NoSQL
• Waterfall x Agile
• FTP x git push
• Equipes remotas
• Virtualização
• Curriculum Vitae x GitHub | Stack
Overflow
• Cloud
"Modern PHP development isn't as
much about changes in the language
as it is about changes in how we build
software with PHP."
Ben Ramsey
E-mail:
arijunior@gmail.com
Twitter: @stopassola
Skype: stopassola
LinkedIn:
http://pt.linkedin.com/in/stopassola
Facebook:
http://www.facebook.com/arijunior
Sites:
http://slideshare.net/arijunior
http://www.perito.inf.br
http://www.certificamp.com
http://www.rumoacertificacaophp.com
Contatos
Obrigado!
[ tem brinde ]

Mais conteúdo relacionado

Mais procurados

Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Conhecendo o Zend Framework
Conhecendo o Zend FrameworkConhecendo o Zend Framework
Conhecendo o Zend FrameworkJaime Neto
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHPRafael Dohms
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyRelsi Maron
 
Curso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoCurso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoNorton Guimarães
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 

Mais procurados (20)

Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Conhecendo o Zend Framework
Conhecendo o Zend FrameworkConhecendo o Zend Framework
Conhecendo o Zend Framework
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHP
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
 
Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
 
Zephir
ZephirZephir
Zephir
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
Curso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoCurso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP Básico
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 

Destaque

Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSThiago Rodrigues
 
Impacto dos frameworks PHP
Impacto dos frameworks PHPImpacto dos frameworks PHP
Impacto dos frameworks PHPThiago Rodrigues
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de softwareQualister
 
Exercícios de relacionamento 2012
Exercícios de relacionamento 2012Exercícios de relacionamento 2012
Exercícios de relacionamento 2012Vitor Leal Diniz
 
Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dadosFernando Palma
 
Diagrama Entidade Relacionamento - Bancos de Dados I
Diagrama Entidade Relacionamento - Bancos de Dados IDiagrama Entidade Relacionamento - Bancos de Dados I
Diagrama Entidade Relacionamento - Bancos de Dados IDjonathas Cardoso
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
DevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyDevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyCA Technologies
 
PHP Traits
PHP TraitsPHP Traits
PHP Traitsmattbuzz
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsGilmar Pupo
 

Destaque (17)

Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSS
 
Impacto dos frameworks PHP
Impacto dos frameworks PHPImpacto dos frameworks PHP
Impacto dos frameworks PHP
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
DevOps
DevOpsDevOps
DevOps
 
Apostila uml
Apostila umlApostila uml
Apostila uml
 
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de software
 
Exercícios de relacionamento 2012
Exercícios de relacionamento 2012Exercícios de relacionamento 2012
Exercícios de relacionamento 2012
 
Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dados
 
Apostila banco de dados
Apostila banco de dadosApostila banco de dados
Apostila banco de dados
 
Diagrama Entidade Relacionamento - Bancos de Dados I
Diagrama Entidade Relacionamento - Bancos de Dados IDiagrama Entidade Relacionamento - Bancos de Dados I
Diagrama Entidade Relacionamento - Bancos de Dados I
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
DevOps
DevOpsDevOps
DevOps
 
DevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyDevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than Technology
 
Introducing DevOps
Introducing DevOpsIntroducing DevOps
Introducing DevOps
 
PHP Traits
PHP TraitsPHP Traits
PHP Traits
 
DevOps 101
DevOps 101DevOps 101
DevOps 101
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 

Semelhante a Modern PHP

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
DevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na práticaDevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na práticaAri Stopassola Junior
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHPAugusto das Neves
 
OpenShift: NoSQL "a la carte" num PaaS 100% Open Source
OpenShift: NoSQL  "a la carte"  num PaaS 100% Open SourceOpenShift: NoSQL  "a la carte"  num PaaS 100% Open Source
OpenShift: NoSQL "a la carte" num PaaS 100% Open SourceEdgar Silva
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsNuno Paz
 
Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Jonata Weber
 
Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGiMasters
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxThiago Paes
 
Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Getup Cloud
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkMarcelo Rodrigo
 

Semelhante a Modern PHP (20)

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
DevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na práticaDevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na prática
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Python 08
Python 08Python 08
Python 08
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
 
OpenShift: NoSQL "a la carte" num PaaS 100% Open Source
OpenShift: NoSQL  "a la carte"  num PaaS 100% Open SourceOpenShift: NoSQL  "a la carte"  num PaaS 100% Open Source
OpenShift: NoSQL "a la carte" num PaaS 100% Open Source
 
Doctrine for dummies
Doctrine for dummiesDoctrine for dummies
Doctrine for dummies
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 
Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)
 
Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNG
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
 
Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 

Mais de Ari Stopassola Junior

Mais de Ari Stopassola Junior (7)

PHP Community Spirit
PHP Community SpiritPHP Community Spirit
PHP Community Spirit
 
Rumo à Certificação PHP
Rumo à Certificação PHPRumo à Certificação PHP
Rumo à Certificação PHP
 
Ti na Stopassola Advocacia
Ti na Stopassola AdvocaciaTi na Stopassola Advocacia
Ti na Stopassola Advocacia
 
Workshop Magento
Workshop MagentoWorkshop Magento
Workshop Magento
 
Typo3 - instalação e template
Typo3 - instalação e templateTypo3 - instalação e template
Typo3 - instalação e template
 
Missao Portugal
Missao PortugalMissao Portugal
Missao Portugal
 
Treinamento PHP: Strings & Patterns
Treinamento PHP: Strings & PatternsTreinamento PHP: Strings & Patterns
Treinamento PHP: Strings & Patterns
 

Modern PHP

Notas do Editor

  1. Mesmo com 11 anos de diferença entre a versão 7 e 5, a comunida jamais esteve parada.
  2. https://github.com/trending?l=php
  3. Fonte: http://w3techs.com/technologies/overview/programming_language/all
  4. O novo PHP
  5. Php|tek de 2009 os líderes dos principais frameworks se encontraram.
  6. Basic Code Style Basic Coding Standard
  7. Coding Style Guide
  8. Tela do editor Coda (Panic) for Mac, só para ilustração
  9. http://pear.php.net/manual/pt_BR/package.php.php-codesniffer.coding-standard-tutorial.php Pode checar outros formatos além do PHP, com por exemplo JS e XML.
  10. Garantia de qualidade
  11. Autoload mudou significativamente a forma de desenvolver aplicações. Antes da versão 5, era necessário fazer include/require em cada arquivos de classes que desejava incorporar. Introduziu-se o __autoload();
  12. PEAR: PHP Extension and Application Repository PEAR são classes em PHP (incluídas no código), enquanto que PECL são extensões escritas em C Instala pacotes num repositório central Requer privilégios de administrador/root Estagnada Força a qualidade de código com inúmeras regras.
  13. Mais moderno que os demais
  14. Diferentes estratégias de autocarregamento: PSR-0, PSR-4, classpath, files…
  15. composer.json composer.lock vendor (diretório)
  16. A medida que a funcionalidade aumenta, mais prefixos são adicionados, deixando os nomes extremamente grandes e consequentemente difícil de manusear.
  17. Compilação do conteúdo, mapas mentais, sínteses.
  18. pear install PhpDocumentor Converte para HTML, PDF e CHM (windows help files) Define os “DocBlocks”
  19. phpdoc -t docs/ -o PDF:default:default -d . -t é o target, -d diretório que sofrerá o parser para mais informações acesse: vim /Applications/MAMP/bin/php/php5.3.6/lib/php/data/PhpDocumentor/phpDocumentor.ini Se aparecer um “ERROR: nothing parsed” verifique o local onde você se encontra.
  20. phpdoc -t docs/ -o HTML:frames:phpedit -d .
  21. https://www.youtube.com/watch?v=anr7DQnMMs0#t=1904 Aproximadamente aos 31m 47s de palestra.
  22. Espelhamento de ambientes. Qual a imagem usar, que script Chef executar, habilitar rede, pastas compartilhadas. Com uma linha é possível testar em diferentes versões de sistema operacional e combinações de configuração. Usa Hyper-V (Microsoft), VirtualBox (Oracle), KVM, VMWare etc. Orientado a ambientes de desenvolvimento, pois utilizam uma camada de vitualização – prejudicando a performance. Criar um ambiente que possa ser reproduzido, quando se precisa de algo que fuja do LAMP, compatibilidade cross-platform, time trabalhando em diferentes SO. Provisionamento: setup automatizado, quanto tempo para subir uma máquina, maximizar dev/prod parity, isolamento de ambientes,
  23. https://pt.wikipedia.org/wiki/Brian_Kernighan
  24. Usar a intuição, remover partes e testar. Arquivos Cachegrind xdebugtoolkit é escrito em Python e o CachegrindVisualizer é Adobe Air (multiplataforma).
  25. Para utilizar em modo trigger, passe como parâmetro na URL o XDEBUG_PROFILE=1 cachegrind.out.%p (process ID) %t (timestamp) e %R (raiz) Ex.: cachegrind.out.1370217130-_LiveDemoxDebug_funcoes_inc_php_XDEBUG_PROFILE=1
  26. Instalando o KCacheGrind via MacPort: sudo port install kcachegrind kcachegrind (para executar a aplicação)
  27. xdebug.max_nesting_level = 4 impacta na execução do WebGrind Mostrar 100% e em microsegundos.
  28. Teste no WordPress para ter resultados mais expressivos.
  29. Pode-se utilizar um álias com AS function NomeDoNamespace(){ return "Namespace &eacute;: ".__NAMESPACE__."<br />"; }
  30. Ferramentas
  31. WYSIWYG, suporte a BD, inspeção de classes (para saber que métodos oferecem)
  32. Eclipse PDT (PHP Developer Tools). Os “genéricos” deve escolher a perspectiva PHP. phpStorm
  33. Excelente exercício: http://www.codeschool.com/courses/try-git O Linux utilizava o BitKeeper (que é um software comercial) Conhecido como um “Filesystem distribuiído”
  34. Gitosis e Gitorious pode-se baixar e instalar num servidor local. Através de um servidor, é possível ter maior controle sobre os dados. Existe também o Garrit e outros...
  35. Habilitar SSL (Certificação digital) nos servidores, gerar documentação, Stress test: Apache Bench e Seige ECMAScript 5 é mais compatível.
  36. Abra o terminal:sudo pear install http://phing.info/pear/phing-current.tgz Testando se foi realmente instalado:phing –v Deve aparecer algo como: "Phing version 2.1.1"
  37. Siga esse mantra Simples: procure concentrar o processo de implantação e dispará-lo em apenas UM comando. Previsível : saber o que está acontecendo. Se houver efeitos colaterais, mantenha a versão corrente. Reversível: UM comando e o sistema volta ao que era.
  38. Phing é baseado no Apache Ant.
  39. Workflow bastante utilizado
  40. Testes funcionais usam PhpBrowser, enquanto que os testes de aceitação rodam através do PhantomJS
  41. Testes de aceitação (Codeception) são mais proveitosos para times pequenos. Emulam a navegação no site/sistema, experimentando o funcionamento como um todo.
  42. Segurança
  43. print_r(get_defined_constants()); //para exibir todas as constantes pré-definidas
  44. Memcache quando o conteúdo é o mesmo, independente de servidor. Facebook tem 805 servidores em memcache, do total de 10 mil (fizeram um fork do projeto, com suporte a UDP) – dados de 2008. Flickr – 38mil requisições/seg Memcache integra com Nagios Gearman pode rodar de forma síncrona (em primeiro plano) ou assíncrona (em background). Digg possui 400 mil jobs por dia
  45. Experimente fazer um left outer join num ORM, ou uma função de agregação como média. Alguns falharam ao executar transações, passando a responsabilidade para a aplicação. Não há necessidade de cache, pois o mongoDB já fica em memório – o quanto houver de RAM disponível. Usar monboDB simplifica o desenvolvimento da aplicação pois não requer tratar de atualizações de registros, cache expirado etc.
  46. Hibernate do Java e ao ActiveRecord do Rails. Mapeamento em arquivos .ini ou XML Propel e Doctrine usam o design pattern ActiveRecord, enquanto que o Zend_Db_Table usa Table Data Gateway pattern e Row Data Gateway pattern. Livro "Patterns of Enterprise Application Architecture" do Martin Fowler de 2003.
  47. http://www.edzynda.com/use-laravels-eloquent-orm-outside-of-laravel/
  48. Patrick Shuff https://www.youtube.com/watch?v=MKgJeqF1DHw http://investor.fb.com/releasedetail.cfm?ReleaseID=893395
  49. Criado pelo Facebook Gerou competição
  50. Dialeto do PHP (e não uma linguagem totalmente nova)
  51. Por que pularam o PHP6?
  52. http://www.zend.com/en/resources/php7_infographic Tempo de execução quase 2 vezes mais rápido que o PHP 5.6 e 30% a menos de consumo de memória, suporta 3x mais requisições que um servidor rodando PHP 5.6.
  53. http://www.zend.com/en/resources/php7_infographic Drupal 8 roda 72% mais rápido com PHP7
  54. http://www.zend.com/en/resources/php7_infographic 25% dos sites no mundo rodam em WordPress
  55. http://www.zend.com/en/resources/php7_infographic
  56. http://www.zend.com/en/resources/php7_infographic https://pt.wikipedia.org/wiki/Conjunto_de_Mandelbrot
  57. Aceita int, bool, string e float (scalar). O TypeHint tradicional funciona com objetos e arrays. Declare é habilitado por aquivo e não no php.ini (para todos). Antes do PHP7 fazia-se muitos testes unitários para checar o tipo de variável. Pode usar híbrido.
  58. Throwable é uma interface que a Exception e a classe Error implementam. Erros fatais chamam especificamente a Error. Error é a classe pai de TypeError, ParseError, ArithmeticError e AssertionError.
  59. http://www.tonarua.nu/#!phpconf2015/amx19
  60. Detalhes em: http://doc.php.net/revcheck.php?p=graph&lang=pt_BR
  61. Usa a GIMP Tool Kit para aplicações gráficas desktop, suporte a skin (tema), orientada a eventos, janelas, acesso aos recursos da máquina no cliente, suporte a Widget (caixas de texto, botão, frame etc). Ex.: GNUTeca da Univates, Agata Report.
  62. Issue tracking: Jira é comercial, mas integra com metodologias ágeis (através de plug-in). Trac é feito em Python.
  63. One time now (da Axosoft), porém mais focado em Scrum. Ele não permitia dois responsável por uma tarefa (princípio fundamental do Pair programming – XP). Target Process, Mantis, Bugzilla É possível agrupar as tarefas realizadas (“Done”) em uma release específica e automaticamente o Jira retira do dashboard.
  64. Ele confronta o código com uma série de ferramentas de QA: http://phpqatools.org Sumariza a saida das principais ferramentas de qualidade. Roda uma série de análises. Métricas. Faz revisão do código, atribui badges (selos) onde a nota 4 é a máxima,
  65. Antecipar gargalos e problemas ANTES de colocar em produção. Progresso incremental. É possível realizar o commit e evitar o disparo do CI. Ex.: git commit –m "mensagem [CI SKIP]" http://docs.travis-ci.com/user/languages/php/
  66. Jenkins, Travis, GitLab CI, Bamboo, Liquibase, TeamCity e Code Climate.
  67. Mercado de trabalho
  68. Livro lançado em fevereiro/2015.
  69. Apacha está sendo substituído pelo NGINX
  70. Faltou visualizar os arquivos ocultos. Ex.: .gitignore, .env etc.
  71. Workers (mecanismo de filas como ActiveMQ), Querys SQL x MapReduce. Recomenda-se autenticar via par de chaves, ao invés de login/senha. Karma Level. Arquitetura de cloud: IaaS x Paas - Exexmplos de IaaS: Digital Ocean, AWS, Linode, Azure, Rackspace e Open Stack - Exemplos de PaaS: OpenShift, Heroku, Google App Engine (Google Cloud), AppFog, Pagoda Box, Fortrabbit, Laravel Forge
  72. entregar adesivos!
  73. Brinde