O documento discute as vantagens da certificação PHP e fornece informações sobre os exames de certificação oferecidos pela Zend Technologies Ltd., como datas, locais, estrutura, tópicos cobrados e estatísticas sobre profissionais certificados.
2. Ari Stopassola Junior
Bacharel em Informática com ênfase em Análise de
Sistemas pela Unisinos, cursou mestrado em Engenharia
Informática e de Computadores pelo Instituto Superior
Técnico da Universidade Técnica de Lisboa (Portugal),
perito judicial 'ad hoc' especializado em TI (mantenedor do
site PERITO.inf.br), Zend Certified Engineer (PHP 5.3) e
Zend Certified PHP Engineer (PHP 5.5) #ZEND004019,
Certified ScrumMaster pela Scrum Alliance #203613,
Microsoft Certified Professional (MCP), consultor web e PHP
evangelist.
3.
4. Certificações PHP
• CP-470 PHP – National Computer Science Academy
(NCSA)
http://www.ncsacademy.com/certification/php.cfm
• W3Schools
http://www.w3schools.com/cert/cert_php.asp
• Brainbench
• "Zend Certified PHP Engineer" (ZCPE PHP 5.5),
promovida pela Zend Technologies Ltd.
A mais
prestigiada!
5. Vantagens
• Prestígio e reconhecimento junto a comunidade
• Processo rigoroso de aprovação
• Demonstra maturidade e proficiência na linguagem
• Permissão para uso dos logotipos oficiais nos cartões de visita
• Ganha uma licença perpétua do editor Zend Studio (versão vigente)
• Visibilidade internacional através da “Zend Certified Engineer
Directory”, antigamente conhecida como “Yellow Pages”
• Diferencial e bonificações salariais
• Descontos em conferências Zend
• O título ZCE/ZCPE não expira!
• Acesso a grupos exclusivos
• Oportunidades de outsourcing
7. Estatísticas:
Yellow Pages
Até o momento (outubro/2014) há somente 369
profissionais certificados ZCE/ZCPE no Brasil:
http://www.zend.com/en/services/certification/zend-certified-engineer-directory
http://www.zend.com/en/yellow-pages/ZEND004019
8. Logotipo para empresas que
desejam contratar profissionais
ZCPE
Desconto na compra de vouchers acima de 10 unidades: sales@zend.com
9. Preço e cupons de
desconto
http://www.softwarediscountcodes.com/zend-phpcertification.
html
7 a 10%
http://www.softwarevouchers.com/zend-phpcertifications.html
http://www.retailmenot.com/view/zend.com
• Havia um bug no site onde o preço nos EUA (atribuído em
dólar) era o mesmo valor da Europa (porém em euros, mais
oneroso)
http://shop.zend.com/eu/php-certification.html
€170.00
http://shop.zend.com/en/php-certification.html
$195.00
20. Dia da prova
• A PearsonVUE recomenda que você
chegue UMA hora antes
• Leve DOIS documentos oficiais
identificadores com foto, para evitar
fraudes
• Esteja hidratado
• Não é permitido levar qualquer material –
eles ficam armazenados num armário
chaveado
• Não é permitido levantar-se no decorrer
do exame. Ida ao banheiro é controlada
21. Itens permitidos
• Eraseable board (quadro apagável)
• Protetor auricular
Fonte: http://www.gedtestingservice.com/testers/noteboards
• Sua conduta é monitorada o tempo todo
• Qualquer suspeita de irregularidade, sua
prova é invalidada
23. Reagendamento
• Pode-se reagendar quantas vezes quiser
durante UM ano, através do site
http://www.pearsonvue.com
• No mínimo 48 horas de antecedência
• Sem custo adicional
• Porém, há um efeito colateral…
25. Estrutura do exame
• 70 perguntas randômicas
• Limite de 90 minutos para respondê-las
• ≅1 minuto e 17 segundos por questão!
• Caráter neutro
• Jamais se repetem
• Distribuídas entre os dez tópicos
• Tem mesmo peso
• Respostas incorretas não geram
penalidades
26. O que NÃO cai
Classes ou extensões externas provenientes da PEAR/Pyrus ou PECL
(CodeSniffer, PhpDocumentor, xDebug, profiler, GD, Phing, fPDF), ou
vindo de outros repositórios como a PHPUnit, Composer (gerenciador de
dependências), Suhosin (sistema de segurança em PHP), sistemas para
controle de versão (CVS, Subversion, Git, Mercurial), empacotamento
PHAR, procedimentos para Integração Contínua com Jenkins (e seus
módulos como PHPMD-MessDetector, DRY-Copy&Paste Detector,
PHP_Depend), sistema de templates (Smarty e Twig), PHP-GTK,
Frameworks (CakePHP, CodeIgniter, Symfony, ZendFramework, YII,
Prado), CMS (Typo3, Wordpress, Joomla!, Drupal), sistemas
especializados (Magento, SugarCRM ou phpMyAdmin), editores
(ZendStudio, NetBeans, PDT, Aptana, PhpED), mecanismos de cache
(APC, Memcache e Gearman), ORM (Propel ou Doctrine), funções SQL
específicas de algum banco de dados (que não sejam ANSI SQL), bases
NoSQL e ferramentas Zend como Zend Optimizer+, Zend Java Bridge,
Zend Guard Loader e outros.
34. Dez tópicos
• Fundamentos do
PHP
• Funções
• Formato de dados
e tipos
• Recursos Web
• Programação
Orientada à
Objetos
• Segurança
• I/O (Entrada e
Saída)
• Strings e Padrões
• Banco de Dados
• Arrays
35. Enunciados
• Não há syntax highlight
• O algoritmo é sempre na linguagem PHP – não exibem
pseudocódigos
• Podem conter imagens para ilustrar (geralmente alguma
tabela de BD, diagrama UML etc)
• Independem de Sistema Operacional e Sistema
Gerenciador de Banco de Dados (SGBD)
• O teste também aborda, indiretamente, HTTP e SQL
(Structured Query Language), XML (XPath) e JSON
• Nem sempre eles estarão em blocos terminados em ?>, a
menos que haja HTML (ou JavaScript) embedded
• Pode fazer referência ao Apache (servidor de aplicação)
37. LEFT JOIN
SELECT names.name,emails.email
FROM names
LEFT JOIN emails ON emails.id=names.id;
names emails
Prioriza a tabela da “esquerda”, que
foi referenciada primeiro. Ou seja:
permite que uma das tabelas
(names) retorne linhas mesmo que
não haja equivalência na outra tabela
(emails).
39. Quiz #4
Preencha o espaço em branco com o nome
adequado.
A função _____________ __autoload()
chama
automaticamente os recursos necessários
sempre que um usuário tenta instanciar uma
classe inexistente.
Nomes de funções devem ser escritas em caixa
baixa (lowercase), sem espaços em branco, nem
explicações ou comentários. Com ou sem
parênteses.
40. Resposta: campo
aberto
• É um tipo de pergunta menos frequente
• Recebe:
– Nomes de funções/métodos/classes
– Conteúdo de variáveis
– Saída de código
– Pequenos trechos (snippets)
– Tipos de erro: Notice, Warning ou Fatal
error
– Nome de constantes
– Cláusula do php.ini
42. Cláusulas padrão do php.ini
• register_globals = Off
• magic_quotes_gpc = Off
• error_reporting = E_ALL
• display_errors = On
Lembrando que as diretivas podem ser
indicadas por 1 e 0, respectivamente On e Off.
Ex.: asp_tags = 0 (representa “Off”,
desligado).
43. 5 MIL funções
Devo mentalizar todas elas?
E a ordem de parâmetros?
O foco do teste é em
análise de algoritmos
ou invés de
memorização
49. Ordem de parâmetros
• Ordem dos argumentos discrepante:
array_map(callback, array)
enquanto que
array_filter(array, callback)
• Anomalias na nomenclatura:
bindtextdomain(domínio, diretório)
bind_textdomain_codeset(domínio, codeset)
51. Type Juggling
• PHP é uma linguagem fracamente tipada
• Teste com == não compara os tipos de dados –
diferentemente do === (idêntico).
• Implicitamente o PHP realiza casting automático
1) converte a string “um” em integer, resultando em
inteiro 0
• Consequentemente o teste 0==0 é verdadeiro.
Ex.:
var_dump(intval("um")); //int(0)
var_dump(intval(0)); //int(0)
52. Quiz #8
Qual a saída deste
código?
✓
A: 10111213
B: 1011
C: 101
D: 12
<?php
class A {
protected $a = 1;
function a() { echo $this->a++; }
}
class B extends A {
protected $a = 10;
function b() { echo $this->a++; $this->a(); }
}
$b = new B;
$b->b();
?>
Retro-compatiblidade
com PHP 4
53. Marcar para revisão
• Priorize as questões mais curtas
• Antes de realizar o teste de mesa,
verifique se as chamadas de função estão
com a sintaxe correta
• Marque para revisão
59. ZCE (PHP 5.3) ZCPE
(PHP 5.5)
• Built-in web server: php -S localhost:8080
• Cronômetro de alta precisão:
$_SERVER['REQUEST_TIME_FLOAT']
• Novas formas de manipulação de arrays
$array2 = [1,2,3,4];
echo ObtemArray()[1];
• Class member access on instantiation:
echo (new DateTime)->getTimestamp();
• http_response_code(404);
• Traits
• Formato binário: $bin = 0b11001;
• Status de sessão: session_status();
• $this e use em Closures
• Progresso de upload: session.upload_progress.enabled = On
PHP 5.4
60. Quiz #11
O método especialistas() retorna os desenvolvedores responsáveis por cada framework.
De acordo com o código abaixo, como obter o especialista em ZendFramework2 “ZF2”?
class Developers {
public static function Especialistas(){
return [
'ZF2' => 'Ari Junior',
'Laravel' => 'Michaelsen',
'Code Igniter' => 'Oddy Silva',
'Symfony' => 'Renato'
];
}
}
Assinale as alternativas corretas:
A) echo Developers::Especialistas()['ZF2'];
B) echo (new Developers)->Especialistas()['ZF2'];
C) $dev = new Developers; echo $dev->Especialistas()['ZF2'];
D) Não pode instanciar pois o método Especialistas() é estático
✓
✓
✓
61. Herança múltipla
Algumas observações
preliminares…
• Herdar significa reutilizar atributos e métodos de
uma classe ancestral
• A classe filha leva TODA a herança
• Pode-se controlar o que será herdado através
do escopo de visibilidade
• Na herança simples o reuso não é pleno, já que
poderia fazer uso de recursos contidos em
OUTRAS classes
• Se houver a necessidade de herança múltipla,
talvez possa indicar uma falha na modelagem
62. Deadly diamond of death
PHP não implementa herança múltipla portanto evita
o “Problema do Diamante”: que método usar se duas
sub-classes possuem um recurso de mesmo nome
que foi sobrescrito em ambas?
Métodos sobrescritos de A
Herança múltipla
Qual usar?
http://en.wikipedia.org/wiki/Diamond_problem
63. Cenário legítimo
Nesse caso o método
CargaDescarga (também útil na
classe Transfer) deverá ser
copiado
✗
64. Traits
• Promovem “herança horizontal”
• Traits são usados ao invés de
instanciados
• Classes podem usar vários traits ao
mesmo tempo (assim como as interfaces)
• Traits podem conter outros traits
• Podem ter atributos
65. <?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();
?>
66. Resolução de conflitos
<?php
trait Colaborador {
function PreencherOpinario(){
return "Opinario dos colaboradores";
}
}
trait Parceiro {
function PreencherOpinario(){
return "Opinario dos parceiros";
}
}
trait Cliente {
function PreencherOpinario(){
return "Opinario dos clientes";
}
}
class Estagiario {
use Colaborador, Parceiro, Cliente;
}
$obj = new Estagiario;
echo $obj->PreencherOpinario();
?>
Fatal error: Trait method PreencherOpinario has
not been applied, because there are collisions
with other trait methods on Estagiario in…
67. Traits: resolução de conflitos
class Estagiario {
use Colaborador, Parceiro, Cliente {
Colaborador::PreencherOpinario insteadof Parceiro,
Cliente;
}
}
class Estagiario {
use Colaborador, Parceiro, Cliente {
Colaborador::PreencherOpinario insteadof Parceiro,
Cliente;
Parceiro::PreencherOpinario as OpinarioSimplificado;
}
}
A ordem de uso dos métodos é:
①da própria classe
②do Trait
③da classe pai
68. Quiz #12
Qual a saída do código PHP a seguir:
<?php
trait Colaborador {
function PreencherOpinario(){
return "colaboradores";
}
}
class Pessoa {
function PreencherOpinario(){
return "generico";
}
}
class Estagiario extends Pessoa{
use Colaborador;
function PreencherOpinario(){
return "estagiarios";
}
}
$colega = new Estagiario;
echo $colega->PreencherOpinario();
?>
|
69. ZCE (PHP 5.3) ZCPE
(PHP 5.5)
• Opcode Cache
zend_extension=opcache.so
opcache.enable=1
• Iteração com generators (yield )
• API para hashing de senha: password_hash("senha",
PASSWORD_BCRYPT);
• try, catch e finally:
PHP 5.5
bloqueia tabela
try {
escreve no banco de dados
desbloqueia tabela
}
catch exceção {
reporta problemas
desbloqueia tabela
}
Código redundante
bloqueia tabela
try {
escreve no banco de dados
}
catch exceção {
reporta problemas
}
finally {
desbloqueia tabela
}
70. Preparatório
• Zend PHP 5.3 Certification Training ministrado pelo instrutor Doug
Bierer: http://static.zend.com/topics/videos/training/php-5-3-cert-introduction/
• Test Prep: PHP Certification - online (9 encontros de 2 horas cada)
http://www.zend.com/en/services/training/php-5-cert
US$ 1.000
• Test Prep: PHP Certification - recorded Sessions (7 horas no total)
http://www.zend.com/en/services/training/php-certification-course
US$ 499
Doug Bierer
72. Lista de discussão:
Rumo à certificação PHP
www.rumoacertificacaophp.com
• Criada por Renington Neri em 31/07/2010
• Atualmente com 1050 membros
• Ficou conhecida pela “Pergunta do dia”
• Hoje, dia 7/nov, foi publicada a pergunta de nº
1.544
• Grupo no Facebook:
– http://www.facebook.com/groups/434330716587
436/ Primeiro logo, criado por
Gustavo Pereira
Ari e Gustavo – nov/2013 em Osasco (SP)
75. Conquistas recentes
• Cupons de 20% desconto na compra do
voucher para os exames "Zend Certified
PHP Engineer" (ZCPE) e "Zend
Framework 2 Certified Architect" (ZFCA)
• O mais recente expirou em 30/setembro:
Bra20phpzf14
• Dezenas de cupons vendidos – a maioria
para membros do nosso grupo
76. Livros
• Rumo à Certificação PHP por Kinn
Coelho Julião
<kinncj@php.net>https://leanpub.com
/rumoacertificaophp
• Certification PHP 5.5: Zend
Certified PHP Engineer por Cyrille
Grandval e Julien Charpentier
• Em breve, pela editora Novatec
coming soon… Ari e Cyrille – jul/2014 em Gramado (RS)
81. App para Android - autoria de Fabricio Bedeschi:
fabricio.bedeschi@gmail.com
https://play.google.com/store/apps/details?id=com.quiz.php
https://github.com/fabriciobrag/android-quiz-php
82. TCC de graduação em Informática
por João Paulo Cercal
jpcercal@gmail.com
http://zcpe.cekurte.com
83. Logotipo feito cordialmente pelo
francês Vincent Pontier – criador do
elePHPant (mascote oficial do PHP)
@Elroubio
84. Meeting com Matthew
Weier O'Phinney
Líder do ZendFramework, líder do projeto APIgility e tantos outros:
https://mwop.net
ZCE (PHP 5.3), ZCPE (PHP 5.5), ZendFramework Certified, Linux Foundation Certified, CompTIA Linux+, LPI Linux
Essentials, LPIC-1, certificado Novell e outras mais:
http://www.zend.com/en/yellow-pages/ZEND023069
85. TDC 2014
Palestra de Leonardo Sápiras na trilha "Stadium" (auditório principal) no TDC Porto Alegre 2014.
Apresentação intitulada "PHP: adquirindo experiência e qualificação em projetos internacionais". Assista em:
http://www.globalcode.com.br/videos/tdc-2014-portoalegre/sexta/php-experiencia-e-qualificacao-projetos-internacionais
86. Pasta compartilhada no
DropBox e no GoogleDrive
Pedidos diretamente ao nosso "guardião" das pastas
compartilhadas:
Gustavo Pereira <gustavoper@gmail.com>
87. Roteiro
• Livro “PHP Programando com Orientação a Objetos” do
autor Pablo
Dall'Oglio:http://www.novatec.com.br/livros/phpobjetos2/
• Vídeo-aulas da Lynda e Udemy
• Livros clássicos (embora obsoletos em alguns aspectos)
• Analisar todas as "Perguntas do dia" da lista "Rumo à
Certificação PHP" http://rumoacertificacaophp.com/
Tempo
US$
19,95
89. Certificamp
• Inspirado no http://www.bignerdranch.com
• "Acampamento" de estudos para a certificação
PHP
• Curso itinerante, presencial e de imersão
• Preparatório para o exame "Zend Certified PHP
Engineer" (ZCPE PHP 5.5)
• Realizado em 2 dias com carga horária de 16h
• https://www.facebook.com/certificamp
• https://www.twitter.com/certificamp
90. Bingo!
Quiz # Resposta
1 111111
2 B (5)
3 A e D
4 __autoload
5 abstract
6 E
7 Falso
8 10111213
9 (vazio)
10 42
11 A, B e C
12 estagiarios
Pertencer a grupos de elite restritos a ZCEs.
Certifica competência técnica e não comportamental.Requer maturidade na linguagem.
Em média, a cada 3 anos.
Auxilia os empregadores a predizer se o profissional conseguirá aplicar a tecnologia PHP 5.5 em problemas reais no desenvolvimento de software e de negócio. É uma garantia de que o desenvolvedor possui padrões mínimos de experiência e conhecimento
Variam de 7% a 10% de desconto e uso ilimitado. Experimentem acessar o site da Zend, simule uma compra qualquer (no link "Store"), digite (e aplique) o ID do cupom onde diz "Discount Codes" e observem.
Certifique-se da data limite do cupom.Dica marota
O centro examinador local mantém uma agenda integrada com a Pearson VUE, portanto não requer confirmar o agendamento.
CPF, RG, carteira de motorista (documentos oficiais)
Para os testes de mesa
Resposta: 111111
Imagem extraída de: http://blog.placeboeffect.com/natural-anxiety-relief/
No caso de “Fail”, o sistema gera um relatório do nível de conhecimento apresentado nas diferentes áreas de estudo. É um tanto vago, pois mostra apenas uma barra de progressão e não informa exatamente os erros e acertos.
A partir desse momento você já começa a desfrutar das vantagens de ser um profissional certificado.
Recomendo atualizar seus dados no site da Zend (principalmente o endereço de correspondência) e aguardar a chegada do certificado “físico”, uma carta de boas-vindas com a assinatura em punho do Training Program Manager da Zend e um adesivo exclusivo.
Atualize seus dados no site da Zend para que chegue corretamente
Abrangência
Inclusive o ZF estimula que a tag PHP de fechamento seja omitida.Alternativas iguais, mas perguntas diferentes.
Resposta: B (5)
Teoria dos conjuntos – oitava série do ensino médio
A: OK, B: REST suporta JSON, mas também XML e HTML (portanto não), C: SOAP só usa POST (e não GET), portanto também não.http://www.soapui.org/Best-Practices/testing-the-other-verbs.htmlD: faz sentido
Classes abstratas e interfaces são as assinaturas das classes, o esqueleto de como elas devem ser implementadas.As abstratas suportam implementação, enquanto que as interfaces não.
Fracamente tipada
Lembre-se que o PHP escreve o conteúdo da propriedade $a e só depois faz o incremento de uma unidade – chamado de pós-incremento ($a++).
Mas o fundamental nessa questão é a retro-compatilidade. Algum desenvolvedor desavisado pode esquecer da política que mantém a compatibilidade com o suporte de Orientação à Objetos do PHP4, que executa métodos de mesmo nome da classe como se fossem construtores. Isso significa que ao instanciar a classe B, o método b() será executado automaticamente (exibindo 1011). E depois o método b é executado explicitamente ($b->b()) exibindo 1213, que concatenado o script mostra 10111213 – portanto letra A.