rumo à certificação php
Post on 09-Jul-2015
1.219 Views
Preview:
DESCRIPTION
TRANSCRIPT
Rumo à certificação PHP
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.
Ari Stopassola Junior
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
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
7 a 10%
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 oficiaisidentificadores com foto, para evitarfraudes
• Esteja hidratado
• Não é permitido levar qualquer material –eles ficam armazenados num armáriochaveado
• Não é permitido levantar-se no decorrerdo exame. Ida ao banheiro é controlada
Itens permitidos
• Eraseable board (quadro apagável)
• Protetor auricular
• Sua conduta é monitorada o tempo todo
• Qualquer suspeita de irregularidade, suaprova é invalidada
Fonte: http://www.gedtestingservice.com/testers/noteboards
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 gerampenalidades
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 algumatabela 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 _____________ chama
automaticamente os recursos necessários
sempre que um usuário tenta instanciar uma
classe inexistente.
__autoload()
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 underscorejson_decode
base64_decode
urldecode
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/objetosocket_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 quearray_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: VerdadeiroB: FalsoC: Parse errorD: (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últiplaAlgumas 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?
http://en.wikipedia.org/wiki/Diamond_problem
Herança múltipla
Métodos sobrescritos de A
Qual usar?
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 #12Qual 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 Cachezend_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ó
dig
ore
du
nd
ante
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 B
iere
r
Disciplina
Lista de discussão:
Rumo à certificação PHPwww.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 porGustavo Pereira
Ari
e G
usta
vo
–n
ov/2
01
3 e
mO
sa
sco
(S
P)
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
App para Android - autoria de Fabricio Bedeschi:
fabricio.bedeschi@gmail.comhttps://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
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
Líder do ZendFramework, líder do projeto APIgility e tantos outros:
https://mwop.net
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
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
Contatos
top related