├── LICENSE ├── README.md ├── doc ├── 01-instalacao.md ├── 02-ola_mundo.md ├── 03-variaveis_definicao.md ├── 04-variaveis_tipos.md ├── 05-tipos-de-dado.md ├── 06-operadores_aritmeticos.md ├── 06.1-exercicios.md ├── 07-operadores_atribuicao.md ├── 08-operadores_comparacao.md ├── 09-operadores_logicos.md ├── 10-operadores_de_string.md ├── 10.1-brincando_com_strings.md ├── 11-estruturas_de_controle.md ├── 12-if_else_elseif.md ├── 12-while.md ├── 12.1-exercicio_while.md ├── 13-for.md ├── 13.1-exercicio_for.md ├── 14-switch.md ├── 15-array.md ├── 15.1-exercicio_array.md ├── 15.2-array_funcoes.md ├── 15.3-exercicio_array_funcoes.md ├── 16-resolucao_de_exercicios.md ├── 17-functions.md ├── 17.1-exercicio.md ├── 17.2- funcoes_variaveis.md ├── 17.3-funcoes_internas.md ├── 17.4-funcoes_anonimas.md ├── 17.5- arrow_functions.md ├── 17.6-exercicios.md ├── 18-manipulando_arquivos.md ├── 18.1-exercicios.md ├── 18.2-manipulacao_csv.md ├── 18.3-exercicios.md ├── 19-include_require.md ├── 20-function_exists.md ├── 21-exercicios.md ├── 22-orientacao_objetos.md ├── 22.1-exercicios.md └── 23-date_and_time.md ├── documents └── slides-workshop-phpwomenbr.html └── images ├── arquivo-host.png ├── download-php.png ├── exemplo_carro_1.jpg ├── exemplo_carro_2.jpg ├── exemplo_casa.jpg ├── variaveis-ambiente.png └── vsc.png /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Workshop de PHP 2 | PHP é uma das linguagens de programação mais utilizadas na internet, de acordo com o site [W3Tech](https://w3techs.com/) estima-se que aproximadamente 80% da web utiliza PHP. Com ela é possível criar diversos tipos de aplicações como: sites e sistemas diversos. 3 | 4 | Foi criada por Rasmus Lerdof na década de 90 com o objetivo criar uma maneira que permitisse que os usuários pudessem interagir com seu site, deixando mensagem através de formulários personalizados. Para permitir que esta ferramenta crescesse, Rasmus liberou seu código fonte e desde então PHP se tornou cada vez mais poderosa e vem evoluindo a cada nova versão. 5 | 6 | PHP é um software livre, ou seja, está disponível para ser utilizada gratuitamente e você pode consultar sua documentação no site [php.net](https://www.php.net/). Além disso, ela não te limita a um sistema operacional, ela pode ser usada em qualquer um, proporcionando assim, mais liberdade. 7 | 8 | Grandes empresas e aplicativos utilizam a linguagem como: Facebook, WordPress, Slack, The New York Times, NextCloud, Wikipedia etc. 9 | 10 | Vamos começar? 11 | 12 | - [Instalação](doc/01-instalacao.md) 13 | - [Olá mundo](doc/02-ola_mundo.md) 14 | - [Variáveis](doc/03-variaveis_definicao.md) 15 | - [Variáveis tipos](doc/04-variaveis_tipos.md) 16 | - [Tipos de dado](doc/05-tipos-de-dado.md) 17 | - [Operadores](https://github.com/DaianeAlvesRJ/workshop-php/blob/master/README.md) 18 | - [Operadores aritméticos](doc/06-operadores_aritmeticos.md) 19 | - [Exercício](doc/06.1-exercicios.md) 20 | - [Operadores de atribuição](doc/07-operadores_atribuicao.md) 21 | - [Operadores de comparação](doc/08-operadores_comparacao.md) 22 | - [Operadores lógicos](doc/09-operadores_logicos.md) 23 | - [Operadores de string](doc/10-operadores_de_string.md) 24 | - [Brincando com string](doc/10.1-brincando_com_strings.md) 25 | - [Estruturas de controle](doc/11-estruturas_de_controle.md) 26 | - [if, else e elseif](doc/12-if_else_elseif.md) 27 | - [while](doc/12-while.md) 28 | - [Exercício](doc/12.1-exercicio_while.md) 29 | - [for](doc/13-for.md) 30 | - [Exercício](doc/13.1-exercicio_for.md) 31 | - [switch](doc/14-switch.md) 32 | - [Array](doc/15-array.md) 33 | - [Exercício](doc/15.1-exercicio_array.md) 34 | - [Manipulacao de array](doc/15.2-array_funcoes.md) 35 | - [Exercício manipulação de array](doc/15.3-exercicio_array_funcoes.md) 36 | - Exercícios 37 | - [Revisão de conteúdo](doc/16-resolucao_de_exercicios.md) 38 | - [Functions](doc/17-functions.md) 39 | - [Exercício](doc/17.1-exercicio.md). 40 | - [Funcoes Variaveis](doc/17.2-%20funcoes_variaveis.md) 41 | - [Funcoes internas](doc/17.3-funcoes_internas.md). 42 | - [Funcoes anonimas](doc/17.4-funcoes_anonimas.md) 43 | - [Arrow functions](doc/17.5-%20arrow_functions.md). 44 | - [Exercícios](doc/17.6-exercicios.md) 45 | - [Manipulação de arquivos](doc/18-manipulando_arquivos.md) 46 | - [Exercícios](doc/18.1-exercicios.md) 47 | - [Manipulação de arquivos CSV](doc/18.2-manipulacao_csv.md) 48 | - [Exercícios](doc/18.3-exercicios.md) 49 | - [Include - Require](doc/19-include_require.md) 50 | - [Function_exists](doc/20-function_exists.md) 51 | - [Exercícios](doc/21-exercicios.md) 52 | - [Orientação a objetos](doc/22-orientacao_objetos.md) 53 | 54 | **OBS**: Para imprimir os arquivos em .pdf e ajudar ainda mais nos seus estudos, siga os passos abaixo: 55 | 56 | - Baixe o repositorio para seu computador 57 | - Abra o site: https://dillinger.io/ 58 | - Clique na opção Import From no canto superior direito e clique em Markdown File 59 | - Selecione o repositorio que deseja imprimir, ele estara no caminho (\workshop-php-master\doc) 60 | - Após abir no mesmo menu usado anteriormente acesse Export As > PDF 61 | - Agora é só repetir os passos para todas as paginas que quiser imprimir 62 | - Com todos os arquivos já em pdf, somente imprimir com o visualizador de pdf que mais lhe agradar! 63 | -------------------------------------------------------------------------------- /doc/01-instalacao.md: -------------------------------------------------------------------------------- 1 | # Instalação 2 | 3 | ## Linux 4 | Instalar o PHP no Linux é muito simples! Você deve primeiro abrir o terminal. Para isso você pode pesquisar nos seus programas instalados ou se preferir com o seguinte atalho: 5 | ctrl + alt + t 6 | 7 | Com o terminal aberto digite: 8 | 9 | ```bash 10 | sudo apt install php 11 | ``` 12 | ###### Obs.: em um sistema baseado em Debian usa-se apt para instalar pacotes. 13 | 14 | Desta forma o PHP será instalado no seu computador. 15 | 16 | Para conferir a versão instalada digite: 17 | 18 | ```bash 19 | php -v 20 | ``` 21 | 22 | Pronto! O PHP está pronto para ser utilizado. 23 | 24 | ## MAC 25 | Instando PHP no MAC - via Macports 26 | 27 | O projeto MacPorts é uma iniciativa da comunidade de código aberto para projetar um sistema fácil de usar para compilar, instalar e atualizar softwares por linha de comando. 28 | 29 | Você pode instalar o php em diferentes versões : php5.4, php5.5, php5.6, php7.0, php7.1, php7.2 ou php7.3 usando o comando port install, como no exemplo abaixo: 30 | 31 | ```bash 32 | sudo port install php56 33 | sudo port install php73 34 | ``` 35 | 36 | Você pode utilizar o comando select para trocar a versão ativa do PHP: 37 | 38 | ```bash 39 | sudo port select --set php php73 40 | ``` 41 | 42 | ## Windows 43 | 44 | ### Download do PHP 45 | 46 | Acesse https://windows.php.net/download/ e faça o download da versão mais recente do PHP correspondente para seu Window (x86 ou x64). Existem versões: *Thread Safe(TS)* ou *Non Thread Safe(NTS)*. Isso diz respeito a questões internas do PHP, mas para desenvolvimento escolha a *Non Thread Safe(NTS)*. 47 | 48 | 49 | 50 | 51 | 52 | 53 | Após o download, descompacte o arquivo *.zip* na partição principal do seu computador (normalmente *C:*) e renomeie a pasta para simplesmente *php*. 54 | 55 | ### Download e instalação Microsoft Visual C++ 56 | 57 | Será preciso também fazer o dowload e instalação da últmia versão do *Microsoft Visual C++* (o PHP precisa dele para ser executado em Windows). Acesse https://support.microsoft.com/pt-br/help/2977003/the-latest-supported-visual-c-downloads e faça o download da versão mais recente do *Visual C++* correspondente para seu Window (x86 ou x64). 58 | 59 | 60 | 61 | 62 | 63 | ### Configurações do PHP 64 | 65 | Para o PHP funcionar corretamente, precisamos ativar suas configurações padrões. Dentro da pasta descompactada no *C:* existem dois arquivos de configurações: *php.ini-development* e *php.ini-production*. Estes dois arquivos apresentam configurações para rodar o PHP em modo de produção (mais adequado quando se hospeda uma aplicação em um servidor na internet) ou em modo desenvolvimento que é adequado para se desenvolver aplicações PHP, pois com isso ativamos o controle de erros e debug da aplicação. Como estamos em ambiente de desnvolvimento renomeie o arquivo *php.ini-development* para somente *php.ini*. 66 | 67 | ### Variáveis do sistema 68 | 69 | Agora vamos editar as variáveis do sistema para a pasta do php ser encontrada. Abra o *Painel de Controle*, vá em *Sistema*, selecione a guia *Avançado*, depois clique em *Variáveis de ambiente*. Na seção *Variáveis do sistema*, selecione *Path* e clique em *Editar*. Em *Valor da variável*, vá até o final do campo de texto, agora iremos colocar o caminho onde o nosso PHP está, acrescente antes um ; (ponto e vírgula) para finalizar os caminhos anteriores e coloque *c:\php*,. Clique em *Ok* em todas as janelas para confirmar a alteração. 70 | 71 | 72 | 73 | 74 | 75 | ### Arquivo hosts 76 | Agora temos que configurar o arquivo de hosts para apontar o nome *localhost* para *127.0.0.1*. 77 | 78 | Abra vá até a pasta *C:\Windows\System32\drivers\etc* e abra o arquivo *hosts* com um editor de texto. Agora verifique se existe a linha *127.0.0.1 localhost*, se existir está pronto, senão acrescente-a ao final do arquivo, salve e feche o programa. 79 | 80 | 81 | 82 | 83 | 84 | Reinicie sua máquina. 85 | 86 | Abra o terminal de sua preferência e digite: 87 | 88 | ```bash 89 | php --version 90 | ``` 91 | 92 | Se logo em seguida você ver uma mensagem com a versão do PHP instalada, então ocorreu tudo bem. 93 | 94 | [Voltar a página inicial](../README.md) 95 | -------------------------------------------------------------------------------- /doc/02-ola_mundo.md: -------------------------------------------------------------------------------- 1 | # Olá, mundo! 2 | 3 | O php possui um modo interativo e com ele vamos executar nosso primeiro programa. Com o terminal aberto digite o seguinte comando: 4 | 5 | ```bash 6 | php -a 7 | ``` 8 | Digite: `echo "Olá, mundo";` e pressione enter. 9 | 10 | Pronto! Assim o seu código será executado. 11 | 12 | Para sair do modo interativo do PHP, digite: `ctrl + c`. 13 | 14 | ## Criando arquivos PHP 15 | 16 | Você também pode criar um arquivo de texto e executá-lo no terminal! Recomendamos o uso do [Visual Studio Code](https://code.visualstudio.com/download) ou [Codium](https://vscodium.com/). 17 | 18 | Depois disso, abra o seu editor de texto e vamos fazer o "Olá, mundo!" nele. 19 | 20 | Todo arquivo PHP deve começar com a seguinte abertura de tag : 21 | 22 | ```php 23 | **Importante!** É recomendável que você esteja na raiz do projeto para executá-lo. 41 | 42 | Muito fácil, não é mesmo?! 43 | 44 | [Voltar a página inicial](../README.md) 45 | -------------------------------------------------------------------------------- /doc/03-variaveis_definicao.md: -------------------------------------------------------------------------------- 1 | # Variáveis 2 | 3 | Variáveis são espaços reservados na memória para armazenar dados. O conteúdo atribuído a uma variável, como o próprio nome diz, pode mudar sempre que necessário. Como a linguagem é fracamente tipada, não é necessário informar o tipo de dado na declaração. 4 | As variáveis são representadas por um cifrão (`$`) seguido de um nome. 5 | 6 | Exemplo: 7 | ```php 8 | $meu_nome = "Ana"; 9 | ``` 10 | No exemplo acima estamos definindo uma variável chamada $meu_nome e ela está recebendo "Ana". 11 | 12 | ## Nomeação de variáveis 13 | 14 | É necessário ser feita respeitando algumas regras: 15 | 16 | 1. Não iniciar com números. 17 | 2. Não utilizar espaços em branco. 18 | 3. Não utilizar caracteres especiais, somente underline. 19 | 4. Pode ser declarada em minúsculo. 20 | 5. Pode ser usada em CamelCase. 21 | 22 | Exemplo: 23 | 24 | ```php 25 | $DataAniversario // uso de CamelCase 26 | $dataAniversario // primeira minúscula e segunda maiúscula 27 | $data_aniversario // uso de underline 28 | ``` 29 | 30 | > Como PHP é uma linguagem case sensitive, `$nomeum` é diferente de `$nomeUm`. 31 | 32 | [Voltar a página inicial](../README.md) 33 | -------------------------------------------------------------------------------- /doc/04-variaveis_tipos.md: -------------------------------------------------------------------------------- 1 | # Tipos de dados 2 | 3 | Em PHP temos dez tipos de dados primitivos: 4 | - integer (números inteiros) 5 | - float (número de ponto flutuante, ou também double) 6 | - string (texto que escrevemos entre aspas) 7 | - boolean (verdadeiro ou falso) 8 | 9 | - array 10 | - object 11 | - callable 12 | - interable 13 | 14 | - resource 15 | - NULL 16 | 17 | ## Exemplo de variáveis: 18 | ```php 19 | Nota: Para checar o tipo e valor de uma expressão, utilize a função var_dump(). 40 | 41 | [Voltar a página inicial](../README.md) 42 | -------------------------------------------------------------------------------- /doc/06-operadores_aritmeticos.md: -------------------------------------------------------------------------------- 1 | # Operadores 2 | 3 | Os operadores são utilizados para manipular os dados ou expressões em um programa. 4 | Podemos ter operadores aritméticos, atribuição, comparação entre outros. Para conferir todos os tipos de operadores disponíveis no php consulte o [Manual do PHP](https://www.php.net/manual/pt_BR/language.operators.php). 5 | 6 | ## Operadores aritméticos 7 | 8 | Todo mundo já usou operadores aritméticos na escola! Nos primeiros anos de estudo aprendemos a fazer contas de soma, subtração, multiplicação e divisão. Em php eles também são simples e têm a mesma simbologia em todas as linguagens de programação ( +, -, * e / ). 9 | 10 | Além desses mais simples, tem outro que não recebe muita atenção e pode ser que você não o conhece que é o módulo (%). Ele serve para calcular o resto da divisão de um número. 11 | 12 | ### Exemplo módulo 13 | 14 | ```php 15 | $b` | Diferente| Verdadeiro se $a não é igual a $b. | 11 | | `$a < $b` | Menor que | Verdadeiro se $a é menor que $b. | 12 | | `$a > $b` | Maior que | Verdadeiro se $a é estritamente maior que $b. | 13 | | `$a <= $b` | Menor ou igual | Verdadeiro se $a é menor ou igual a $b. | 14 | | `$a >= $b` | Maior ou igual | Verdadeiro se $a é maior ou igual a $b. | 15 | 16 | ## Exemplos 17 | ```php 18 | true 20 | var_dump("1" == "01"); // 1 == 1 -> true 21 | var_dump("10" < "3"); // 10 < 3 -> false 22 | var_dump(100 >= "100"); // 100 >= 100 -> true 23 | var_dump( 2 >= '2'); // 2 >= 100 -> true 24 | var_dump( 'Olá, mundo' == 'Olá, Mundo'); // Olá, mundo == Olá, Mundo -> false 25 | var_dump( 'Olá, mundo' == 'Olá, mundo'); // Olá, mundo == Olá, mundo -> true 26 | ``` 27 | 28 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/09-operadores_logicos.md: -------------------------------------------------------------------------------- 1 | # Operadores lógicos 2 | 3 | Foi criado por GeorgeBoole(1815-1864), são a base dos computadores digitais e permitem combinar ou excluir termos, como palavras-chave levando a resultados mais precisos em buscas. 4 | 5 | A seguir a tabela de operadores lógicos: 6 | 7 | | Exemplo | Nome | Resultado | 8 | |-------- |:-------------------|:--------| 9 | | `$a and $b` | E | Verdadeiro (TRUE) se tanto $a quanto $b são verdadeiros. | 10 | | `$a or $b` | OU | Verdadeiro se $a ou $b são verdadeiros. | 11 | | `$a xor $b` | XOR | Verdadeiro se $a ou $b são verdadeiros, mas não ambos. | 12 | | `! $a` | NÃO | Verdadeiro se $a não é verdadeiro. | 13 | | `$a && $b` | E| Verdadeiro se tanto $a quanto $b são verdadeiros. | 14 | | $a || $b | OU| Verdadeiro se $a ou $b são verdadeiros. | 15 | 16 | Exemplo 17 | 18 | ```php 19 | $b) { 14 | echo "a é maior que b"; 15 | } 16 | ``` 17 | # Else 18 | 19 | Caso a condição do if não seja satisfeita podemos utilizar o else. Veja o exemplo: 20 | 21 | ```php 22 | $b) { 28 | echo "a é maior que b"; 29 | } else { 30 | echo "a NÃO é maior que b"; 31 | } 32 | ``` 33 | 34 | Caso a condição do if não seja satisfeita utilizando o else, também podemos criar várias condições usando elseif. Elseif, como o nome sugere, é uma combinação do if e else. Entretanto, diferentemente do else, executará uma expressão alternativa somente se a expressão condicional do elseif for avaliada como TRUE. 35 | Podemos ter vários elseif, porém só um else. Veja: 36 | 37 | ```php 38 | $b) { 44 | echo "a é maior que b"; 45 | } elseif ($a == $b) { 46 | echo "a é igual a b"; 47 | } else { 48 | echo "a é menor que b"; 49 | } 50 | ``` 51 | 52 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/12-while.md: -------------------------------------------------------------------------------- 1 | # While 2 | O while é uma estrutura de repetição que possui uma condição para poder ser executada. Ele estabelece um laço de repetição do seu bloco de comandos, até que a condição seja satisfeita. 3 | No exemplo a seguir estamos imprimindo de 1 até 10. 4 | 5 | ## Exemplo 1 6 | ```php 7 | “, onde a esquerda teremos o nome da chave e a direita o valor da chave. 54 | 55 | Exemplo: 56 | ```php 57 | 'Joana', 60 | 'sobrenome' => 'Silva', 61 | 'idade' => '23' 62 | ]; 63 | var_dump($pessoa); 64 | ``` 65 | Para exibir os dados de uma maneira mais legível podemos acrescentar o código abaixo: 66 | 67 | ```php 68 | 'Joana', 71 | 'sobrenome' => 'Silva', 72 | 'idade' => '23' 73 | ]; 74 | var_dump($pessoa); 75 | 76 | echo 'Nome: ' . $pessoa['nome'] . PHP_EOL; 77 | echo 'Sobrenome: ' . $pessoa['sobrenome'] . PHP_EOL; 78 | echo 'Idade: ' . $pessoa['idade'] . PHP_EOL; 79 | ``` 80 | 81 | Se vários elementos na declaração do array utilizam a mesma chave, apenas o último será utilizado, enquanto todos os outros serão sobrescritos. 82 | 83 | ```php 84 | 'a', 87 | '1' => 'b', 88 | 1.5 => 'c', 89 | true => 'd', 90 | ]; 91 | var_dump($array); 92 | ``` 93 | O exemplo acima irá imprimir: 94 | ```php 95 | array(1) { 96 | [1]=> 97 | string(1) "d" 98 | } 99 | ``` 100 | Como todas as chaves do exemplo acima foram convertidas para 1, o valor será sobrescrito a cada novo elemento e o valor final atribuído "d", será o único que restará. 101 | 102 | ## Misturando inteiro e string 103 | As chaves dos arrays no PHP podem conter, ao mesmo tempo, inteiro e string, por que o PHP não faz distinção entre arrays indexados e associativos. 104 | 105 | ```php 106 | 'Gol', 109 | 'animal' => 'Gato', 110 | 100 => -100, 111 | -100 => 100, 112 | ]; 113 | var_dump($array); 114 | ``` 115 | O exemplo acima irá imprimir: 116 | 117 | ```php 118 | array(4) { 119 | ['carro']=> 120 | string(3) 'Gol' 121 | ['animal']=> 122 | string(4) 'Gato' 123 | [100]=> 124 | int(-100) 125 | [-100]=> 126 | int(100) 127 | } 128 | ``` 129 | A chave é opcional. Se não for especificada, o PHP utilizará o incremento da chave do tipo inteiro com maior valor utilizado. 130 | 131 | ## Arrays indexados sem chaves 132 | 133 | ```php 134 | 143 | string(6) "banana" 144 | [1]=> 145 | string(4) "maçã" 146 | [2]=> 147 | string(5) "hello" 148 | [3]=> 149 | string(5) "world" 150 | } 151 | ``` 152 | ## Chaves em alguns elementos 153 | 154 | É possível especificar a chave somente para alguns elementos e omití-las para outros: 155 | ```php 156 | 'c', 161 | 'd', 162 | ]; 163 | var_dump($array); 164 | ``` 165 | 166 | O exemplo acima irá imprimir: 167 | 168 | ```php 169 | array(4) { 170 | [0]=> 171 | string(1) "a" 172 | [1]=> 173 | string(1) "b" 174 | [6]=> 175 | string(1) "c" 176 | [7]=> 177 | string(1) "d" 178 | } 179 | ``` 180 | Como pode ver, o último valor "d" foi atribuído a chave 7. Isso acontece porque a chave com maior inteiro antes dela era 6. 181 | 182 | ## Acessando elementos do array 183 | 184 | Elementos do array podem ser acessados utilizando a sintaxe `array[chave]`. 185 | ```php 186 | 'bar', 189 | 42 => 24, 190 | 'multi' => [ 191 | 'dimensional' => [ 192 | 'array' => 'foo' 193 | ] 194 | ] 195 | ]; 196 | 197 | 198 | var_dump($array['foo']); 199 | var_dump($array[42]); 200 | var_dump($array['multi']['dimensional']['array']); 201 | ``` 202 | 203 | O exemplo acima irá imprimir: 204 | ```php 205 | string(3) "bar" 206 | int(24) 207 | string(3) "foo" 208 | ``` 209 | Nota: 210 | Tanto colchetes quanto chaves podem ser utilizados para acessar elementos de um array (por exemplo, `$array[42]` e `$array{42}` irão fazer a mesma coisa que o exemplo anterior). 211 | 212 | ## Criando/modificando com a sintaxe de colchetes 213 | 214 | Você pode modificar um array existente atribuindo valores a ele. 215 | 216 | ```php 217 | $arr[chave] = valor; 218 | $arr[] = valor; 219 | // chave pode ser tanto um integer quanto uma string 220 | // valor pode ser qualquer valor de qualquer tipo 221 | ``` 222 | Se ainda $arr não existir, será criado, servindo como alternativa para criação de um array. 223 | 224 | Para mudar um certo valor, apenas atribua um novo valor para um elemento especificado por sua chave. Se você quiser remover um par chave/valor, você precisa aplicar a função unset() nele. 225 | ```php 226 | 1, 12 => 2); 228 | 229 | $arr[] = 56; // Isto é o mesmo que $arr[13] = 56; 230 | // nesse ponto do script 231 | 232 | $arr["x"] = 42; // Isto acrescenta um novo elemento 233 | // para o array com a chave "x" 234 | 235 | unset($arr[5]); // Isto remove um elemento do array 236 | 237 | unset($arr); // E isto apaga todo o array 238 | ``` 239 | ## Como percorrer um array 240 | 241 | O construtor foreach fornece uma maneira fácil de iterar sobre arrays. O foreach funciona somente em arrays e objetos. Possui duas sintaxes: 242 | 243 | ```php 244 | foreach (array_expression as $value) 245 | statement 246 | foreach (array_expression as $key => $value) 247 | statement 248 | ``` 249 | 250 | A primeira forma, itera sobre o array trazendo somente o valor e a segunda tras a chave e o valor. 251 | 252 | Para modificar diretamente elementos de um array dentro de um laço atribua um novo valor a cada iteração. 253 | 254 | ```php 255 | $value) { 258 | $arr[$key] = $value * 2; 259 | } 260 | var_dump($arr); 261 | // $arr is now array(2, 4, 6, 8) -------------------------------------------------------------------------------- /doc/15.1-exercicio_array.md: -------------------------------------------------------------------------------- 1 | # Exercício 2 | 1. Crie um programa em PHP que preencha um array `A` com 10 elementos (índices de 0 a 9) com os números inteiros 10, 20, 30, 40, ... , 100. 3 | Imprima o vetor `A` após o seu preenchimento. 4 | Veja a representação abaixo: 5 | 6 | |0|1|2|3|4|5|6|7|8|9| 7 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|---:| 8 | |10|20|30|40|50|60|70|80|90|100| 9 | 10 | > **Obs**: Utilize estrutura de repetição para preencher o array. 11 | 12 | 2. Crie um programa em PHP que preencha dois arrays `A` e `B`, conforme pares ou ímpares, sendo: 13 | 1. `A` o vetor de números pares 14 | 2. `B` o vetor de números ímpares 15 | 16 | > **Obs**: Utilize estrutura de repetição para preencher o array. 17 | 18 | > **Dica**: Utilize o operador módulo (`%`) para verificar o resto de uma divisão. 19 | 20 | Vetor `A`: 21 | |0|1|2|3| 22 | |---|:---:|:---:|---:| 23 | |2|4|6|8| 24 | 25 | Vetor `B`: 26 | |0|1|2|3| 27 | |---|:---:|:---:|---:| 28 | |1|3|5|7| 29 | 30 | [Voltar a página inicial](../README.md) 31 | -------------------------------------------------------------------------------- /doc/15.2-array_funcoes.md: -------------------------------------------------------------------------------- 1 | # Funções para manipular arrays 2 | 3 | O PHP oferece de forma nativa mais de 81 funções para manipular arrays. Essas funções permitem diversas operações. Vamos ver ao longo deste capítulo alguns exemplos. Para conhecer todas as funções de manipulação de array disponíveis no PHP, consulte o [manual do PHP](https://www.php.net/manual/en/ref.array.php). 4 | 5 | ## Contando os elementos de um array 6 | Algumas vezes é necessário contar os elementos de um array, para isso podemos utilizar a função a função `count()`, ela retorna o número de posições do array. 7 | 8 | ```php 9 | banana 33 | [1] => maçã 34 | [2] => laranja 35 | [3] => limão 36 | [4] => uva 37 | ) 38 | ``` 39 | Repare que os novos elementos foram acrescentados no final do array. 40 | 41 | ### Adicionar um elemento no início do array 42 | A função `array_unshift()` adiciona os elementos passados como argumentos no início de array.Veja o exemplo: 43 | 44 | ```php 45 | melancia 55 | [1] => morango 56 | [2] => laranja 57 | [3] => banana 58 | ) 59 | ``` 60 | ## Remover o primeiro elemento de um array 61 | 62 | A função `array_shift()` retira o primeiro elemento de array. Todas as chaves numéricas são alteradas para começar a contar a de 0 (zero), enquanto chaves string permanecerão inalteradas. Veja o exemplo: 63 | 64 | ```php 65 | banana 75 | [1] => melancia 76 | [2] => morango 77 | ) 78 | ``` 79 | E laranja seria passado para $fruta. 80 | 81 | ### Remover o último elemento do array 82 | A função `array_pop()` extrai e retorna o último elemento de array, diminuindo array em um elemento. Veja o exemplo: 83 | 84 | ```php 85 | laranja 95 | [1] => banana 96 | [2] => melancia 97 | ) 98 | ``` 99 | E morango será passado para `$fruta`. 100 | 101 | ## Ordenação de arrays 102 | 103 | Os elementos contidos em um array podem ser ordenados, em ordem alfabética ou numérica e de forma crescente, ou decrescente. Para isso, utilizamos as funções envolvendo `sort`. 104 | 105 | ### Ordenando os elementos de forma crescente 106 | 107 | Podemos utilizar tanto para organizar de forma crescente alfabética, como numérica a função `sort()`. 108 | 109 | Veja no exemplo abaixo um array com valores em strings. Vamos então ordenar de forma crescente. 110 | 111 | ```php 112 | $valor) { 121 | echo "frutas[" . $chave . "] = " . $valor . PHP_EOL; 122 | } 123 | ``` 124 | O exemplo acima irá imprimir. 125 | ```php 126 | frutas[0] = banana 127 | frutas[1] = laranja 128 | frutas[2] = limão 129 | frutas[3] = maçã 130 | ``` 131 | ### Ordenando os elementos de forma decrescente 132 | 133 | Ao contrário da função sort(), podemos organizar nosso array em ordem decrescente. Para isso basta utilizar a função rsort(). Vamos usar o mesmo exemplo anterior só que dessa vez, usaremos a função `rsort()`. 134 | 135 | ```php 136 | $valor) { 145 | echo "frutas[" . $chave . "] = " . $valor . PHP_EOL; 146 | } 147 | ``` 148 | O exemplo acima irá imprimir. 149 | ```php 150 | frutas[0] = maçã 151 | frutas[1] = limão 152 | frutas[2] = laranja 153 | frutas[3] = banana 154 | ``` 155 | 156 | ### Ordenando uma array com chaves personalizadas através do valor de forma crescente 157 | 158 | Usamos a função `asort()` para ordenar o array em ordem crescente, de acordo com o valor. Veja o exemplo: 159 | 160 | ```php 161 | 'limao', 'a' => 'laranja', 'b' => 'banana', 'c' => 'melancia']; 163 | 164 | asort($frutas); 165 | 166 | foreach( $frutas as $chave => $valor ){ 167 | echo "$chave = $valor" . PHP_EOL; 168 | } 169 | ``` 170 | O exemplo acima irá imprimir: 171 | ```php 172 | b = banana 173 | a = laranja 174 | d = limao 175 | c = melancia 176 | ``` 177 | Repare que as frutas foram ordenadas na ordem alfabética, e os índices associados a cada valor foram mantidos. 178 | 179 | ### Ordenando um array com chaves personalizadas através do valor de forma decrescente 180 | 181 | A função `arsort()` ordena um array de forma que a correlação entre índices e valores é mantida. É usada principalmente para ordenar arrays associativos onde a ordem dos elementos é um fator importante. Veja o exemplo: 182 | 183 | ```php 184 | 'limao', 'a' => 'laranja', 'b' => 'banana', 'c' => 'melancia']; 186 | 187 | arsort($frutas); 188 | 189 | foreach( $frutas as $chave => $valor ){ 190 | echo "$chave = $valor" . PHP_EOL; 191 | } 192 | ``` 193 | O exemplo acima irá imprimir: 194 | 195 | ```php 196 | c = melancia 197 | d = limao 198 | a = laranja 199 | b = banana 200 | ``` 201 | 202 | ### Ordenando um array com chaves personalizadas através da Chave de forma crescente 203 | 204 | A função `ksort()` ordena um array pelas chaves, mantendo a correlação entre as chaves e os valores. Essa função é bastante útil principalmente para arrays associativos. Veja o exemplo: 205 | 206 | ```php 207 | 'limao', 'a' => 'laranja', 'b' => 'banana', 'c' => 'melancia']; 209 | 210 | ksort($frutas); 211 | 212 | foreach( $frutas as $chave => $valor ){ 213 | echo "$chave = $valor" . PHP_EOL; 214 | } 215 | ``` 216 | O exemplo acima irá imprimir: 217 | 218 | ```php 219 | a = laranja 220 | b = banana 221 | c = melancia 222 | d = limao 223 | ``` 224 | ### Ordenando um array com chaves personalizadas através da Chave de forma decrescente 225 | 226 | A função `krsort()` ordena um array pelas chaves em ordem descrescente, mantendo a correlação entre entre as chaves e os valores. Essa função é bastante útil em arrays associativos. Veja o exemplo: 227 | 228 | ```php 229 | 'limao', 'a' => 'laranja', 'b' => 'banana', 'c' => 'melancia']; 231 | 232 | krsort($frutas); 233 | 234 | foreach( $frutas as $chave => $valor ){ 235 | echo "$chave = $valor" . PHP_EOL; 236 | } 237 | ``` 238 | O exemplo acima irá imprimir: 239 | 240 | ```php 241 | d = limao 242 | c = melancia 243 | b = banana 244 | a = laranja 245 | ``` 246 | 247 | ## Removendo elementos do array 248 | Às vezes, é comum que array possua valores repetidos, principalmente se ela for muito grande. Você pode filtrar os elementos que se repetem utilizando a função `array_unique()`. Dessa forma, teremos como resultado uma nova array onde todos os elementos repetidos serão removidos, permanecendo na ordem apenas o que apareceu na primeira chave de mesmo valores. Veja o exemplo: 249 | 250 | ```php 251 | "verde", "vermelho", "b" => "verde", "azul", "vermelho"); 253 | $result = array_unique($input); 254 | print_r($result); 255 | ``` 256 | O exemplo acima irá imprimir: 257 | 258 | ```php 259 | Array 260 | ( 261 | [a] => verde 262 | [0] => vermelho 263 | [1] => azul 264 | ) 265 | ``` 266 | 267 | ## Diferença entre arrays 268 | 269 | Para comparar a diferença entre arrays você pode utilizar a função `array_dif()`. Veja o exemplo: 270 | 271 | ```php 272 | "verde", "vermelho", "azul", "vermelho"]; 274 | $array2 = ["b" => "verde", "amarelo", "vermelho"]; 275 | $result = array_diff($array1, $array2); 276 | 277 | print_r($result); 278 | ``` 279 | Isto irá mostrar: 280 | 281 | Array 282 | ( 283 | [1] => azul 284 | ) 285 | 286 | 287 | ## Retornar as chaves de um array 288 | 289 | A função `array_keys()` retorna todas as chaves de um array desde que sejam dos tipos: **numérica** ou **string**. 290 | 291 | Veja os exemplos: 292 | 293 | ```php 294 | 100, "cor" => "vermelho"]; 296 | print_r(array_keys($array)); 297 | 298 | $array = ["azul", "vermelho", "verde", "azul", "azul"]; 299 | print_r(array_keys($array, "azul")); 300 | 301 | $array = ["1", 1, 1, 1, "1"]; 302 | print_r(array_keys($array, "1","===")); 303 | ``` 304 | 305 | O exemplo acima irá imprimir: 306 | 307 | Array 308 | ( 309 | [0] => 0 310 | [1] => cor 311 | ) 312 | Array 313 | ( 314 | [0] => 0 315 | [1] => 3 316 | [2] => 4 317 | ) 318 | Array 319 | ( 320 | [0] => 0 321 | [1] => 4 322 | ) 323 | 324 | ## Verificar a existência de uma chave no array 325 | 326 | Podemos utilizar a função `array_key_exists()` para verificar a existência de uma chave no array. 327 | 328 | Ela possui dois parâmetros: 329 | 330 | 1. `key`: Valor para verificar. 331 | 332 | 2. `array`: Um array com chaves para verificar. 333 | 334 | Exemplo: 335 | ```php 336 | 1, 339 | "segundo" => 4]; 340 | 341 | if (array_key_exists("primeiro", $busca_array)) { 342 | echo "O elemento 'primeiro' está no array!"; 343 | } 344 | ``` 345 | 346 | **OBS:** A função `isset()` também pode ser utilizada para verificar a existência de uma chave porém, não retorna `TRUE` para valores de chave que correspondam a um valor NULL, enquanto que `array_key_exists()` retorna. 347 | 348 | ## Verificar se um elemento existe no array 349 | 350 | Para checar se um valor existe em um array, podemos utilizar a função `in_array()`. Ela retorna **TRUE** em caso positivo e **FALSE** em caso negativo. 351 | 352 | Exemplo: 353 | ```php 354 | morango 403 | [1] => melancia 404 | [2] => banana 405 | [3] => laranja 406 | ) 407 | 408 | ``` 409 | 410 | ## Somando os elementos do array 411 | 412 | A função `array_sum()` calcula a soma dos elementos de um array. Veja o exemplo: 413 | 414 | ```php 415 | Fórmula: ((F – 32) * 5) / 9 8 | 9 | ## Strings 10 | 3. Crie um programa em PHP que receba nome e sobrenome de uma pessoa. Em seguida, imprima-os concatenados. Veja o exemplo: 11 | `Nome: PHPWomen` 12 | `Sobrenome: BR` 13 | > Neste caso vamos imprimir: PHPWomen BR 14 | 15 | 4. Verifique quantos caracteres o nome inteiro da questão anterior possui. Imprima-o todo em letras maiúsculas. 16 | 17 | ## Estruturas condicionais 18 | 5. Crie um programa em PHP que receba duas notas, calcule a média e mostre para o usuário. Se a média for maior ou igual a 6, imprima "Aluno aprovado". Se a média for menor que 6, exiba "Prova final". 19 | 20 | 6. Crie um programa em PHP que receba a idade de uma pessoa e informe se é maior ou menor de idade. 21 | 22 | 7. Crie um programa em PHP com uma lista de estados (ex.: RJ, SP, MG). Se este estado for SP, escreva Paulista, se RJ, escreva Carioca, se MG, escreva Mineiro. Caso seja outro estado, escreva Outro Estado. 23 | > Dica: Utilize o comando `switch`. 24 | 25 | 8. Crie um programa em PHP que o usuário escolha uma operação (soma, subtração, multiplicação ou divisão) e receba 2 números. Realize a operação escolhida e mostre o resultado, como em uma calculadora. 26 | > Dica: Utilize o comando `switch`. 27 | 28 | ## Estruturas de repetição 29 | 9. Crie um programa em PHP que mostre os números de 0 a 20, de 2 em 2. 30 | 31 | 10. Crie um programa em PHP que receba dois números inteiros e imprima os números inteiros que estão no intervalo entre eles. 32 | 33 | ## Arrays 34 | 11. Crie um programa em PHP que contenha um array com 10 elementos inteiros. Depois, troque todos os valores negativos do array por 0. Após as trocas, imprima o array. 35 | 36 | 12. Crie um programa em PHP que mostre um array com três estados e suas capitais. Veja o exemplo: 37 | `'SP' => 'São Paulo'` 38 | 39 | > Vamos imprimir o seguinte resultado: 40 | ``` bash 41 | A capital de SP é São Paulo 42 | A capital de RJ é Rio de Janeiro 43 | A capital de MG é Belo Horizonte 44 | ``` 45 | 46 | 13. Crie um programa em PHP ordene o seguinte array em ordem decrescente. 47 | 48 | |0|1|2|3|4| 49 | |---|:---:|:---:|:---:|---:| 50 | |2|4|1|5|3| 51 | 52 | 14. Utilize uma função em PHP para contar quantos valores possui o array da questão anterior. 53 | 54 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/17-functions.md: -------------------------------------------------------------------------------- 1 | # Functions 2 | 3 | Uma função é um bloco de código identificado por um nome, que executa uma tarefa específica e que pode ser referenciada a partir de várias partes do código. Um exemplo bastante conhecido de função é na própria matemática. Vamos relembrar... 4 | 5 | ``` 6 | f(x) = x * 2 7 | f(3) = 3 * 2 = 6 8 | ``` 9 | 10 | Imagine que você está trabalhando num sistema em que é necessário multiplicar dois números. Caso essa operação seja realizada repetidas vezes dentro código, então ela pode ser implementada dentro de uma função que será invocada sempre que for necessário realizar a multiplicação. 11 | 12 | Além disso, você pode utilizar `functions` para realizar diversos tipos de operações como por exemplo: 13 | 14 | - Somar dois números, 15 | - Verificar se é um CPF está correto 16 | - Verificar se um valor de uma variável é válido 17 | - Transformar letras maiúsculas em minúsculas... 18 | 19 | ## Sintaxe 20 | 21 | A declaração de funções no PHP é feita a partir da palavra reservada `function`, seguida do nome da função e de sua **lista de argumentos**, enquanto o corpo da função é delimitado por chaves `{ }`, entre as quais ficarão as instruções a serem executadas quando a função for invocada. 22 | 23 | ```php 24 | function nomeFuncao($arg1, $arg2, $arg3, ... $argN) 25 | { 26 | // instruções 27 | } 28 | ``` 29 | - Um função é declarada pela palavra reservada `function` seguida do nome da função. 30 | - Para nomear uma função podemos usar qualquer sequência de caracteres que comece com uma letra ou traço baixo `_`. 31 | 32 | > O PHP não diferencia letras maiúsculas de minúsculas para o nome de funções, ou seja, você pode chamar a função com o nome dela com letras em maiúsculo ou minúsculo que será reconhecida como a mesma função. 33 | >> Por convenção, as funções no PHP são nomeadas com letras **minúsculas**. 34 | 35 | ## Criando uma `function` 36 | 37 | ```php 38 | function multiplica_valores($valor1, $valor2) 39 | { 40 | $multiplica = $valor1 * $valor2; 41 | return $multiplica; 42 | } 43 | echo multiplica_valores(4, 3); // saída: 12 44 | ``` 45 | 46 | * Neste exemplo estamos criando uma function `multiplica_valores`. 47 | * Ela possui 2 argumentos (ou parâmetros) `$valor1` e `$valor2`. 48 | * Entre as chaves `{ }`estamos declarando uma variável `$multiplica` que está recebendo a multiplicação das variáveis: `$valor1 * $valor2`. 49 | * Por último, estamos executando a função `multiplica_valores` passando os números 4 e 3 como argumentos e imprimindo o retorno desta função. 50 | 51 | Se executarmos este trecho de código teremos como saída o valor 12. 52 | 53 | ### Argumentos de funções 54 | 55 | Informações podem ser passadas para funções através da lista de argumentos, que é uma lista de expressões delimitados por vírgulas. Esses argumentos são avaliados da esquerda para a direita. 56 | O PHP suporta a passagem de **argumentos por valor**, **passagem por referência** e **valores padrões** de argumentos. 57 | 58 | Lista de argumentos de tamanho variável (array) também são suportadas. Veja o exemplo: 59 | 60 | ```php 61 | Veremos mais a frente o retorno de funções de forma mais detalhada. 180 | 181 | ## Funções recursivas 182 | 183 | Recursividade - Este nome é dado quando ocorre uma chamada de determinada função a ela mesma. 184 | Um exemplo bastante conhecido é a função de cálculo do fatorial de um número. 185 | 186 | Veja o exemplo a seguir: 187 | 188 | ```php 189 | function recursion($a) 190 | { 191 | if ($a < 20) { 192 | echo $a . PHP_EOL; 193 | recursion($a + 1); 194 | } 195 | } 196 | 197 | recursion(1); // saída: 1 até 19 198 | ``` 199 | Outro exemplo clássico de função recursiva é o cálculo do fatorial. 200 | Fatorial de um número n é multiplicação dele mesmo por todos os seus antecessores. Por convenção, o fatorial de 0 é 1. Veja o exemplo: 201 | 202 | ```php 203 | Para saber quando o valor de uma variável representa uma função, utilizar a função `function_exists()` passando como argumento o conteúdo da variável que espera que seja o nome de uma função. 6 | > 7 | > Há algumas outras formas de se fazer este teste como por exemplo usar a função `gettype` que retorna o tipo de uma variável ou usar um `var_dump` (só em ambiente de desenvolvimento) para vermos com detalhes o conteúdo de uma variável. 8 | 9 | > Construtores de linguagem como `echo`, `print`, `unset()`, `isset()`, `empty()`, `include`, `require` não podem ser chamados através de variáveis com nome de funções. 10 | >```php 11 | > $variavel = 'echo'; 12 | > $variavel('Olá, mundo'); //não funciona 13 | >``` 14 | 15 | Exemplo 1 16 | 17 | ```php 18 | function olaMundo() { 19 | echo 'Olá, mundo!'. PHP_EOL; 20 | } 21 | $func = 'olaMundo'; // a variável $func está rececendo a function olaMundo 22 | $func(); // aqui estamos chamando a função variável que retorna Olá, mundo! 23 | ``` 24 | 25 | Exemplo 2 26 | 27 | ```php 28 | function olaVida($arg = ' ') // aqui a variável $arg está recedendo uma string vazia como valor padrão. 29 | { 30 | echo "Na função olaVida o argumento foi $arg" . PHP_EOL; 31 | } 32 | 33 | $func = 'olaVida'; // a variável $func está rececendo 'olaVida' como string 34 | $func('meu argumento'); // aqui estamos chamando a função variavel e passando uma string como argumento. 35 | ``` 36 | Exemplo 3 37 | 38 | ```php 39 | function exibe($string) 40 | { 41 | echo $string . PHP_EOL; 42 | } 43 | 44 | $func = 'exibe'; // a função variável $func está rececendo a function exibe 45 | $func('alguma coisa'); // retorna alguma coisa 46 | ``` 47 | 48 | Exemplo 4 49 | 50 | ```php 51 | function soma($a, $b) 52 | { 53 | return $a + $b; 54 | } 55 | 56 | function subtrai($a, $b) 57 | { 58 | return $a - $b; 59 | } 60 | $operacao = readline('Informe a operação: '); 61 | //nome da função: soma 62 | 63 | $valor1 = readline('Informe um valor: '); 64 | $valor2 = readline('Informe um valor: '); 65 | 66 | echo $operacao($valor1, $valor2) . PHP_EOL; 67 | ``` 68 | 69 | * Começamos o nosso código definindo a `function soma()` e a `function subtrai` e nelas definimos a nossa lógiga. 70 | * Em seguida, foi criada uma variável `operacao` que está recebendo uma entrada do usuário. Como no comentário do exemplo, o usuário digitou a string soma (que é o nome da função variável que ele deseja utilizar). 71 | * Na próxima linha definimos duas variáveis `$valor1` e `$valor2` que também deverão ser informadas pelo usuário. 72 | * E por último, estamos imprimindo a saída da função variável que está recebendo `$valor1` e `$valor2` como argumentos. 73 | 74 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/17.3-funcoes_internas.md: -------------------------------------------------------------------------------- 1 | # Funções internas - (built-in) 2 | 3 | O PHP tem mais de mil funções internas ou embutidas. O número de funções internas depende de quais extensões estão instaladas. Em adição às funções internas, PHP suporta funções definidas pelo usuário. 4 | 5 | Por exemplo, para trabalhar com imagens, é necessário habilitar a extensão `GD` ou alguma outra extensão para imagens. Para trabalhar com `cURL` que é uma extensão que realiza requisições a internet, deve ser habilitada a extensão `curl`. 6 | 7 | Para saber quais extensões estão carregadas no PHP, pode ser usadas as funções: `phpinfo()` ou `get_loaded_extensions()` ou executar o comando `php -m`. 8 | 9 | > Várias extensões são ativadas por padrão. Para conhecer mais sobre funções consulte a documentação em [php.net/functions](https://php.net/functions). 10 | 11 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/17.4-funcoes_anonimas.md: -------------------------------------------------------------------------------- 1 | # Funções anônimas 2 | 3 | Funções anônimas, também conhecidas como `closures`, permitem a criação de funções **que não tem o nome especificado**. 4 | 5 | É comum a utilização de funções anônimas como `callback`, isto é, quando passamos a função anônima como parâmetro e num determinado momento, a função que a recebeu, invoca a função e dá continuidade ao processamento. 6 | 7 | Funções anônimas são implementadas utilizando a classe `Closure` que podem ser utilizadas como valores de variáveis. 8 | 9 | Uma função anônima possui um **bloco de instrução**, porém, **não possuem referência** que as identifiquem e, por consequência, não estarão no escopo para que possamos invoca-las. 10 | 11 | A vantagem das funções anônimas é que podemos armazená-las e manipulá-las como fazemos com variáveis, e assim, podemos enviá-las como sendo um parâmetro de uma função. 12 | 13 | Assim, temos que uma função anônima possui todas as características e, funciona com os mesmos princípios que qualquer função, porém, como o nome sugere, esta não possui um nome - por isso: anônima! 14 | 15 | Para atribuirmos uma função anônima a uma variável, basta declararmos um bloco e atribuirmos este, diretamente, a uma determinada variável. Veja o exemplo: 16 | 17 | ```php 18 | expr. 6 | 7 | Antes das `arrow functions` funções como `map`, `filter`, `reduce` e muitas outras que recebem uma função como parâmetro, tinham que ser descritas da seguinte maneira: 8 | 9 | ```php 10 | function cubo($item) { 11 | return $item ** 3; 12 | } 13 | 14 | $lista = [1, 2, 3]; 15 | 16 | $resultado = array_map('cubo', $lista); 17 | 18 | print_r($resultado); 19 | ``` 20 | Agora, com a nova sintaxe, o código pode ser escrito da seguinte maneira: 21 | ```php 22 | $lista = [1, 2, 3]; 23 | $resultado = array_map(fn ($item) => $item ** 3, $lista); 24 | print_r($resultado); 25 | ``` 26 | Bem mais "limpo", não é mesmo? 27 | 28 | Vamos as principais vantagens: 29 | 30 | 1. O código é mais legível. 31 | 2. Menos linhas de código. 32 | 3. A `arrow function` captura as variáveis ​​externas sem defini-la explicitamente usando a palavra-chave `use`. 33 | 34 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/17.6-exercicios.md: -------------------------------------------------------------------------------- 1 | # Exercícios 2 | 3 | 1. Crie uma função variável que receba uma frase e a retorne em maíusculo. 4 | 5 | 2. Crie uma função anônima para calcular 10% de desconto em um determinado produto. Esta função deve retornar o valor - desconto. 6 | 7 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/18-manipulando_arquivos.md: -------------------------------------------------------------------------------- 1 | # Manipulando arquivos e pastas 2 | 3 | O PHP é uma linguagem de programação muito rica de recursos, e estes recursos ajudam muito no desenvolvimento de nossas aplicações com a linguagem. 4 | 5 | Nesta aula vamos aprender as principais funções para manipular arquivos com o PHP. 6 | 7 | ## Criar Arquivos com PHP 8 | 9 | A função `touch()` permite criar arquivos (caso ainda não existam), a utilização da função é muito simples, basta simplesmente passar um parâmetro com o nome do arquivo que deseja criar. Essa função devolve true em caso de sucesso ao criar o arquivo e false em caso de falha ao criar o arquivo. 10 | 11 | Veja um exemplo, onde vamos criar um arquivo chamado teste.txt: 12 | ```php 13 | touch('teste.txt'); 14 | ``` 15 | > Extensões de arquivos não influência em nada, tanto faz para o PHP se a extensão é .txt .log ou .qualquercoisa. 16 | 17 | ## Verificando a existência de arquivos 18 | 19 | `file_exist($nome_do_Arquivo)` é a função que verifica a existência de um arquivo. Geralmente é utilizada com o recurso como `if` e `while`. Ou seja a sintaxe seria: 20 | 21 | ```php 22 | $nome_do_Arquivo = 'teste.txt'; 23 | 24 | if(file_exists($nome_do_Arquivo)) { 25 | echo "Existe" . PHP_EOL; 26 | } else { 27 | echo 'Arquivo não encontrado' . PHP_EOL; 28 | } 29 | ``` 30 | Se o arquivo estiver em um diretório, precisa especificar o caminho: 31 | ```php 32 | file_exists('path/filename.txt') 33 | ``` 34 | 35 | Se tiver em um nível acima do diretório atual, precisa navegar até este diretório: 36 | ```php 37 | file_exists('../filename.txt') 38 | ``` 39 | ## Renomear um Arquivo com PHP 40 | 41 | Outra função muito interessante é a `rename()`, essa função permitir renomear o nome de um arquivo, nome ou sua extensão. 42 | 43 | Neste exemplo, vamos pegar o arquivo `teste.txt` e renomear para `teste.pdf`. 44 | 45 | ```php 46 | rename('teste.txt', 'teste.pdf'); // Arquivo teste.txt => teste.pdf 47 | ``` 48 | ## Copiar Arquivos com PHP 49 | 50 | A função `copy()` permite copiar um arquivo de um lugar para outro, seja para o mesmo nível de diretório ou qualquer outro diretório que você desejar copiar o arquivo. 51 | 52 | Neste exemplo vamos copiar o arquivo test.log para test2.log, no final temos dois arquivos: 53 | ```php 54 | copy('teste.pdf', 'copia_de_teste.pdf'); 55 | ``` 56 | 57 | Se tiver que copiar o arquivo para um diretório existente, pode fazer desta forma: 58 | ```php 59 | copy('teste.pdf', 'folder/copia_de_teste.pdf'); 60 | ``` 61 | ## Apagando arquivos 62 | 63 | > **Obs**: Para apagar arquivos que estejam em um servidor é preciso primeiramente ter permissão de leitura e escrita nos arquivos. 64 | 65 | `unlink($Nome_do_arquivo)` é a função que apaga arquivos. Esta função exclui o arquivo sem sem pedir confirmaćão,por isso, é recomendável fazer um script perguntando para o usuário se ele realmente deseja fazer a exclusão do arquivo. 66 | 67 | Se utilizarmos a função `unlink()` dentro de uma condição, ela vai retornar verdadeiro caso o arquivo tenha sido excluido e falso caso o arquivo por algum motivo nao pode ser excluído. 68 | 69 | ```php 70 | if(unlink($arquivo) == true) { //você pode substituir a variável $arquivo pelo nome do arquivo 71 | echo "Arquivo excluído"; 72 | } 73 | ``` 74 | ## Lendo arquivos 75 | 76 | O PHP é uma linguagem tem uma grande quantidade de funções que, as vezes, parecem fazer as mesmas coisas. Um bom exemplo disso são as funções que lêem arquivos. 77 | 78 | Por exemplo, para ler um arquivo, você poderia usar as funções `file_get_contents`ou `fopen`, `readfile`. Apesar de serem parecidas, é necessário informar algumas variações entre as elas. 79 | Vamos ao primeiro exemplo: 80 | 81 | ### file_get_contents() 82 | A função `file_get_contents` tem como finalidade ler todo o conteúdo de um arquivo para uma string, sendo possível, por exemplo, armazenar todo valor de um arquivo de texto em uma variável. 83 | 84 | Exemplo: 85 | 86 | ```php 87 | $meu_Arquivo = file_get_contents('teste.pdf'); 88 | ``` 89 | No exemplo acima, ao fazer essa chamada, você obteria toda o valor de `teste.pdf` em uma string e tratar conforme desejar. 90 | 91 | ### fopen() 92 | Esta função abre um arquivo ou url. Ela recebe como parâmetro o nome do arquivo e o tipo de acesso (leitura, escrita, leitura e escrita). 93 | 94 | ```php 95 | if (file_exists('teste.pdf')) { 96 | $arquivo_Aberto = fopen('teste.pdf', 'r+'); //Abre o arquivo para leitura 97 | $conteudo = fread($arquivo_Aberto, filesize('teste.pdf')); //Visualiza o conteúdo 98 | echo $conteudo . PHP_EOL; 99 | } 100 | ``` 101 | > No exemplo acima foi utilizada a função `fread` para ler o conteúdo de um arquivo. 102 | 103 | ### readfile() 104 | Ela lê e exibe todo o conteúdo de um arquivo. Diferentemente do `file_get_contents`, que retorna a string, a função readfile envia para a saída todo o conteúdo do arquivo. 105 | 106 | Exemplo: 107 | 108 | ```php 109 | readfile('teste.pdf'); 110 | ``` 111 | Então se você precisa trabalhar com os conteúdo do arquivo diretamente recomendável utilizar a função `file_get_contents`. 112 | 113 | Se for o caso de apenas de exibir o conteúdo do arquivo, utilize `readfile`. 114 | 115 | ## Escrevendo em arquivos 116 | 117 | Para escrever em um arquivo primeiramente também é preciso abrir o arquivo utilizando a função `fopen($arquivo, Tipo)` onde deverá ser passado dois parâmetros: o arquivo e a finalidade da abertura. As finalidades possíveis são: 118 | 119 | - `r` Abre somente para leitura; coloca o ponteiro do arquivo no começo do arquivo. 120 | - `r+` Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo. 121 | - `w` Abre somente para escrita; coloca o ponteiro do arquivo no começo do arquivo e reduz o comprimento do arquivo para zero. Se o arquivo não existir, tenta criá-lo. 122 | - `w+` Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo e reduz o comprimento do arquivo para zero. Se o arquivo não existir, tenta criá-lo. 123 | - `a` Abre somente para escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. 124 | - `a+` Abre para leitura e escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. 125 | - `x` Cria e abre o arquivo somente para escrita; coloca o ponteiro no começo do arquivo. Se o arquivo já existir, a chamada a fopen() falhará, retornando FALSE e gerando um erro de nível E_WARNING. Se o arquivo não existir, tenta criá-lo. 126 | - `x+` Cria e abre o arquivo para leitura e escrita; coloca o ponteiro no começo do arquivo. Se o arquivo já existir, a chamada a fopen() falhará, retornando FALSE e gerando um erro de nível E_WARNING. Se o arquivo não existir, tenta criá-lo. 127 | 128 | 129 | Com o arquivo aberto é hora de fazer as modificações, utilizando o comando `fwrite($arquivo_aberto, $Informacao)`. 130 | 131 | É importante chamar a função `fopen` em uma variável. Vejam um exemplo: 132 | 133 | ```php 134 | if (file_exists($arquivo)) { 135 | $arquivo_aberto = fopen($arquivo, 'a+'); 136 | $escrita = fwrite($arquivo_aberto, ‘Informacao’); 137 | fclose($arquivo_aberto); 138 | } 139 | ``` 140 | 141 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/18.1-exercicios.md: -------------------------------------------------------------------------------- 1 | # Exercícios 2 | 3 | 1. Escreva um programa em PHP que: 4 | - Crie e abra um arquivo texto de nome "arquivo.txt"; 5 | - Permita que o usuário grave um parágrafo de texto; 6 | - Feche o arquivo. 7 | 8 | Agora abra e leia o arquivo. Escreva na tela o texto armazenado. 9 | 10 | 2. Semelhante ao programa anterior, receba do usuário primeiramente o nome do arquivo que deseja trabalhar. Depois, receba um parágrafo que deve ser escrito nele. Ao final, mostre o resultado. 11 | 12 | 3. Faça um programa em PHP que receba do usuário um arquivo texto e mostre na tela quantas letras e quantas palavras ele tem. 13 | > Dica: Utilize as funções de manipulação de strings. 14 | 15 | 4. Faça um programa em PHP que permita que o usuário entre com diversos nomes e telefones para cadastro. Crie um arquivo com essas informações, uma por linha. O usuário finaliza a entrada dos dados com '0'. 16 | 17 | [Voltar a página inicial](../README.md) 18 | -------------------------------------------------------------------------------- /doc/18.2-manipulacao_csv.md: -------------------------------------------------------------------------------- 1 | # Manipulação de arquivos `csv` com PHP 2 | 3 | O formato `csv` é um tipo de arquivo de texto bastante utilizado para transferência de informações entre diferentes aplicações e também para geração de relatório. 4 | 5 | E para fazer esse tipo de troca de informações com sucesso, você precisa saber como manipular esses arquivos. 6 | 7 | Em linhas gerais, o `csv` é um formato usado para armazenar dados e que pode ser lido em programas que trabalham com planilhas. 8 | 9 | ## O que é `csv`? 10 | 11 | Mas, antes de trabalhar com arquivos `csv` no PHP, é importante entender em que consiste essa sigla. Por definição, `csv` é um formato de arquivo que significa “comma-separated-values” (valores separados por vírgulas), ou seja,os campos de dados indicados neste formato normalmente são separados ou delimitados por uma vírgula. 12 | 13 | Para entender de uma forma mais prática, vamos supor que você tenha uma planilha que contenha os dados a seguir: 14 | 15 | | Daiane | daiane@teste.com | 912345678 | 16 | |---|---|---|---|---| 17 | | Adriele | drica@teste.com | 987654321 | 18 | | Livia | livia@teste.com | 876543456| 19 | | Bruna | bruna@teste.com |998765678| 20 | 21 | Esses dados poderiam ser lidos em um arquivo `csv` separados por vírgulas e por um espaçamento de linha, como no exemplo a seguir: 22 | 23 | Daiane,daiane@teste.com,912345678 24 | Adriele,drica@teste.com,987654321 25 | Livia,livia@teste.com,876543456 26 | Bruna,bruna@teste.com,998765678 27 | 28 | Agora que você já entendeu o conceito básico sobre `csv`, vamos aprender como podemos utilizar o PHP para fazer a manipulação desses arquivos. 29 | 30 | > **OBS**: CSV é separado por vírgula e não ponto e vírgula. 31 | 32 | ## Abrindo um arquivo `csv` existente 33 | 34 | A função `fopen()` pode ser utilizada tanto para abrir um arquivo quanto para criar um novo. 35 | 36 | Neste exemplo, vamos mostrar como abrir um arquivo existente. A função `fopen()` recebe dois argumentos, o primeiro argumento recebe o nome do arquivo que deseja abrir e no segundo argumento o tipo de permissão(leitura, escrita, leitura e escrita...). 37 | 38 | ```php 39 | $arquivo = fopen('nomeArquivo.csv', 'w'); 40 | ``` 41 | 42 | # Criando um arquivo `csv` 43 | Podemos também utilizar a função `fopen()` para criar nosso arquivo `.csv`. 44 | Veja o exemplo: 45 | 46 | ```php 47 | //Abrir ou criar arquivo 48 | $arquivo = fopen('file.csv', 'w'); 49 | ``` 50 | Ao executar esta função é criado automaticamente um arquivo vazio (com permissão de escrita, neste caso). 51 | 52 | > **Nota**: a função `fopen()` pode ser utilizada para criar qualquer tipo de arquivo, basta colocar a extensão que deseja. Exemplo: `arquivo.txt`, `arquivo.pdf`, `arquivo.xls`. 53 | 54 | ## Inserindo dados no arquivo `csv` 55 | 56 | Existem algumas maneiras de inserir dados em um arquivo `csv`, uma delas é abrir o próprio arquivo e inserir os dados manualmente separados por vírgula. Mas, não é isso que iremos aprender... 57 | 58 | Vamos usar nosso bom e velho amigo PHP para isso! 59 | 60 | Para isso podemos utilizar a função `fputcsv()`. Ela formata uma linha (passada como um array de campos `fields)` como `CSV` e a escreve (terminando com uma nova linha) no manipulador de arquivo especificado por `handle`. 61 | 62 | ### Sintaxe 63 | ```php 64 | fputcsv($handle, $fields, $delimiter, $enclosure, $escape_char); 65 | ``` 66 | 67 | ##### Parâmetros 68 | 69 | * `$handle` - O ponteiro de arquivo precisa ser válido, e apontar para um arquivo aberto por `fopen()` (e ainda não fechado por `fclose()`). 70 | * `$fields` - Um array de valores. 71 | * `$delimiter`- O parâmetro opcional delimiter configura o caractere delimitador (apenas um caractere). O padrão é vírgula. 72 | * `$enclosure`- O parâmetro opcional enclosure configura o caractere que envolve os dados (apenas um caractere). O padrão é aspas, utilizado quando se tem quebra de linha ou vírgulas dentro do texto. 73 | * `$escape_char`- O parâmetro opcional escape_char configura o caractere de escape (apenas um caractere). Utilizado para fazer o escape de uma aspa no meio de uma string. 74 | 75 | Veja o exemplo abaixo: 76 | 77 | ```php 78 | $dados = [ 79 | [ 80 | 'produto' => 'Notebook', 81 | 'preco' => 3587, 82 | ], 83 | [ 84 | 'produto' => 'Celular', 85 | 'preco' => 2643, 86 | ], 87 | [ 88 | 'produto' => 'TV', 89 | 'preco' => 5876, 90 | ], 91 | [ 92 | 'produto' => 'Fone', 93 | 'preco' => 432, 94 | ], 95 | ]; 96 | 97 | // Abrir/criar arquivo 98 | $arquivo = fopen('file.csv', 'w'); 99 | 100 | // Popular os dados 101 | foreach ($dados as $linha) { 102 | fputcsv($arquivo, $linha); 103 | } 104 | 105 | // Fechar o arquivo 106 | fclose($arquivo); 107 | ``` 108 | 109 | Neste exemplo começamos nosso arquivo criando um array que contém produtos e preços. 110 | Em seguida, criamos a variável `$arquivo` que está recebendo a função `fopen()`para criar um novo arquivo. 111 | Depois criamos um `foreach` para percorrer nosso array e usamos a função `fputcsv()` para gerar o output do `csv`. 112 | E por último usamos a função `fclose()` para fechar o arquivo. 113 | 114 | Ao executar este código teremos como saída: 115 | 116 | ```php 117 | Notebook,3587 118 | Celular,2643 119 | TV,5876 120 | Fone,432 121 | ``` 122 | 123 | ## Criando cabeçalho 124 | O exemplo acima é bem útil, mas está faltando algo... Precisamos criar cabeçalhos pra nossa tabela final ficar mais intuitiva. Vamos lá? 125 | 126 | ```php 127 | // Cabeçalho do csv 128 | $headers = ['Produto', 'Preço']; 129 | 130 | $dados = [ 131 | [ 132 | 'produto' => 'Notebook', 133 | 'preco' => 3587, 134 | ], 135 | [ 136 | 'produto' => 'Celular', 137 | 'preco' => 2643, 138 | ], 139 | [ 140 | 'produto' => 'TV', 141 | 'preco' => 5876, 142 | ], 143 | [ 144 | 'produto' => 'Fone', 145 | 'preco' => 432, 146 | ], 147 | ]; 148 | 149 | $arquivo = fopen('file.csv', 'w'); 150 | 151 | // Criar o cabeçalho 152 | fputcsv($arquivo , $headers); 153 | 154 | foreach ($dados as $linha ) { 155 | fputcsv($arquivo, $linha); 156 | } 157 | 158 | fclose($arquivo); 159 | ``` 160 | 161 | ## Manipulando os dados 162 | 163 | Imagine que você necessite colocar os **produtos** em ordem alfabética. Podemos utilizar a função `array_multisort()`. 164 | 165 | Veja o exemplo: 166 | 167 | ```php 168 | $headers = ['Produto', 'Preço']; 169 | 170 | $dados = [ 171 | [ 172 | 'produto' => 'Notebook', 173 | 'preco' => 3587, 174 | ], 175 | [ 176 | 'produto' => 'Celular', 177 | 'preco' => 2643, 178 | ], 179 | [ 180 | 'produto' => 'TV', 181 | 'preco' => 5876, 182 | ], 183 | [ 184 | 'produto' => 'Fone', 185 | 'preco' => 432, 186 | ], 187 | ]; 188 | 189 | $arquivo = fopen('file.csv', 'w'); 190 | 191 | fputcsv($arquivo , $headers); 192 | 193 | foreach ($dados as $chave => $valor) { 194 | $produto[$chave] = $valor['produto']; 195 | $preco[$chave] = $valor['preco']; 196 | } 197 | 198 | // Ordenar array dados na coluna produto em ordem crescente. 199 | // Pode usar SORT_DESC para ordem decrescente. 200 | array_multisort($produto, SORT_ASC, $dados); 201 | 202 | foreach ($dados as $linha ){ 203 | fputcsv($arquivo, $linha); 204 | } 205 | 206 | fclose($arquivo); 207 | ``` 208 | 209 | Aqui nós utilizamos a função `array_multisort()` para fazer a ordenação do nosso array. Para saber mais, consulte o [manual do PHP](https://www.php.net/manual/pt_BR/function.array-multisort.php). 210 | 211 | ### Organizando preços em ordem decrescente 212 | 213 | Você também pode ordenar os preços utilizando a função `array_multisort()`. 214 | 215 | Veja o exemplo: 216 | 217 | ```php 218 | $headers = ['Produto', 'Preço']; 219 | 220 | $dados = [ 221 | [ 222 | 'produto' => 'Notebook', 223 | 'preco' => 3587, 224 | ], 225 | [ 226 | 'produto' => 'Celular', 227 | 'preco' => 2643, 228 | ], 229 | [ 230 | 'produto' => 'TV', 231 | 'preco' => 5876, 232 | ], 233 | [ 234 | 'produto' => 'Fone', 235 | 'preco' => 432, 236 | ], 237 | ]; 238 | 239 | $arquivo = fopen('file.csv', 'w'); 240 | 241 | fputcsv($arquivo , $headers); 242 | 243 | foreach ($dados as $chave => $valor) { 244 | $produto[$chave] = $valor['produto']; 245 | $preco[$chave] = $valor['preco']; 246 | } 247 | // SORT_ASC para ordem crescente 248 | array_multisort($preco, SORT_ASC, $dados); 249 | 250 | foreach ($dados as $linha) { 251 | fputcsv($arquivo, $linha); 252 | } 253 | fclose($arquivo); 254 | ``` 255 | 256 | > **OBS**: fclose em muitos casos se faz desnecessário pois o PHP já fecha automaticamente quando encerra a execução de um script. É bom fechar mais para reduzir consumo de memória em scripts que fazem muita coisa como manipulação de muitos CSV. 257 | 258 | 259 | ## Lendo um arquivo `csv` existente 260 | 261 | No exemplo anterior, vimos que é possível criar e manipular arquivos `csv` no PHP, agora vamos trabalhar com arquivos `csv` já existentes. Para isso vamos utilizar a função `fgetcsv()`. 262 | 263 | A função `fgetcsv()` interpreta a linha em busca de campos no formato `csv` e retorna um array contendo os campos lidos. Para conhecer um pouco mais sobre ela, acesse o [manual do PHP](https://www.php.net/manual/pt_BR/function.fgetcsv.php). 264 | Veja o exemplo: 265 | 266 | ```php 267 | $handle = fopen("nota.csv", "r"); 268 | 269 | $header = fgetcsv($handle, 1000, ","); 270 | 271 | while ($row = fgetcsv($handle, 1000, ",")) { 272 | $nota[] = array_combine($header, $row); 273 | } 274 | print_r($nota); 275 | 276 | fclose($handle); 277 | ``` 278 | Executando esse código teríamos como saída: 279 | 280 | ``` 281 | Array 282 | ( 283 | [0] => Array 284 | ( 285 | [N°da Nota Fiscal] => 87 286 | [Data da Emissão] => 31/05/2020 287 | [Hora da Emissão] => 14:27:25 288 | [Valor] => 23764,40 289 | ) 290 | 291 | [1] => Array 292 | ( 293 | [N°da Nota Fiscal] => 86 294 | [Data da Emissão] => 27/05/2020 295 | [Hora da Emissão] => 14:25:00 296 | [Valor] => 549873,0 297 | ) 298 | 299 | [2] => Array 300 | ( 301 | [N°da Nota Fiscal] => 85 302 | [Data da Emissão] => 27/05/2020 303 | [Hora da Emissão] => 14:03:41 304 | [Valor] => 25876 305 | ) 306 | 307 | [3] => Array 308 | ( 309 | [N°da Nota Fiscal] => 84 310 | [Data da Emissão] => 18/05/2020 311 | [Hora da Emissão] => 16:55:43 312 | [Valor] => 150000 313 | ) 314 | 315 | ) 316 | ``` 317 | E a partir daí você pode trabalhar com este arquivo da maneira que desejar. 318 | Esperamos que tenha curtido e bons estudos! 319 | 320 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/18.3-exercicios.md: -------------------------------------------------------------------------------- 1 | # Exercícios 2 | 3 | 1. Escreva um programa em PHP que crie um arquivo CSV com uma turma de alunos. Cada aluno deve ter Nome, Matrícula e Endereço. 4 | 5 | 2. Escreva um programa em PHP que abra o arquivo CSV anterior, exiba seu conteúdo e pergunte ao usuário se deseja ordenar em ordem alfabética ou inserir um novo aluno. Depois exiba o conteúdo novamente. 6 | 7 | [Voltar a página inicial](../README.md) 8 | -------------------------------------------------------------------------------- /doc/19-include_require.md: -------------------------------------------------------------------------------- 1 | # Include 2 | 3 | Conforme vamos avançando no desenvolvimento da nossa aplicação é possível que ela fique um tanto confusa com declarações de variáveis e functions em um único arquivo. No PHP você pode criar um arquivo separado contendo todas as variáveis, por exemplo, e depois incluí-lo no arquivo principal. Para isso, podemos utilizar a declaração `include` que inclui e avalia o arquivo informado. 4 | 5 | Veja o exemplo: 6 | 7 | ```php 8 | vars.php // arquivo de variáveis 9 | 10 | $fruta = 'maçã'; 11 | $cor = 'verde'; 12 | 13 | 14 | teste.php // arquivo de exemplo 15 | 16 | include 'vars.php'; // pode usar também: include('vars.php'); 17 | 18 | echo "A $fruta é $cor "; // A maçã é verde 19 | ``` 20 | ## Include_once 21 | A declaração `include_once` inclui e avalia o arquivo informado durante a execução do script. Este é um comportamento similar a declaração include, com a única diferença que, como o nome sugere, **o arquivo será incluído somente uma vez**. 22 | 23 | O `include_once` pode ser utilizado quando o mesmo arquivo é incluído mais de uma vez, neste caso, ajudará a evitar problemas como declaração de funções, classes ou constantes já existentes. 24 | 25 | # Require 26 | 27 | `require` é idêntico ao `include` exceto que em caso de falha produzirá um erro fatal, `E_COMPILE_ERROR`, ou seja, não compila. Enquanto que o `include` apenas emitirá um alerta `E_WARNING)` permitindo que o script continue. 28 | 29 | 30 | ## Require_once 31 | 32 | A declaração `require_once` é idêntica a `require` exceto que o PHP verificará se o arquivo já foi incluído, e em caso afirmativo, não o incluirá (exigirá) novamente. 33 | 34 | # Diferença entre `include` e `require`? 35 | 36 | Você já viu até aqui que as declarações de `include` e `require`são bem semelhantes. A única diferença é que `include` gera apenas um aviso do PHP, mas permite que a execução do script continue se o arquivo a ser incluído não puder ser encontrado. Enquanto a `require` gerará um erro fatal e interromperá a execução do script. 37 | 38 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/20-function_exists.md: -------------------------------------------------------------------------------- 1 | # Function_exists 2 | 3 | A `function_exists` - retorna `TRUE` se a função dada está definida, do contrário, `FALSE`. 4 | 5 | ## Sintaxe 6 | 7 | ```php 8 | function_exists( string $function_name ) : bool 9 | ``` 10 | 11 | 12 | ## Exemplo 13 | ```php 14 | // declaração da function mensagem 15 | function mensagem() 16 | { 17 | echo "Olá, mundo!"; 18 | } 19 | // verificando se a function mensagem existe 20 | if (function_exists('mensagem')) { 21 | echo "mensagem() function está disponível" . PHP_EOL; 22 | } else { 23 | echo "mensagem() function não está disponível" . PHP_EOL; 24 | } 25 | ``` 26 | 27 | Agora vamos imaginar que você tenha um arquivo separado com algumas funções e deseja verificar se a função procurada existe. Primeiro você deve fazer um include ou require para fazer a referência de onde se vai buscar aquela função. Em seguida, você pode verificar se a função a ser procurada existe. 28 | 29 | Veja o exemplo: 30 | 31 | ```php 32 | require 'functions.php'; 33 | 34 | // verificando se a function mensagem existe 35 | if (function_exists('divide')) { 36 | echo "mensagem() function está disponível" . PHP_EOL; 37 | } else { 38 | echo "mensagem() function não está disponível" . PHP_EOL; 39 | } 40 | ``` 41 | 42 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/21-exercicios.md: -------------------------------------------------------------------------------- 1 | 1. Sabendo-se que 1 quilowatt de energia custa R$0,68 desenvolva uma função que receba a quantidade de quilowatts gasta por uma residência calcule e imprima: 2 | 3 | a. Valor em reais a ser pago 4 | 5 | b) O novo valor a ser pago por essa residência com um desconto de 10%. 6 | 7 | Sua função deverá estar num arquivo separado. 8 | 9 | 2. Criar um programa que efetue o cálculo do valor a receber de um professor. Os da- 10 | dos fornecidos pelo usuário serão: valor da hora aula, total de horas no mês. 11 | 12 | 3. Você precisa desenvolver uma aplicação em PHP para avaliar se a senha definida pelo cliente segue a política de segurança de um banco. A verificação se uma senha é forte pode ser feita em duas etapas desenvolvidas separadamente: 13 | 14 | a) Uma função que verifique se a quantidade de caracteres da senha é igual ou 15 | superior a 6 caracteres. 16 | b) Uma função que verifique se há pelo menos um caractere em letra maiúscula. 17 | 18 | A cada etapa de verificação de senha, a respectiva função deverá retornar um booleano: True se o critério for verificado, False caso contrário. 19 | 20 | Funções deverão estar em um arquivo separado. 21 | Fonte: AD1 – 2o Semestre de 2019 - Tecnologia em Sistemas de Computação - UFF (Adaptada) 22 | 23 | [Voltar a página inicial](../README.md) -------------------------------------------------------------------------------- /doc/22-orientacao_objetos.md: -------------------------------------------------------------------------------- 1 | # Orientação a Objetos 2 | Para muitos orientação a objetos é um conceito apavorante e com sintaxes complicadas. Nesta aula você aprenderá os conceitos que envolvem a programação orientada a objetos (POO) e conhecerá um mundo de possibilidades que a envolve. 3 | A finalidade da POO é aproximar o mundo digital do mundo real e ela tráz inúmeras vantagens. 4 | 5 | Imagine uma casa... 6 | 7 | Certamente quem a construiu antes de começar fez um projeto de como seria esta casa, damos este nome de projeto de planta. 8 | 9 | A partir de uma planta pode ser construída inúmeras casas, todas elas com o mesmo molde. Porém, cada casa pode ter uma cor diferente, uma porta diferente... 10 | 11 | Em POO chamamos a planta da casa de Classe (modelo) e as casas geradas a partir deste modelo de objeto. Um novo objeto criado pode ser chamado de instância. 12 | 13 | ## Classes 14 | Uma classe é uma forma de definir um tipo de dado em uma linguagem orientada a objetos. Ela é formada por dados e comportamentos. 15 | Com a classe definida, podem ser criados diversos objetos do tipo da classe criada. Ela funciona, então, como um modelo para a criação dos seus objetos. 16 | 17 | ## Objetos 18 | Objetos são instâncias de classes, que determinam qual informação um objeto contém e como ele pode manipulá-la. É uma entidade capaz de reter um estado (informação) e que oferece uma série de informações (comportamento) para examinar ou para afetar este estado. É através deles que praticamente todo o processamento ocorre em sistemas implementados com linguagens de programação orientadas a objetos. 19 | 20 | 21 | 22 | 23 | 24 | ## Atributos e métodos 25 | Para definir os dados são utilizados os atributos, e para definir o comportamento são utilizados métodos. 26 | 27 | 28 | 29 | 30 | 31 | Atributos de uma classe também são conhecidos como propriedades e descrevem um intervalo de valores que as instâncias da classe podem apresentar. 32 | Um atributo é uma variável que pertence a um objeto. Os dados de um objeto são armazenados nos seus atributos. 33 | Informações sobre o objeto. Dados que posso armazenar. 34 | 35 | Os métodos são procedimentos ou funções que realizam as ações próprias do objeto. Assim, os métodos são as ações que o objeto pode realizar. Tudo o que o objeto faz é através de seus métodos, pois é através dos seus métodos que um objeto se manifesta, através deles que o objeto interage com os outros objetos. 36 | Sendo mais conhecidos como: Método Construtor, Métodos Get e Set, etc. 37 | 38 | ... 39 | Class Casa(){ 40 | // Atributos 41 | public $quartos; 42 | private $cor; 43 | 44 | // Métodos 45 | public function getCor(){ 46 | return $this->cor; 47 | } 48 | public function setCor($cor){ 49 | $this->cor = $cor; 50 | } 51 | } 52 | ... 53 | 54 | 55 | 56 | 57 | 58 | 59 | ## Visibilidade 60 | 61 | São distribuídas em três tipos, private (privado), public (publico) e protect (protegido): 62 | - Privado: uma função local e um único bloco de código 63 | - Público: visível para tudo uma função a ser chamada a qualquer momento 64 | - Protegido: esse caso restringe o parâmetro fora da classe, mas ainda acessível às suas subclasses (herança) 65 | 66 | ... 67 | Class Casa(){ 68 | // Atributos 69 | public $quartos; // Não é necessários criar get e set para atributos publicos, pois ele podem ser acessados diretamente. 70 | private $cor; 71 | 72 | // Métodos 73 | // Método de get do atributo privado de Cor, somente atráves do método conseguiremos visualizar e setar um valor para o atributo. 74 | public function getCor(){ 75 | return $this->cor; 76 | } 77 | public function setCor($cor){ 78 | $this->cor = $cor; 79 | // Chamando um método privado na propria classe, ou seja, ao escolher uma cor também será setado o valor padrão de 3 quartos. 80 | $this->setQuarto(); 81 | } 82 | 83 | //Método privados só podem ser utilizar na propria classe. 84 | private function setQuarto() { 85 | $this->quarto = 3; 86 | } 87 | } 88 | ... 89 | 90 | 91 | ... 92 | // Exemplo de como será criado e acesso o objeto 93 | $casa = new Casa(); 94 | 95 | $casa->quartos = 3; // É possivel salvar um conteúdo de um atributo publico indo diretamento ao atributo. 96 | echo $casa->quartos; // É possivel visualizar um atributo publico somente realizando a chamada dele. 97 | 98 | 99 | $casa->cor = 'azul'; // Esse código não vai funcionar pois não é permitido acessar diretamente o atributo. 100 | $casa->setCor('azul'); // No caso de atributo privado é necessário chamar o método set do atributo. 101 | 102 | echo $casa->getCor(); // Mesma coisa para exibir o conteúdo de um atributo privado é necessário ter um método get desse atributo. 103 | ... 104 | 105 | ## Encapsulamento 106 | 107 | O conceito do encapsulamento consiste em "esconder" os atributos da classe de quem for utilizá-la. Isso se deve por dois motivos principais. 108 | Um é para que alguém que for usar a classe não a use de forma errada o outro motivo é de manter todo o código de uma determinada classe encapsulada dentro dela mesmo. 109 | 110 | Encapsulamento vem de encapsular, que em programação orientada a objetos significa separar o programa em partes, o mais isolado possível. A idéia é tornar o software mais flexível, fácil de modificar e de criar novas implementações. O Encapsulamento serve para controlar o acesso aos atributos e métodos de uma classe. É uma forma eficiente de proteger os dados manipulados dentro da classe, além de determinar onde esta classe poderá ser manipulada 111 | 112 | ######## Faremos um exemplo na aula que será incluído aqui 113 | 114 | ## Associação de Classes 115 | 116 | Uma associação define um relacionamento entre duas classes que permite que um objeto faça com que outro objeto realize uma ação em seu lugar. 117 | 118 | Em termos gerais, a casualidade da ação é feita ao enviar uma mensagem ou invocar um método do objeto controlado. 119 | 120 | ######## Faremos um exemplo na aula que será incluído aqui 121 | 122 | [Voltar a página inicial](../README.md) 123 | 124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /doc/22.1-exercicios.md: -------------------------------------------------------------------------------- 1 | # Exercícios 2 | 3 | 1. Escreva um programa em PHP que crie uma classe Empresa. 4 | 5 | 2. Escreva um programa em PHP que crie uma classe Funcionário. 6 | 7 | [Voltar a página inicial](../README.md) 8 | -------------------------------------------------------------------------------- /doc/23-date_and_time.md: -------------------------------------------------------------------------------- 1 | # Date and time: Manipulação de datas em PHP 2 | 3 | Trabalhar com manipulação de datas é extremamente importante no desenvolvimento, manutenção de sistemas e para facilitar nosso dia a dia. O PHP possui várias funções para trabalhar com datas. 4 | 5 | As funções e classes relacionadas a data e hora não necessitam de instalação de extensão, pois são nativas do PHP. 6 | 7 | Ao longo desse artigo vamos mostrar de forma conceitual e prática como utilizar estas funções e classes. 8 | 9 | ## Função [date()](php.net/date) 10 | ### Sintaxe 11 | ```php 12 | date ( string $format [, int $timestamp = time() ] ) : string 13 | ``` 14 | A função [`date()`](php.net/date) recebe dois parâmetros, o primeiro é uma string de formato e o segundo é o timestamp que é um valor inteiro e opcional, por isto na sintaxe ele vem entre colchetes. 15 | 16 | Veja abaixo um exemplo de código para exibir o dia e a hora atual: 17 | 18 | ```php 19 | // ANO-MÊS-DIA HORA:MINUTO:SEGUNDO 20 | echo date('Y-m-d H:i:s') . PHP_EOL; 21 | // Saída: 2020-12-03 20:56:30 22 | ``` 23 | Repare que cada letra passada como argumento tem um retorno diferente. Por exemplo, **H** formato de 24 horas de uma hora (00 a 23). 24 | 25 | A seguir outras formas de formatação de saída da função [`date()`](php.net/date). 26 | 27 | | Caracter | Descrição | 28 | |---|---| 29 | | d | Dia do mês, 2 dígitos com zero à esquerda | 30 | | D | Uma representação textual de um dia, três letras | 31 | | l ('L' minúsculo) | A representação textual do dia da semana | 32 | | z | O dia do ano (iniciando em 0) | 33 | | F | Representação completa de um mês, como January ou March | 34 | | m | Representação numérica de um mês, com zero à esquerda | 35 | | Y | Representação de ano completa, 4 dígitos | 36 | | y | Representação do ano com dois dígitos | 37 | 38 | 39 | #### Dica 40 | > Você pode utilizar a função [`date()`](php.net/date) para atualizar automaticamente o ano dos direitos autorais em seu site. Veja o exemplo: 41 | 42 | ```php 43 | © 2015- 44 | ``` 45 | Conheça agora alguns caracteres comumente usados ​​para **horários**: 46 | 47 | | Caracter | Descrição | 48 | |---|---| 49 | | H | formato de 24 horas de uma hora (00 a 23) | 50 | | h | formato de 12 horas de uma hora com zeros à esquerda (01 a 12) | 51 | | i | Minutos com zeros à esquerda (00 a 59) | 52 | | s | segundos com zeros à esquerda (00 a 59) | 53 | | a | Ante meridiem minúsculo e Post meridiem (am ou pm) minúsculo | 54 | | A | Ante meridiem minúsculo e Post meridiem (am ou pm) maiúsculo | 55 | 56 | Para exibir a hora atual no formato especificado, basta executar o código abaixo: 57 | 58 | ```php 59 | echo 'Em Brasíla: ' . date('H:i:s') . ' horas...' . PHP_EOL; 60 | // exibe o horário atual do servidor 61 | ``` 62 | ### Trabalhando com fuso horário 63 | 64 | Se ao executar o código acima a hora exibida não estiver correta, provavelmente é porque seu servidor está configurado para um fuso horário diferente do seu. 65 | 66 | Se você precisa que o horário esteja correto de acordo com um local específico, terá que definir o fuso horário que deseja usar utilizando a função `date_default_timezone_set()`. 67 | 68 | Veja um exemplo que define o fuso horário para 'America / New_York' e, em seguida, exibe a hora atual no formato especificado: 69 | 70 | ```php 71 | date_default_timezone_set('America/New_York'); 72 | echo 'Hora atual em Nova York: ' . date('H:i:s a') . PHP_EOL; 73 | 74 | date_default_timezone_set('America/Sao_Paulo'); 75 | echo 'Hora atual em São Paulo: ' . date('H:i:s a') . PHP_EOL; 76 | ``` 77 | 78 | **Obs:** É possível ver a lista de fusos horários suportados pelo DateTimeZone na própria [documetação](https://php.net/timezones) do PHP. 79 | 80 | Outra forma de exibir a data e a hora é utilizando a função [`mktime()`](https://php.net/mktime). Ela recebe como parâmetros (hora, minuto, segundo, mês, dia, ano).Note que todos os argumentos são obrigatórios. Caso você não precise usar algum deles, basta preencher com `0`como vemos neste exemplo: 81 | ```php 82 | $date = mktime(0, 0, 00, 12, 02, 2020); 83 | echo 'Criado em: ' . date('d-m-Y ', $date) . PHP_EOL; 84 | // Saída: Criado em: 02-12-2020 85 | ``` 86 | 87 | ## DateTime 88 | Vimos até agora o uso de algumas funções `date`, mas é possível também utilizar orientação a objetos para fazer essas manipulações. Com a classe DateTime podemos instanciar e obter a data e hora atuais, por exemplo. 89 | 90 | ```php 91 | // Pega o momento atual 92 | $today = new DateTime(); 93 | 94 | // Exibe no formato desejado 95 | echo $today->format('Y-m-d') . PHP_EOL; 96 | ``` 97 | Observe que neste exemplo, nenhum parâmetro foi passado para o construtor da classe DateTime, então o momento atual foi exibido. 98 | 99 | ## Adicionando datas 100 | Você pode também adicionar datas de várias maneiras. Uma delas é especificando nos argumentos da classe DateTime. Ela recebe como parâmetro uma string de formato de data em inglês ou também uma string com uma data específica. Veja abaixo alguns exemplos: 101 | 102 | ```php 103 | $agora = new DateTime('now'); // ou sem parâmetro 104 | $amanha = new DateTime('tomorrow'); 105 | $proximo_ano = new DateTime('next year'); 106 | $data_aleatoria = new DateTime('2000-10-10'); 107 | 108 | echo $agora->format('Y-m-d') . PHP_EOL; 109 | echo $amanha->format('Y-m-d') . PHP_EOL; 110 | echo $proximo_ano->format('Y-m-d') . PHP_EOL; 111 | echo $data_aleatoria->format('Y-m-d') . PHP_EOL; 112 | ``` 113 | > **OBS**: Em PHP variáveis podem ter acento no nome mas é bom evitar para não ter problemas com diferentes codificações de caracteres em diferentes sistemas operacionais. 114 | 115 | ### Adicionando datas - strtotime() 116 | 117 | A função `strtotime()` recebe como parâmetro uma string de formato de data em inglês e tenta analisar esse formato. É como tentar transformar uma frase que possui possíveis informações de data em uma data real, como mostra o código a seguir: 118 | 119 | ```php 120 | $data = strtotime('tomorrow'); 121 | echo date('Y-m-d', $data) . PHP_EOL; 122 | 123 | $data = strtotime('next Friday'); 124 | echo date('Y-m-d', $data) . PHP_EOL; 125 | 126 | $data = strtotime('+3 Months'); 127 | echo date('Y-m-d', $data) . PHP_EOL; 128 | ``` 129 | Agora imagine que você precise listar os próximos sábados a partir da data atual... No exemplo a seguir você consegue fazer isso facilmente utilizando a função `strtotime()`. 130 | 131 | Veja: 132 | 133 | ```php 134 | $data = strtotime('Sunday'); 135 | $data_final = strtotime('+4 weeks', $data); 136 | 137 | while ($data < $data_final) { 138 | echo date('F d', $data) . PHP_EOL; 139 | $data = strtotime('+1 week', $data); 140 | } 141 | ``` 142 | ### Adicionando datas - DateTime::add 143 | Outra forma de adicionar datas é utilizar o método `add` da classe `DateTime`. Com ele é possível acrescentar uma quantidade de dias, meses, anos, horas, minutos e segundos em um objeto `DateTime` passando para o método `add` a quantidade de períodos como no exemplo abaixo. 144 | 145 | - P5D: Período de cinco dias 146 | - P2M: Período de dois meses 147 | - PT10S: Período de dez segundos 148 | - P2YT20M: Período de dois anos e vinte minutos 149 | 150 | Veja o como utilizar: 151 | 152 | ```php 153 | $diff1Year = new DateInterval('P1Y'); 154 | $diff10Hours = new DateInterval('PT10H'); 155 | 156 | // Adiciona 1 ano em $date1 157 | $date1 = new DateTime('2020-12-02 08:00:00'); 158 | $date1->add($diff1Year); 159 | print_r($date1); 160 | 161 | // Adiciona 10 horas em $date2 162 | $date2 = new DateTime('2020-12-02 08:00:00'); 163 | $date2->add($diff10Hours); 164 | print_r($date2); 165 | ``` 166 | Vimos até agora várias formas de adicionar datas e períodos usando funções e classes Date PHP. Mas, e se quiséssemos saber o intervalo entre duas datas? 167 | 168 | ## Subtraindo datas 169 | Da mesma maneira que conseguimos adicionar datas e horas, também podemos subtrair um determinado período sobre um objeto da classe `DateTime` utilizando a função `sub()`. Confira como é fácil. 170 | 171 | ```php 172 | $date = new DateTime(); 173 | $date->sub(new DateInterval('P10D')); 174 | // Retorna a data atual - 10 dias 175 | print_r($date); 176 | ``` 177 | 178 | ### Diferença de datas 179 | Calcular a diferença de datas no PHP é muito simples de se fazer utilizando o método `diff()`. 180 | Imagine que você queira descobrir quantos dias de vida tem uma pessoa... 181 | 182 | ```php 183 | $data1 = new DateTime('1984-01-01'); 184 | $data2 = new DateTime(); 185 | $intervalo = $data1->diff($data2); 186 | echo $intervalo->format('Total de dias: %a') . PHP_EOL; 187 | echo $intervalo->format('Anos: %y %m meses e %d dias') . PHP_EOL; 188 | ``` 189 | Parabéns! Você acabou de descobrir que tem alguns muitos dias de vida. 190 | 191 | ## Concluindo 192 | 193 | Manipular datas e hora no PHP é bem fácil! Não é cecessário utilizar nenhuma biblioteca externa para isso pois ele trás funções e classes nativas. Com elas você pode fazer diversas operações envolvendo comparação, adição, subtração de datas e muito mais. 194 | 195 | Para conferir um pouco mais sobre o mundo de possibilidades de se trabalhar com datas e horas no PHP, consulte sua [documentação](https://php.net/datetime). Lá você verá uma lista completa de funções e poderá tranquilamente realizar diversas operações. -------------------------------------------------------------------------------- /images/arquivo-host.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpwomenbr/workshop-php/60dbb2cde6e9ed156287f0c7b96c2fa1cb2d538e/images/arquivo-host.png -------------------------------------------------------------------------------- /images/download-php.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpwomenbr/workshop-php/60dbb2cde6e9ed156287f0c7b96c2fa1cb2d538e/images/download-php.png -------------------------------------------------------------------------------- /images/exemplo_carro_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpwomenbr/workshop-php/60dbb2cde6e9ed156287f0c7b96c2fa1cb2d538e/images/exemplo_carro_1.jpg -------------------------------------------------------------------------------- /images/exemplo_carro_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpwomenbr/workshop-php/60dbb2cde6e9ed156287f0c7b96c2fa1cb2d538e/images/exemplo_carro_2.jpg -------------------------------------------------------------------------------- /images/exemplo_casa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpwomenbr/workshop-php/60dbb2cde6e9ed156287f0c7b96c2fa1cb2d538e/images/exemplo_casa.jpg -------------------------------------------------------------------------------- /images/variaveis-ambiente.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpwomenbr/workshop-php/60dbb2cde6e9ed156287f0c7b96c2fa1cb2d538e/images/variaveis-ambiente.png -------------------------------------------------------------------------------- /images/vsc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpwomenbr/workshop-php/60dbb2cde6e9ed156287f0c7b96c2fa1cb2d538e/images/vsc.png --------------------------------------------------------------------------------