# PHP ## Nivel 1 - [ ] **PHP - Fundamentos**: - Conhecer os tipos primitivos - Declarar variáveis - Usar estruturas condicionais ('if', 'else') - Conhecer os operadores de comparação ('=', '==', '===') - Usar estruturas de repetição e laços ('while', 'for') - Usar funções, passando parâmetros e argumentos - Manipular arrays e listas - Aprender o conceito de Orientação a Objetos - [ ] **Conceitos de Orientação a Objetos**: - A Programação Orientada a Objetos é um paradigma de programação de software baseado na composição e interação entre diversas unidades chamadas de 'objetos' e as classes, que contêm uma identidade, propriedades e métodos). Ela é baseada em quatro componentes da programação: abstração digital, encapsulamento, herança e polimorfismo. - Como funcionam objetos - Criar e utilizar construtores - O que são classes - Criar e utilizar métodos - Como funciona encapsulamento - O que é herança - O que é polimorfismo - Como funcionam interfaces - O que são abstrações - [ ] **PHP - Manipulação de Erros**: - Tratar exceções pré-definidas - Uso de 'try' e 'catch' - Criar exceções específicas - [ ] **PHP - Testes**: - Usar testes unitários - Usar testes de integração - Usar testes de comportamento (behavior) - Usar mocks - [ ] **PHP - Persistência**: - Conhecer o PDO - Fazer inserções, alterações e remoções em um banco de dados - Fazer consultas em um banco de dados usando filtros - [ ] **PHP - Arquivos e Streams**: - Abrir, ler e manipular arquivos - Aplicar wrappers e filtros nos streams - Usar streams - Conhecer encodings e character sets ## Nivel 2 - [ ] **PHP - Composer**: - Gerenciar dependências - Incluir bibliotecas de terceiros - [ ] **PHP - MVC**: - Entender o conceito do padrão MVC (Model-View-Controller) - Separar as responsabilidades entre as camadas MVC - [ ] **Laravel**: - Conhecer as características do framework Laravel - Trabalhar com rotas - Usar arquivos Blade - [ ] **PHP - Symfony**: - Conhecer as principais características do framework - Utilizar componentes - Definir recursos e rotas - Templates Twig - [ ] **PHP - XDebug**: - Usar e aprimorar o var_dump com XDebug - Analisar e entender a stack (pilha) de execução - Depurar o código - Depurar remotamente com Docker ## Nivel 3 - [ ] **PHP Assíncrono**: - Entender sobre programação assíncrona - Aprender a usar sockets - Conhecer bibliotecas de programação reativa - Aprender sobre corrotinas - [ ] **PHP Funcional**: - Entender a fundo sobre funções em PHP - Conhecer funções de manipulação de arrays - Realizar composição de funções usando pipelines - [ ] **SOLID**: - Conhecer boas práticas no desenvolvimento de software - [ ] **Design Patterns**: - Na engenharia de software, um "padrão de projeto" (Design Pattern em inglês) é uma solução geral e reutilizável para um problema que ocorre normalmente dentro de um determinado contexto de projeto de software. - Conhecer e aplicar os principais Design Patterns - [ ] **Clean Architecture**: - Conhecer a metodologia a ser usada na codificação, a fim de facilitar o desenvolvimento códigos, permitir uma melhor manutenção, atualização e menos dependência - [ ] **Object Calisthenics**: - Conhecer as regras de Object Calisthenics - Simplificar classes e métodos - Manter o código mais curto e coeso - [ ] **Reflection e atributos**: - Escrever código que lê as informações e metadados de objetos em tempo de execução - Obter nomes de classes em tempo de execução e criar objetos de uma classe ## Habilidade Auxiliar: Front-end - [ ] **Git e GitHub - Fundamentos**: - Criar um repositório - Clonar um repositório - Fazer commit, push e pull de e para o repositório - Reverter um commit - Lidar com merge e conflitos - [ ] **HTTP - Fundamentos**: - Entender a diferença dos verbos HTTP - Testar os requests e ver os status codes no navegador - Saber fazer uma requisição HTTP na linha de comando com WGET - Baixar uma imagem com WGET - Fazer um post - [ ] **JSON**: - Criar um objeto - Transformar em string - Transformar uma string em objeto - Manipular um objeto - [ ] **Linha de comando - Fundamentos**: - Conhecer os principais comandos - [ ] **Cloud - Fundamentos**: - Cloud, ou computação em nuvem é a distribuição de serviços de computação pela Internet usando um modelo de preço pago conforme o uso. Uma nuvem é composta de vários recursos de computação, que abrangem desde os próprios computadores (ou instâncias, na terminologia de nuvem) até redes, armazenamento, bancos de dados e o que estiver em torno deles. Ou seja, tudo o que normalmente é necessário para montar o equivalente a uma sala de servidores, ou mesmo um data center completo, estará pronto para ser utilizado, configurado e executado. - Conhecer a diferença entre IaaS, PaaS e SaaS - Conhecer os maiores provedores de cloud - Especializar-se em algum provedor - [ ] **Contêineres**: - Isolar seu software para funcionar independentemente - Implantar software em clusters - Modularizar seu sistema em pacotes menores - Conhecer a plataforma Docker - Conhecer Kubernetes - [ ] **SQL - Fundamentos**: - Conhecer os comandos mais comuns do SQL - Usar SELECT para consultar uma tabela - Usar INSERT para inserir dados em uma tabela - Usar UPDATE para atualizar uma tabela - Usar DELETE para remover dados de uma tabela - Usar JOIN para conectar os dados de múltiplas tabelas - Conhecer as cláusulas (FROM, ORDER BY, etc) ## Habilidade Auxiliar: Infraestrutura e boas práticas - [ ] **Git e GitHub - Fundamentos**: - Criar um repositório - Clonar um repositório - Fazer commit, push e pull de e para o repositório - Reverter um commit - Lidar com merge e conflitos - [ ] **HTTP - Fundamentos**: - Entender a diferença dos verbos HTTP - Testar os requests e ver os status codes no navegador - Saber fazer uma requisição HTTP na linha de comando com WGET - Baixar uma imagem com WGET - Fazer um post - [ ] **JSON**: - Criar um objeto - Transformar em string - Transformar uma string em objeto - Manipular um objeto - [ ] **Linha de comando - Fundamentos**: - Conhecer os principais comandos - [ ] **Cloud - Fundamentos**: - Cloud, ou computação em nuvem é a distribuição de serviços de computação pela Internet usando um modelo de preço pago conforme o uso. Uma nuvem é composta de vários recursos de computação, que abrangem desde os próprios computadores (ou instâncias, na terminologia de nuvem) até redes, armazenamento, bancos de dados e o que estiver em torno deles. Ou seja, tudo o que normalmente é necessário para montar o equivalente a uma sala de servidores, ou mesmo um data center completo, estará pronto para ser utilizado, configurado e executado. - Conhecer a diferença entre IaaS, PaaS e SaaS - Conhecer os maiores provedores de cloud - Especializar-se em algum provedor - [ ] **Contêineres**: - Isolar seu software para funcionar independentemente - Implantar software em clusters - Modularizar seu sistema em pacotes menores - Conhecer a plataforma Docker - Conhecer Kubernetes - [ ] **SQL - Fundamentos**: - Conhecer os comandos mais comuns do SQL - Usar SELECT para consultar uma tabela - Usar INSERT para inserir dados em uma tabela - Usar UPDATE para atualizar uma tabela - Usar DELETE para remover dados de uma tabela - Usar JOIN para conectar os dados de múltiplas tabelas - Conhecer as cláusulas (FROM, ORDER BY, etc)