SlideShare uma empresa Scribd logo
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
Modern PHP
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
Modern PHP
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
Modern PHP
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)
Modern PHP
• 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
Modern PHP
<?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
Modern PHP
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');
?>
Modern PHP
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
Modern PHP
Modern PHP
Modern PHP
Modern PHP
Modern PHP
Modern PHP
Modern PHP
Modern PHP
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
Modern PHP
Por onde eu começo?
Fonte: http://doc.php.net/revcheck.php
Modern 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

PPTX
Doctrine for Dummies
PPTX
MongoDB + PHP
PDF
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PDF
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PPT
PHP e AJAX: do Request ao Framework
PPTX
PHPSP TestFest 2009
PDF
PHP Jedi - Boas Práticas e Alta Performance
PDF
Zend Framework 2 - Desenvolvimento Ágil Competente
Doctrine for Dummies
MongoDB + PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP e AJAX: do Request ao Framework
PHPSP TestFest 2009
PHP Jedi - Boas Práticas e Alta Performance
Zend Framework 2 - Desenvolvimento Ágil Competente

Mais procurados (20)

PPT
Desenvolvimento Agil Com Doctrine Orm
PDF
Introdução à MEAN Stack
PPTX
Conhecendo o Zend Framework
PDF
Despertando para o PHP
PDF
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PDF
Como fazer boas libs
PDF
Zephir
PDF
Cacheamento Lado Servidor
PDF
Escrevendo modulos python com rust
PDF
Django: Desenvolvendo uma aplicação web em minutos
PPTX
Delphi Parallel Programming Library
PDF
Abstração do banco de dados com PHP Doctrine
PDF
PHP: Linguagem + Mysql + MVC + AJAX
PDF
Desenvolvimento web com python e django
PDF
Minicurso de PHP Com Ajax
PPTX
Programando php com excelência
PDF
Desenvolvimento web ágil com python e web2py
ODP
Curso Linguagem de Programação I - PHP Básico
PDF
Palestra Desenvolvimento Ágil para Web com ROR UVA
Desenvolvimento Agil Com Doctrine Orm
Introdução à MEAN Stack
Conhecendo o Zend Framework
Despertando para o PHP
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
Como fazer boas libs
Zephir
Cacheamento Lado Servidor
Escrevendo modulos python com rust
Django: Desenvolvendo uma aplicação web em minutos
Delphi Parallel Programming Library
Abstração do banco de dados com PHP Doctrine
PHP: Linguagem + Mysql + MVC + AJAX
Desenvolvimento web com python e django
Minicurso de PHP Com Ajax
Programando php com excelência
Desenvolvimento web ágil com python e web2py
Curso Linguagem de Programação I - PHP Básico
Palestra Desenvolvimento Ágil para Web com ROR UVA
Anúncio

Destaque (17)

PDF
Depurando aplicações PHP like a BOSS
PPTX
Impacto dos frameworks PHP
PDF
Construção e provisionamento de ambientes de desenvolvimento virtualizados
PPTX
DOC
Apostila uml
PDF
DEV-OPS para teste de software
PDF
Exercícios de relacionamento 2012
PDF
Apostila de Banco dados
PDF
Apostila banco de dados
PPTX
Diagrama Entidade Relacionamento - Bancos de Dados I
PDF
Banco de dados exercícios resolvidos
PPSX
PDF
DevOps: A Culture Transformation, More than Technology
PPTX
Introducing DevOps
PPTX
PHP Traits
PPTX
DevOps 101
PDF
Integração contínua em PHP com Jenkins
Depurando aplicações PHP like a BOSS
Impacto dos frameworks PHP
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Apostila uml
DEV-OPS para teste de software
Exercícios de relacionamento 2012
Apostila de Banco dados
Apostila banco de dados
Diagrama Entidade Relacionamento - Bancos de Dados I
Banco de dados exercícios resolvidos
DevOps: A Culture Transformation, More than Technology
Introducing DevOps
PHP Traits
DevOps 101
Integração contínua em PHP com Jenkins
Anúncio

Semelhante a Modern PHP (20)

PDF
PHP like a super hero
ODP
Sapo Sessions PHP
PDF
Phpjedi 090307090434-phpapp01 2
PDF
PHP - Programação para seres humanos
PDF
PHP para aplicações Web de grande porte
PPTX
O ecossistema e o estado atual do php - o presente, o passado e o futuro da ...
PDF
Muito prazer, eu sou PHP
PDF
Muito prazer, eu sou PHP
PPTX
Fundamentos da Programação PHP OO - Aula 3
PPTX
Curso PHP - 1a. Aula (2013.2)
PDF
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
PDF
Serversidephp pptx2-120418140114-phpapp01
PDF
Introdução a Frameworks
PDF
Programação Multiplataforma em Ambiente Web
PDF
PHP - Uma Pequena Introducao
PDF
Apostila básica de PHP
PDF
Apostila php
PPSX
5 Maneiras de melhorar seu código PHP
PDF
PHP, Mercado e Certificações
PPSX
Cakephp 2.0 - O que mudou
PHP like a super hero
Sapo Sessions PHP
Phpjedi 090307090434-phpapp01 2
PHP - Programação para seres humanos
PHP para aplicações Web de grande porte
O ecossistema e o estado atual do php - o presente, o passado e o futuro da ...
Muito prazer, eu sou PHP
Muito prazer, eu sou PHP
Fundamentos da Programação PHP OO - Aula 3
Curso PHP - 1a. Aula (2013.2)
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
Serversidephp pptx2-120418140114-phpapp01
Introdução a Frameworks
Programação Multiplataforma em Ambiente Web
PHP - Uma Pequena Introducao
Apostila básica de PHP
Apostila php
5 Maneiras de melhorar seu código PHP
PHP, Mercado e Certificações
Cakephp 2.0 - O que mudou

Mais de Ari Stopassola Junior (10)

PPTX
Doctrine for dummies
PDF
PHP Community Spirit
PPTX
DevOps: desenvolvedores e sysadmins cooperando na prática
PPTX
Rumo à Certificação PHP
PPTX
Desenvolvimento de aplicações PHP com MongoDB
PPTX
Ti na Stopassola Advocacia
PPTX
Workshop Magento
PPTX
Typo3 - instalação e template
PPTX
Missao Portugal
PPT
Treinamento PHP: Strings & Patterns
Doctrine for dummies
PHP Community Spirit
DevOps: desenvolvedores e sysadmins cooperando na prática
Rumo à Certificação PHP
Desenvolvimento de aplicações PHP com MongoDB
Ti na Stopassola Advocacia
Workshop Magento
Typo3 - instalação e template
Missao Portugal
Treinamento PHP: Strings & Patterns

Último (20)

PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
PPTX
Émile Durkheim slide elaborado muito bom
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Aula sobre banco de dados com firebase db
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Processos na gestão de transportes, TM100 Col18
Aula 18 - Manipulacao De Arquivos python
Custos e liquidação no SAP Transportation Management, TM130 Col18
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
Émile Durkheim slide elaborado muito bom
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Apple Pippin Uma breve introdução. - David Glotz
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Aula sobre banco de dados com firebase db
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Processos na gestão de transportes, TM100 Col18

Modern PHP

Notas do Editor

  • #7: Mesmo com 11 anos de diferença entre a versão 7 e 5, a comunida jamais esteve parada.
  • #9: https://github.com/trending?l=php
  • #10: Fonte: http://w3techs.com/technologies/overview/programming_language/all
  • #11: O novo PHP
  • #12: Php|tek de 2009 os líderes dos principais frameworks se encontraram.
  • #14: Basic Code Style Basic Coding Standard
  • #15: Coding Style Guide
  • #16: Tela do editor Coda (Panic) for Mac, só para ilustração
  • #17: 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.
  • #21: Garantia de qualidade
  • #22: 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();
  • #24: 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.
  • #25: Mais moderno que os demais
  • #27: Diferentes estratégias de autocarregamento: PSR-0, PSR-4, classpath, files…
  • #28: composer.json composer.lock vendor (diretório)
  • #29: A medida que a funcionalidade aumenta, mais prefixos são adicionados, deixando os nomes extremamente grandes e consequentemente difícil de manusear.
  • #31: Compilação do conteúdo, mapas mentais, sínteses.
  • #32: pear install PhpDocumentor Converte para HTML, PDF e CHM (windows help files) Define os “DocBlocks”
  • #34: 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.
  • #36: phpdoc -t docs/ -o HTML:frames:phpedit -d .
  • #38: https://www.youtube.com/watch?v=anr7DQnMMs0#t=1904 Aproximadamente aos 31m 47s de palestra.
  • #43: 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,
  • #47: https://pt.wikipedia.org/wiki/Brian_Kernighan
  • #49: Usar a intuição, remover partes e testar. Arquivos Cachegrind xdebugtoolkit é escrito em Python e o CachegrindVisualizer é Adobe Air (multiplataforma).
  • #50: 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
  • #51: Instalando o KCacheGrind via MacPort: sudo port install kcachegrind kcachegrind (para executar a aplicação)
  • #52: xdebug.max_nesting_level = 4 impacta na execução do WebGrind Mostrar 100% e em microsegundos.
  • #54: Teste no WordPress para ter resultados mais expressivos.
  • #56: Pode-se utilizar um álias com AS function NomeDoNamespace(){ return "Namespace &eacute;: ".__NAMESPACE__."<br />"; }
  • #60: Ferramentas
  • #62: WYSIWYG, suporte a BD, inspeção de classes (para saber que métodos oferecem)
  • #63: Eclipse PDT (PHP Developer Tools). Os “genéricos” deve escolher a perspectiva PHP. phpStorm
  • #65: 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”
  • #67: 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...
  • #69: Habilitar SSL (Certificação digital) nos servidores, gerar documentação, Stress test: Apache Bench e Seige ECMAScript 5 é mais compatível.
  • #70: 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"
  • #73: 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.
  • #74: Phing é baseado no Apache Ant.
  • #75: Workflow bastante utilizado
  • #77: Testes funcionais usam PhpBrowser, enquanto que os testes de aceitação rodam através do PhantomJS
  • #79: 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.
  • #82: Segurança
  • #84: print_r(get_defined_constants()); //para exibir todas as constantes pré-definidas
  • #85: 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
  • #86: 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.
  • #87: 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.
  • #88: http://www.edzynda.com/use-laravels-eloquent-orm-outside-of-laravel/
  • #90: Patrick Shuff https://www.youtube.com/watch?v=MKgJeqF1DHw http://investor.fb.com/releasedetail.cfm?ReleaseID=893395
  • #91: Criado pelo Facebook Gerou competição
  • #92: Dialeto do PHP (e não uma linguagem totalmente nova)
  • #93: Por que pularam o PHP6?
  • #94: 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.
  • #95: http://www.zend.com/en/resources/php7_infographic Drupal 8 roda 72% mais rápido com PHP7
  • #96: http://www.zend.com/en/resources/php7_infographic 25% dos sites no mundo rodam em WordPress
  • #97: http://www.zend.com/en/resources/php7_infographic
  • #98: http://www.zend.com/en/resources/php7_infographic https://pt.wikipedia.org/wiki/Conjunto_de_Mandelbrot
  • #99: 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.
  • #100: 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.
  • #101: http://www.tonarua.nu/#!phpconf2015/amx19
  • #103: Detalhes em: http://doc.php.net/revcheck.php?p=graph&lang=pt_BR
  • #107: 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.
  • #108: Issue tracking: Jira é comercial, mas integra com metodologias ágeis (através de plug-in). Trac é feito em Python.
  • #109: 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.
  • #111: 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,
  • #112: 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/
  • #113: Jenkins, Travis, GitLab CI, Bamboo, Liquibase, TeamCity e Code Climate.
  • #114: Mercado de trabalho
  • #117: Livro lançado em fevereiro/2015.
  • #118: Apacha está sendo substituído pelo NGINX
  • #119: Faltou visualizar os arquivos ocultos. Ex.: .gitignore, .env etc.
  • #120: 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
  • #122: entregar adesivos!
  • #123: Brinde