Rumo à certificação PHP 
Ari Stopassola Junior
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.
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!
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
Histórico
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
Logotipo para empresas que 
desejam contratar profissionais 
ZCPE 
Desconto na compra de vouchers acima de 10 unidades: sales@zend.com
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
Conta na Zend: 
http://shop.zend.com
Pearson VUE 
http://vue.com/zend
Idioma 
Na versão 5.5 
existe apenas o 
inglês. 
Nas vesões 
anteriores, havia a 
possibilidade de 
escolher entre: 
alemão, francês, 
inglês e japonês.
Local do exame
Agendamento
Confirmação
Usando o voucher da 
Zend 
Algo como: 
ZTPB379B231A
Finalizando
Atualizando a certificação
Zend Education 
Advisory Board 
Fonte: http://www.zend.com/services/certification/php-5-certification/education-advisory-board
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
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
Quiz #1 
Eraseable board 
<?php 
interface i1 {} 
interface i2 extends i1 {} 
interface i3 {} 
class c1 {} 
class c2 extends c1 {} 
class c3 extends c2 implements i2, i3 {} 
$c3 = new C3(); 
echo $c3 instanceof c1; 
echo $c3 instanceof c2; 
echo $c3 instanceof c3; 
echo $c3 instanceof i1; 
echo $c3 instanceof i2; 
echo $c3 instanceof i3; 
?> 
|
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…
Ansiedade
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
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.
FAIL 
“Certification Exam Retakes”. Para mais 
informações escreva: 
certification@zend.com
CONGRATULATIONS
Relatório emitido no ato
Diploma físico
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
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)
Resposta: escolha única 
✓
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).
Resposta: escolha 
múltipla 
✓ 
✓
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.
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
Freetext 
abstract
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).
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
Quiz #6 
✓
Armadilhas: "to" versus "2" 
• cal_to_jd 
• ftok 
• idn_to_ascii 
• idn_to_unicode 
• idn_to_utf8 
• strtok 
• strtolower 
• strtotime 
• strtoupper 
• bin2hex 
• deg2rad 
• hex2bin 
• image2wbmp 
• ip2long 
• jpeg2wbmp 
• ldap_dn2ufn 
• ldap_err2str 
• long2ip 
• nl2br 
• png2wbmp 
• px_date2string 
• px_timestamp2string 
• rad2deg
Inconsistências: 
underscore 
Com underscore Sem underscore 
json_decode 
urldecode 
base64_decode 
gzdecode 
error_get_last 
func_get_arg 
fgetcsv 
gethostname 
str_pad 
str_split 
str_replace 
str_getcsv 
strlen 
strptime 
strrev 
stristr
Inconsistências: case 
insensitive – i versus 
case 
Case sensitive Case insensitive 
strpos stripos 
str_replace str_ireplace 
strcmp strcasecmp
Inconsistências: verbo 
versus objeto 
Objeto/verbo Verbo/objeto 
socket_read 
ldap_read 
readdir 
readfile 
date_parse 
xml_parse 
parse_str 
parse_url 
imap_check 
pspell_check 
checkdnsrr 
checkdate 
timezone_version_get 
realpath_cache_get 
ini_get 
getheaders 
getcwd 
getenv
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)
Quiz #7 
<?php 
if("um"==0){ 
echo "Verdadeiro"; 
} 
else { 
echo "Falso"; 
} 
?>
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)
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
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
Tela de revisão
Quiz #9 
Qual a saída do código a seguir: 
<?php 
function ExibeFilme($filme = ""){ 
if(8 == "8 Mile"){ 
$resultado = "Verdadeiro"; 
} 
else { 
$resultado = "Falso"; 
} 
echo $filme; 
} 
echo ExibeFilme(); 
?> 
A: Verdadeiro 
B: Falso 
C: Parse error 
D: (vazio) 
E: 8 Mile 
✓
“Existem 10 tipos de pessoas: a que 
entendem binário e as que não 
entendem”
Binário para decimal
Quiz #10 
$binario = 0b101010; //base 2 
$octal = 01234; //base 8 
$decimal ✓✓ 
= 1234; //base 10 
$hexadecimal = 0x1234; //base 16
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
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 
✓ 
✓ 
✓
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
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
Cenário legítimo 
Nesse caso o método 
CargaDescarga (também útil na 
classe Transfer) deverá ser 
copiado 
✗
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
<?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(); 
?>
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…
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
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(); 
?> 
|
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 
}
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
Disciplina
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)
Recomendada pela 
própria Zend!
Frutos 
Podcast http://www.zcebrasil.com mantido 
por Nanderson Castro 
Nanderson e Ari – nov/2013 em Osasco (SP)
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
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)
Camisetas: development
Camisetas: build
Camisetas: deploy 
Joe Stagner @misfitgeek e Ana Maria Valarezo @ana_mvalarezo, ambos da Zend
elePHPant 
http://www.elephpant.com
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
TCC de graduação em Informática 
por João Paulo Cercal 
jpcercal@gmail.com 
http://zcpe.cekurte.com
Logotipo feito cordialmente pelo 
francês Vincent Pontier – criador do 
elePHPant (mascote oficial do PHP) 
@Elroubio
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
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
Pasta compartilhada no 
DropBox e no GoogleDrive 
Pedidos diretamente ao nosso "guardião" das pastas 
compartilhadas: 
Gustavo Pereira <gustavoper@gmail.com>
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
Simulados e Apps
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
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
Contatos 
E-mail: 
arijunior@gmail.com 
Twitter: @stopassola 
Skype: stopassola 
LinkedIn: 
http://pt.linkedin.com/in/stopassola 
Facebook: 
http://www.facebook.com/arijunior 
Sites: 
http://www.perito.inf.br 
http://www.rumoacertificacaophp.com

Rumo à Certificação PHP

  • 1.
    Rumo à certificaçãoPHP Ari Stopassola Junior
  • 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.
  • 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ígioe 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
  • 6.
  • 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 empresasque desejam contratar profissionais ZCPE Desconto na compra de vouchers acima de 10 unidades: sales@zend.com
  • 9.
    Preço e cuponsde 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
  • 10.
    Conta na Zend: http://shop.zend.com
  • 11.
  • 12.
    Idioma Na versão5.5 existe apenas o inglês. Nas vesões anteriores, havia a possibilidade de escolher entre: alemão, francês, inglês e japonês.
  • 13.
  • 14.
  • 15.
  • 16.
    Usando o voucherda Zend Algo como: ZTPB379B231A
  • 17.
  • 18.
  • 19.
    Zend Education AdvisoryBoard Fonte: http://www.zend.com/services/certification/php-5-certification/education-advisory-board
  • 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
  • 22.
    Quiz #1 Eraseableboard <?php interface i1 {} interface i2 extends i1 {} interface i3 {} class c1 {} class c2 extends c1 {} class c3 extends c2 implements i2, i3 {} $c3 = new C3(); echo $c3 instanceof c1; echo $c3 instanceof c2; echo $c3 instanceof c3; echo $c3 instanceof i1; echo $c3 instanceof i2; echo $c3 instanceof i3; ?> |
  • 23.
    Reagendamento • Pode-sereagendar 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…
  • 24.
  • 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ÃOcai 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.
  • 27.
    FAIL “Certification ExamRetakes”. Para mais informações escreva: certification@zend.com
  • 28.
  • 29.
  • 30.
  • 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ãohá 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)
  • 36.
  • 37.
    LEFT JOIN SELECTnames.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).
  • 38.
  • 39.
    Quiz #4 Preenchao 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
  • 41.
  • 42.
    Cláusulas padrão dophp.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
  • 44.
  • 45.
    Armadilhas: "to" versus"2" • cal_to_jd • ftok • idn_to_ascii • idn_to_unicode • idn_to_utf8 • strtok • strtolower • strtotime • strtoupper • bin2hex • deg2rad • hex2bin • image2wbmp • ip2long • jpeg2wbmp • ldap_dn2ufn • ldap_err2str • long2ip • nl2br • png2wbmp • px_date2string • px_timestamp2string • rad2deg
  • 46.
    Inconsistências: underscore Comunderscore Sem underscore json_decode urldecode base64_decode gzdecode error_get_last func_get_arg fgetcsv gethostname str_pad str_split str_replace str_getcsv strlen strptime strrev stristr
  • 47.
    Inconsistências: case insensitive– i versus case Case sensitive Case insensitive strpos stripos str_replace str_ireplace strcmp strcasecmp
  • 48.
    Inconsistências: verbo versusobjeto Objeto/verbo Verbo/objeto socket_read ldap_read readdir readfile date_parse xml_parse parse_str parse_url imap_check pspell_check checkdnsrr checkdate timezone_version_get realpath_cache_get ini_get getheaders getcwd getenv
  • 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)
  • 50.
    Quiz #7 <?php if("um"==0){ echo "Verdadeiro"; } else { echo "Falso"; } ?>
  • 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 Quala 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
  • 54.
  • 55.
    Quiz #9 Quala saída do código a seguir: <?php function ExibeFilme($filme = ""){ if(8 == "8 Mile"){ $resultado = "Verdadeiro"; } else { $resultado = "Falso"; } echo $filme; } echo ExibeFilme(); ?> A: Verdadeiro B: Falso C: Parse error D: (vazio) E: 8 Mile ✓
  • 56.
    “Existem 10 tiposde pessoas: a que entendem binário e as que não entendem”
  • 57.
  • 58.
    Quiz #10 $binario= 0b101010; //base 2 $octal = 01234; //base 8 $decimal ✓✓ = 1234; //base 10 $hexadecimal = 0x1234; //base 16
  • 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 Omé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 Algumasobservaçõ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 ofdeath 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 Nessecaso 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 deconflitos 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 Quala 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 • ZendPHP 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
  • 71.
  • 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)
  • 73.
  • 74.
    Frutos Podcast http://www.zcebrasil.commantido por Nanderson Castro Nanderson e Ari – 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)
  • 77.
  • 78.
  • 79.
    Camisetas: deploy JoeStagner @misfitgeek e Ana Maria Valarezo @ana_mvalarezo, ambos da Zend
  • 80.
  • 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çãoem Informática por João Paulo Cercal jpcercal@gmail.com http://zcpe.cekurte.com
  • 83.
    Logotipo feito cordialmentepelo 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 Palestrade 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
  • 88.
  • 89.
    Certificamp • Inspiradono 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
  • 91.
    Contatos E-mail: arijunior@gmail.com Twitter: @stopassola Skype: stopassola LinkedIn: http://pt.linkedin.com/in/stopassola Facebook: http://www.facebook.com/arijunior Sites: http://www.perito.inf.br http://www.rumoacertificacaophp.com

Notas do Editor

  • #2 Estratégias
  • #6 Pertencer a grupos de elite restritos a ZCEs. Certifica competência técnica e não comportamental. Requer maturidade na linguagem.
  • #7 Em média, a cada 3 anos.
  • #9 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
  • #10 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
  • #18 O centro examinador local mantém uma agenda integrada com a Pearson VUE, portanto não requer confirmar o agendamento.
  • #21 CPF, RG, carteira de motorista (documentos oficiais)
  • #22 Para os testes de mesa
  • #23 Resposta: 111111
  • #25 Imagem extraída de: http://blog.placeboeffect.com/natural-anxiety-relief/
  • #28 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.
  • #29 http://www.pearsonvue.com/athena/static/finish/index.asp
  • #30 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.
  • #31 Atualize seus dados no site da Zend para que chegue corretamente
  • #35 Abrangência
  • #36 Inclusive o ZF estimula que a tag PHP de fechamento seja omitida. Alternativas iguais, mas perguntas diferentes.
  • #37 Resposta: B (5)
  • #38 Teoria dos conjuntos – oitava série do ensino médio
  • #39 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.html D: faz sentido
  • #42 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.
  • #51 Fracamente tipada
  • #53 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.
  • #54 Fonte: http://www.pearsonvue.com/athena/static/review/flag_for_review.asp
  • #56 Desvio de atenção: apresentam um código, mas ele sequer realiza tal operação. Indução Resposta: D (vazio)
  • #57 Antiga piada geek
  • #59 C: 42
  • #60 $_SERVER['REQUEST_TIME_FLOAT']
  • #61 A, B e C são corretas
  • #63 Conflito de nomes Pode compor uma classe, contendo outras classes. Mesmo assim traz tudo.
  • #69 “estagiarios” (sem aspas) pois a prioridade é: classe local, trait e classe herdada (super-classe base)
  • #70 Pseudo-código
  • #72 Cronograma
  • #79 estampa enviada pela Zend
  • #83 Área administrativa: http://192.241.145.236:9000/ 
  • #86 [ Matthew's photo by Rob Allen <https://www.flickr.com/photos/akrabat/> ]
  • #90 Existia a Vulcan