O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Rumo à Certificação PHP

3.778 visualizações

Publicada em

Apresentação intitulada "Rumo à Certificação PHP" na V Jornada Acadêmica de Análise e Desenvolvimento de Sistemas do IFRS - Câmpus Bento Gonçalves (que ocorreu entre os dias 6 e 7/11/2014):
http://ads.bento.ifrs.edu.br/noticias/view/id/118/
Apresentei as vantagens em ser um profissional certificado, como funciona a compra do voucher, formato do teste, qual o conteúdo do exame, tecnologias relacionadas que também são abordadas, estratégias para conduzir melhor a prova, exemplos de questões, como as versões do PHP influenciam no teste, diferenças da ZCE (PHP 5.3) x ZCPE (PHP 5.5), armadilhas, técnicas de resolução das perguntas, como lidar com as inconsistências da linguagem, preparatório, simulados e a lista "Rumo à Certificação PHP":
http://www.rumoacertificacaophp.com

  • Seja o primeiro a comentar

Rumo à Certificação PHP

  1. 1. Rumo à certificação PHP Ari Stopassola Junior
  2. 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. 3. 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!
  4. 4. 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
  5. 5. Histórico
  6. 6. 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
  7. 7. Logotipo para empresas que desejam contratar profissionais ZCPE Desconto na compra de vouchers acima de 10 unidades: sales@zend.com
  8. 8. 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
  9. 9. Conta na Zend: http://shop.zend.com
  10. 10. Pearson VUE http://vue.com/zend
  11. 11. 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.
  12. 12. Local do exame
  13. 13. Agendamento
  14. 14. Confirmação
  15. 15. Usando o voucher da Zend Algo como: ZTPB379B231A
  16. 16. Finalizando
  17. 17. Atualizando a certificação
  18. 18. Zend Education Advisory Board Fonte: http://www.zend.com/services/certification/php-5-certification/education-advisory-board
  19. 19. 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
  20. 20. 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
  21. 21. 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; ?> |
  22. 22. 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…
  23. 23. Ansiedade
  24. 24. 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
  25. 25. 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.
  26. 26. FAIL “Certification Exam Retakes”. Para mais informações escreva: certification@zend.com
  27. 27. CONGRATULATIONS
  28. 28. Relatório emitido no ato
  29. 29. Diploma físico
  30. 30. 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
  31. 31. 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)
  32. 32. Resposta: escolha única ✓
  33. 33. 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).
  34. 34. Resposta: escolha múltipla ✓ ✓
  35. 35. 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.
  36. 36. 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
  37. 37. Freetext abstract
  38. 38. 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).
  39. 39. 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
  40. 40. Quiz #6 ✓
  41. 41. 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
  42. 42. 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
  43. 43. Inconsistências: case insensitive – i versus case Case sensitive Case insensitive strpos stripos str_replace str_ireplace strcmp strcasecmp
  44. 44. 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
  45. 45. 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)
  46. 46. Quiz #7 <?php if("um"==0){ echo "Verdadeiro"; } else { echo "Falso"; } ?>
  47. 47. 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)
  48. 48. 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
  49. 49. 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
  50. 50. Tela de revisão
  51. 51. 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 ✓
  52. 52. “Existem 10 tipos de pessoas: a que entendem binário e as que não entendem”
  53. 53. Binário para decimal
  54. 54. Quiz #10 $binario = 0b101010; //base 2 $octal = 01234; //base 8 $decimal ✓✓ = 1234; //base 10 $hexadecimal = 0x1234; //base 16
  55. 55. 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
  56. 56. 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 ✓ ✓ ✓
  57. 57. 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
  58. 58. 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
  59. 59. Cenário legítimo Nesse caso o método CargaDescarga (também útil na classe Transfer) deverá ser copiado ✗
  60. 60. 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
  61. 61. <?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(); ?>
  62. 62. 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…
  63. 63. 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
  64. 64. 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(); ?> |
  65. 65. 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 }
  66. 66. 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
  67. 67. Disciplina
  68. 68. 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)
  69. 69. Recomendada pela própria Zend!
  70. 70. Frutos Podcast http://www.zcebrasil.com mantido por Nanderson Castro Nanderson e Ari – nov/2013 em Osasco (SP)
  71. 71. 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
  72. 72. 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)
  73. 73. Camisetas: development
  74. 74. Camisetas: build
  75. 75. Camisetas: deploy Joe Stagner @misfitgeek e Ana Maria Valarezo @ana_mvalarezo, ambos da Zend
  76. 76. elePHPant http://www.elephpant.com
  77. 77. 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
  78. 78. TCC de graduação em Informática por João Paulo Cercal jpcercal@gmail.com http://zcpe.cekurte.com
  79. 79. Logotipo feito cordialmente pelo francês Vincent Pontier – criador do elePHPant (mascote oficial do PHP) @Elroubio
  80. 80. 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
  81. 81. 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
  82. 82. Pasta compartilhada no DropBox e no GoogleDrive Pedidos diretamente ao nosso "guardião" das pastas compartilhadas: Gustavo Pereira <gustavoper@gmail.com>
  83. 83. 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
  84. 84. Simulados e Apps
  85. 85. 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
  86. 86. 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
  87. 87. 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

×