├── 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
--------------------------------------------------------------------------------