├── LICENSE ├── README.md └── v0.1 ├── 00-introducao ├── 00-introducao.md └── img │ └── image1.jpg ├── 01-capitulo_1 ├── 01-capitulo_1.md └── img │ ├── image2.jpg │ ├── image3.jpg │ └── image4.jpg ├── 02-capitulo_2 └── 02-capitulo_2.md ├── 03-capitulo_3 └── 03-capitulo_3.md ├── 04-capitulo_4 └── 04-capitulo_4.md ├── 05-capitulo_5 └── 05-capitulo_5.md ├── 06-capitulo_6 └── 06-capitulo_6.md ├── 07-capitulo_7 └── 07-capitulo_7.md ├── 08-capitulo_8 └── 08-capitulo_8.md ├── 09-capitulo_9 └── 09-capitulo_9.md ├── 10-capitulo_10 └── 10-capitulo_10.md └── 11-capitulo_11 ├── 11-capitulo_11.md └── img ├── image10.jpg ├── image11.jpg ├── image12.jpg ├── image13.jpg ├── image14.jpg ├── image15.jpg ├── image16.jpg ├── image17.jpg ├── image18.jpg ├── image19.jpg ├── image20.jpg ├── image5.jpg ├── image6.jpg ├── image7.jpg ├── image8.jpg └── image9.jpg /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 PHProgramando 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PHProgramando 2 | 3 | ### Livro-curso PHProgramando - PHP do Básico ao Avançado. 4 | 5 | Feito de dev para dev, e inspirado na comunidade PHP, este livro nasce com a proposta de criar um material para o aprendizado de PHP desde o básico ao avançado. Iniciamos este probjeto com um repositório de código aberto, na esperança de que cada vez mais desenvolvedores contribuam para o material, de forma a melhorarmos cada vez mais este conteúdo. 6 | 7 | Inicialmente construído a partir da apostila _PHP Básico do Jeito Certo_ do nosso amigo [Marcelo Menezes](https://menezes-portfolio.com), a.k.a [Calcio](https://github.com/Calcio), o conteúdo deste livro pretende ir além do PHP, apresentando ao leitor o conhecimento necessário a um profissional de Desenvolvimento Web. Abordaremos PHP, 8 | HTML, CSS e JavaScript, do ponto de vista de diversos profissionais da área. 9 | 10 | 11 | -------------------------------------------------------------------------------- /v0.1/00-introducao/00-introducao.md: -------------------------------------------------------------------------------- 1 | Curso PHP Básico 2 | ================ 3 | 4 | Aprenda do jeito certo 5 | ---------------------- 6 | 7 | ![](img/image1.jpg) 8 | 9 | Bem-vindo ao curso PHP Básico do Jeito Certo. Nessa apostila você não 10 | aprenderá somente o PHP, as sintaxes dos *if*, *while*, *for* etc. A 11 | proposta desse curso vai muito além da programação. Nosso objetivo é 12 | capacitar o novo profissional de PHP com as recentes atualizações do 13 | PHP, padronizações de codificação, utilização de alguns recursos 14 | externos ao PHP como: HTML 5, CSS 3, framework de CSS 3 Twitter 15 | bootstrap e o framework de JavaScrpt jQuery. 16 | 17 | Agradecimentos 18 | -------------- 19 | 20 | Agradecimento especial a minha esposa Keylla Cristhiane de Almeida Corrêa por me ajudar a corrigir a apostila e agradecimentos aos meus colegas desenvolvedores Vitor e Raphael que me ajudaram com a correção e verificação técnica do conteúdo da apostila. 21 | -------------------------------------------------------------------------------- /v0.1/00-introducao/img/image1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/00-introducao/img/image1.jpg -------------------------------------------------------------------------------- /v0.1/01-capitulo_1/01-capitulo_1.md: -------------------------------------------------------------------------------- 1 | 2 | Capítulo 1 3 | ========== 4 | 5 | O que é o PHP? 6 | -------------- 7 | 8 | Essa linguagem foi concebida durante o outono de 1994 por Rasmus 9 | Lerdorf. As primeiras versões não foram disponibilizadas, tendo sido 10 | utilizadas em sua home-page apenas para que ele pudesse ter informações 11 | sobre as visitas que estavam sendo feitas. A primeira versão utilizada 12 | por outras pessoas foi disponibilizada em 1995, e ficou conhecida como 13 | “Personal Home Page Tools” (ferramentas para página pessoal). Era 14 | composta por um sistema bastante simples que interpretava algumas macros 15 | e alguns utilitários que rodavam “por trás” das home-pages: um livro de 16 | visitas, um contador e algumas outras coisas. 17 | 18 | Diferentemente de algumas linguagens para web, o PHP permite criar sites 19 | web dinâmicos, possibilitando uma interação do usuário com o site, 20 | através de formulários feitos em HTML, parâmetros da URL, links e também 21 | serve para criar aplicações embarcadas, aplicações mobile, de linha de 22 | comando. A diferença entre ela com relação ao JavaScript padrão, por 23 | exemplo, é que o código PHP é executado no servidor, sendo enviado para 24 | o cliente apenas HTML puro e o próprio código JavaScript. Hoje em dia 25 | existe NodeJS rodando JavaScript no servidor. Desta maneira é possível 26 | interagir com bancos de dados e aplicações existentes no servidor, com a 27 | vantagem de não expor o código fonte para o cliente. Outra diferença do 28 | PHP com um script CGI escrito em C ou Perl é que o código PHP fica 29 | embutido no próprio HTML, enquanto no outro caso é necessário que o 30 | script CGI gere todo o código HTML, ou leia de um outro arquivo. 31 | 32 | Com o PHP podemos fazer tudo, qualquer coisa feita por algum programa 33 | CGI pode ser feita com PHP, como coletar dados de um formulário, gerar 34 | páginas dinamicamente ou enviar e receber cookies. O PHP também tem como 35 | uma das características mais importantes o suporte a um grande número de 36 | bancos de dados, como dBase, Interbase, Firebird, mSQL, mySQL, Oracle, 37 | Sybase, PostgreSQL e vários outros. Construir uma página baseada em um 38 | banco de dados torna-se uma tarefa extremamente simples com PHP. Além 39 | disso, PHP tem suporte a protocolos como IMAP, SNMP, NNTP, POP3 e, 40 | logicamente, HTTP. Também é possível abrir sockets e interagir com 41 | outros protocolos. 42 | 43 | Como funciona o PHP 44 | ------------------- 45 | 46 | ![Esquema de uma requisição a uma página PHP](img/image2.jpg) 47 | 48 | Requisitos do Sistema Operacional 49 | --------------------------------- 50 | 51 | - **SO:** Linux, Solaris, MAC OS 52 | 53 | - **Servidores web:** Apache 2, Nginx e o Próprio PHP. Pacotes como 54 | LAMP, XAMP e alguns outros também podem ser utilizados. 55 | 56 | - **Banco de Dados:** mSQL, SQL Server, MySql/MariaDB, Sybase, Oracle, 57 | PostgreSQL 58 | 59 | **Nota:** Pode-se usar o comando php -S 0.0.0.0:8001 -t caminho/do/site 60 | 61 | Instalação e configuração do PHP 62 | -------------------------------- 63 | 64 | Para instalar o PHP é necessário o PHP, Apache, MySQL e phpMyAdmin. Abra 65 | o terminal (CTRL+T) e rode os comandos abaixo para instalar os pacotes. 66 | 67 | **Apache:** \~\$ sudo apt-get install apache2 68 | 69 | **MySQL:** \~\$ sudo apt-get install mysql-server e sudo apt-get install 70 | php5-mysqlnd 71 | 72 | **PHP:** \~\$ sudo apt-get install php5 php5-curl php5-mcrypt php5-mysql 73 | libapache2-mod-php5 74 | 75 | **phpMyAdmin:** \~\$ Apache: sudo apt-get install phpMyAdmin 76 | 77 | ### Testando o Apache 78 | 79 | Abra o browser e digite [http://localhost](http://localhost/). 80 | 81 | ![Figura 2: A imagem indica que o Apache está rodando.](img/image3.jpg) 82 | 83 | ### Configurando o Apache 84 | 85 | Para podermos criar nossos projetos de uma forma mais fácil e sem 86 | precisar virar root no sistema, vamos cria um diretório em 87 | */home/seu\_usuario/www.* Todos os seus sites e projetos devem ser 88 | colocados nesse diretório. Finalizando nosso processo, precisamos 89 | modificar o arquivo de configuração do apache apontando para o novo 90 | diretório criado. Abra um terminal (CRTL+T) e rode comando. 91 | 92 | \~\$ sudo gedit /etc/apache2/sites-available/000-default.conf 93 | 94 | Procure por *DocumentRoot /var/www/html* e comente a linha colocando o 95 | sinal tralha na frente da linha. Adicione *DocumentRoot 96 | /home/seu\_usuario/www/* 97 | 98 | ### Testando o PHP 99 | 100 | Crie um arquivo chamado *info.php.* 101 | 102 | ``` 103 | *, para exibir conteúdo na tela utilizar . 166 | 167 | **ATENÇÃO:** Em códigos legados e/ou em código cujo a versão do PHP seja 168 | inferior a 5.4.x ou que não seguem as recomendações de padronização é 169 | comum encontrar a sintaxe sendo usada da seguinte forma: 170 | 171 | --------------------------------------------------------------------------- 172 | Não recomendado 173 | --------------------------------- ----------------------------------------- 174 | 177 | 178 | <% comandos %> Não recomendado 179 | 180 | Ainda utilizado, mas não é recomendado. 181 | --------------------------------------------------------------------------- 182 | 183 | É altamente recomendado o não fechamento da tag PHP e deixar uma linha 184 | em branco no fim do arquivo sem espaços[^1] 185 | 186 | ### Finalização de comando 187 | 188 | Entre cada instrução em PHP é preciso utilizar o ponto e vírgula, assim 189 | como em Pascal, C, Perl e outras linguagens mais conhecidas. 190 | 191 | ### Variáveis 192 | 193 | Toda variável em PHP tem seu nome composto pelo caracter \$ e o nome da 194 | variável, que deve iniciar sempre por uma letra ou o caracter “\_”. PHP 195 | é case sensitive, ou seja, as variáveis *\$quantidade* e *\$Quantidade* 196 | são diferentes. Por isso é preciso ter muito cuidado ao definir os nomes 197 | das variáveis. É bom evitar os nomes em maiúsculas, pois como veremos 198 | mais adiante, o PHP já possui alguma variável pré-definidas cujos nomes 199 | são formados por letras maiúsculas. 200 | 201 | Não há um padrão para nomes de variáveis podemos criar algo como 202 | \$teste\_valor ou \$testeValor desde que a aplicação inteira use o mesmo 203 | padrão. Particurlamente em caso de nome composto eué recomendado o 204 | padrão camelCase. *\$matriculaUsuario*, *\$valorTotal*, etc, pois esse é 205 | o padrão adotado nos argumentos de funções e métodos de classes. 206 | 207 | ### Tipos de variáveis 208 | 209 | - Inteiro 210 | - Array 211 | - Objeto 212 | - String 213 | - Ponto flutuante 214 | - Boolean 215 | 216 | ### Constantes 217 | 218 | Constantes são um tipo especial para armazenar valores fixos, diferentes 219 | de variáveis que podem ter seus valores alterados ao decorrer do script. 220 | No PHP uma constante é definida com caracteres em maiúsculo. 221 | 222 | *define('FILE\_READ\_MODE', 0644);* 223 | 224 | Primeiros passos com PHP 225 | ------------------------ 226 | 227 | Crie um diretório chamado */home/seu\_usuario/www/cap1*. 228 | ``` 229 | 230 | 231 | 232 | 233 | Curso PHP Básico do Jeito Certo 234 | 235 | 236 | 237 | 238 | 239 | ``` 240 | Salve em */home/seu\_usuario/www/PHPBasico/Cap1/exemplo1.php*, no 241 | browser digite 242 | [*http://localhost/*](http://localhost/PHPBasico/Cap1/exemplo1.php)[*PHPBasico*](http://localhost/PHPBasico/Cap1/exemplo1.php)[*/*](http://localhost/PHPBasico/Cap1/exemplo1.php)[*Cap1*](http://localhost/PHPBasico/Cap1/exemplo1.php)[*/*](http://localhost/PHPBasico/Cap1/exemplo1.php)[*exemplo1*](http://localhost/PHPBasico/Cap1/exemplo1.php)[*.php*](http://localhost/PHPBasico/Cap1/exemplo1.php). 243 | 244 | Vimos agora um exemplo prático de um script PHP rodando no navegador com 245 | TAGs HTML 5. Iremos agora modificar o arquivo criado acima e implementar 246 | os conceitos aprendidos nos tópicos já aprendidos. 247 | 248 | **Nota:** Nos arquivos PHP que forem usados para exibição do HTML como 249 | no exemplo acima é recomendado o uso da tag, `<`?= ?`>` ao invés da 250 | tag `<`?php echo ?`>`; 251 | 252 | ``` 253 | 254 | 255 | 256 | 257 | Curso Básico - PHP do Jeito Certo 258 | 259 | 260 | 261 | Bem-vindo ao PHP'; 262 | echo '

Variáveis e Constantes

'; 263 | //Isso é um comentário de uma linha 264 | 265 | //vamos estudar agora as variáveis 266 | $nome = 'Anna Clara'; //Variável tipo string 267 | 268 | $sobrenome = 'Da Fonseca'; //Variável tipo string 269 | 270 | $idade = 33; //Variável tipo integer 271 | 272 | $altura = 1.69; //Variável tipo float 273 | 274 | $genteFina = true; //Variável tipo boolean 275 | 276 | \* Comentário em bloco muito usado para grandes descrições 277 | * Exibindo o resultado no navegador 278 | */ 279 | 280 | echo $nome . '
'; 281 | echo $sobrenome . '
'; 282 | echo $idade . "
"; 283 | echo $altura . '
'; 284 | echo $genteFina . '

'; //Esse 1 representa um true (verdadeiro) 285 | 286 | //Agrupando as variáveis em um texto 287 | echo 'Olá meu nome é ' . $nome . ' ' . $sobrenome . '.
'; 288 | 289 | echo 'Tenho ' . $idade . ' anos e minha altura é ' . $altura . 'm

'; 290 | 291 | //Constantes 292 | define('SO', 'GNU/Linux Ubuntu'); //definindo uma constante 293 | define('FERRAMENTAS_ESCRITORIO', 'LibreOffice'); 294 | 295 | echo 'Eu uso ' . SO . ' com ' . FERRAMENTAS_ESCRITORIO; 296 | 297 | '
O Valor de PI é: ' . M_PI //Constante Interna do PHP 298 | 299 | ?> 300 | 301 | 302 | ``` 303 | 304 | Salve o arquivo e atualize o browser para ver o resultado. 305 | 306 | Dando continuidade à sintaxe básica do PHP, veremos agora como trabalhar 307 | com os arrays. Eles são de suma importância para os desenvolvedores de 308 | qualquer linguagem. Com ele podemos agrupar várias informações em uma 309 | única variável. Também muito útil para agrupar valores de um mesmo 310 | contexto. 311 | 312 | ``` 313 | 314 | 315 | 316 | 317 | Curso Básico - PHP do Jeito Certo 318 | 319 | 320 | 321 | Exemplo 2 323 | 324 |

Arrays Simples

'; 325 | 326 | //Array simples com indice automático 327 | $frutas = array('Goiaba', 'Jaca', 'Uva', 'Cacau'); 328 | 329 | echo '
';
330 |     print_r($frutas);
331 |     echo '
'; 332 | 333 | //Array simples com indice manual 334 | $frutas = array(3 => 'Goiaba', 6 => 'Jaca', 1 => 'Uva', 4 => 'Cacau'); 335 | 336 | echo '
';
337 |     print_r($frutas);
338 |     echo '
'; 339 | 340 | echo 'Exibindo um elemento do array $frutas ' . $frutas[6] . '
'; 341 | 342 | //Outra forma de se montar um array 343 | $marcaCarro[0] = 'BMW'; 344 | $marcaCarro[1] = 'Mercedes'; 345 | $marcaCarro[2] = 'Porche'; 346 | 347 | echo '
';
348 |     print_r($marcaCarro);
349 |     echo '
'; 350 | 351 | echo 'Exibindo um elemento do array $marcaCarro ' . $marcaCarro[0] . '
'; 352 | ?> 353 | 354 | 355 | ``` 356 | 357 | Salve em 358 | */home/seu\_usuario/www/PHPBasico/Cap1/exemplo2.php*, no browser digite 359 | [*http://localhost/*](http://localhost/PHPBasico/Cap1/exemplo2.php)[*PHPBasico*](http://localhost/PHPBasico/Cap1/exemplo2.php)[*/*](http://localhost/PHPBasico/Cap1/exemplo2.php)[*Cap1*](http://localhost/PHPBasico/Cap1/exemplo2.php)[*/exemplo*](http://localhost/PHPBasico/Cap1/exemplo2.php)[*2*](http://localhost/PHPBasico/Cap1/exemplo2.php)[*.php*](http://localhost/PHPBasico/Cap1/exemplo2.php). 360 | 361 | ``` 362 | 363 | 364 | 365 | 366 | Curso Básico - PHP do Jeito Certo 367 | 368 | 369 | 370 | Exemplo 3 372 | 373 |

Arrays Matriz

'; 374 | 375 | $compras = array( 376 | 'semana1' => array( 377 | 'item1' => array( 378 | 'produto' => 'Maça', 379 | 'valor' => 5.87, 380 | 'peso' => '1kg', 381 | ), 382 | 'item2' => array( 383 | 'produto' => 'Feijão', 384 | 'valor' => 3.77, 385 | 'peso' => '1kg', 386 | ), 387 | ), 388 | 'semana2' => array( 389 | 'item1' => array( 390 | 'produto' => 'Arroz', 391 | 'valor' => 7.27, 392 | 'peso' => '5kg', 393 | ), 394 | 'item2' => array( 395 | 'produto' => 'Feijão', 396 | 'valor' => 3.77, 397 | 'peso' => '1kg', 398 | ), 399 | 'item3' => array( 400 | 'produto' => 'Farinha', 401 | 'valor' => 2.01, 402 | 'peso' => '1kg', 403 | ), 404 | ), 405 | ); 406 | 407 | //Exibindo todos os elementos do Array 408 | echo '
';
409 |     print_r($compras);
410 |     echo '
'; 411 | 412 | //exibindo semana1 413 | echo '
';
414 |     print_r($compras['semana1']);
415 |     echo '
'; 416 | 417 | //exibindo semana1 e o item2 418 | echo '
';
419 |     print_r($compras['semana1']['item2']);
420 |     echo '
'; 421 | 422 | //exibindo individualmente o produto farinha 423 | echo 'Hoje eu comprei ' . $compras['semana2']['item3']['produto']; 424 | ?> 425 | 426 | 427 | ``` 428 | 429 | Salve em */home/seu\_usuario/www/PHPBasico/Cap1/exemplo3.php*, no 430 | browser digite 431 | [*http://localhost/*](http://localhost/PHPBasico/Cap1/exemplo3.php)[*PHPBasico*](http://localhost/PHPBasico/Cap1/exemplo3.php)[*/*](http://localhost/PHPBasico/Cap1/exemplo3.php)[*Cap1*](http://localhost/PHPBasico/Cap1/exemplo3.php)[*/exemplo*](http://localhost/PHPBasico/Cap1/exemplo3.php)[*3*](http://localhost/PHPBasico/Cap1/exemplo3.php)[*.php*](http://localhost/PHPBasico/Cap1/exemplo3.php). 432 | 433 | ``` 434 | 435 | 436 | 437 | 438 | Curso Básico - PHP do Jeito Certo 439 | 440 | 441 | 442 | Exemplo 4 444 | 445 |

Arrays Matriz

'; 446 | 447 | $compras = [ 448 | 'semana1' => [ 449 | 'item1' => [ 450 | 'produto' => 'Maça', 451 | 'valor' => 5.87, 452 | 'peso' => '1kg', 453 | ], 454 | 'item2' => [ 455 | 'produto' => 'Feijão', 456 | 'valor' => 3.77, 457 | 'peso' => '1kg', 458 | ], 459 | ], 460 | 'semana2' => [ 461 | 'item1' => [ 462 | 'produto' => 'Arroz', 463 | 'valor' => 7.27, 464 | 'peso' => '5kg', 465 | ], 466 | 'item2' => [ 467 | 'produto' => 'Feijão', 468 | 'valor' => 3.77, 469 | 'peso' => '1kg', 470 | ], 471 | 'item3' => [ 472 | 'produto' => 'Farinha', 473 | 'valor' => 2.01, 474 | 'peso' => '1kg', 475 | ], 476 | ], 477 | ]; 478 | 479 | //Exibindo todos os elementos do Array 480 | echo '
';
481 |     print_r($compras);
482 |     echo '
'; 483 | 484 | //exibindo semana1 485 | echo '
';
486 |     print_r($compras['semana1']);
487 |     echo '
'; 488 | 489 | //exibindo semana1 e o item2 490 | echo '
';
491 |     print_r($compras['semana1']['item2']);
492 |     echo '
'; 493 | 494 | //exibindo individualmente o produto farinha 495 | echo 'Hoje eu comprei ' . $compras['semana2']['item3']['produto']; 496 | ?> 497 | 498 | 499 | ``` 500 | 501 | Salve em */home/seu\_usuario/www/PHPBasico/Cap1/exemplo4.php*, no 502 | browser digite 503 | [*http://localhost/*](http://localhost/PHPBasico/Cap1/exemplo4.php)[*PHPBasico*](http://localhost/PHPBasico/Cap1/exemplo4.php)[*/*](http://localhost/PHPBasico/Cap1/exemplo4.php)[*Cap1*](http://localhost/PHPBasico/Cap1/exemplo4.php)[*/exemplo*](http://localhost/PHPBasico/Cap1/exemplo4.php)[*4*](http://localhost/PHPBasico/Cap1/exemplo4.php)[*.php*](http://localhost/PHPBasico/Cap1/exemplo4.php). 504 | 505 | **Nota:** Esse último exemplo mostra como os arrays estão sendo 506 | utilizados principalmente nas versões mais novas do PHP e também é um 507 | tipo de notação que vem sendo adotadas em frameworks. 508 | 509 | Referências 510 | ----------- 511 | 512 | Arrays em php é um assunto muito vasto, existem muitas funções internas 513 | do php só para tratamento de arrays. Conheça essas funções do php em: 514 | **http://php.net/manual/pt\_BR/book.array.php** 515 | 516 | Resumo do capítulo 517 | ------------------ 518 | 519 | Nesse capítulo aprendemos o básico do básico no PHP. Como criar e 520 | manipular variáveis do tipo string, boolean, integer e arrays, criar e 521 | usar constantes, comentários simples e em blocos, concatenamos o texto 522 | com variáveis com o operador '.' (ponto). 523 | 524 | Exercícios 525 | ---------- 526 | 527 | 1. Crie um array simples contendo 7 animais selvagem e exiba na tela 528 | cada item com seu respectivo índice; 529 | 530 | 2. Crie um array simples contendo 5 animais domésticos e exiba na tela 531 | cada item com seu respectivo índice; 532 | 533 | 3. Crie uma matriz chamado animais dividindo em animais domésticos e 534 | selvagens, para facilitar pode atribuir os dois arrays simples 535 | criados nos itens anteriores. Exiba na tela um texto contendo, “meu 536 | animal selvagem favorito é: ” e “meu animal doméstico favorito é: ” 537 | e escolha um de sua preferência. 538 | -------------------------------------------------------------------------------- /v0.1/01-capitulo_1/img/image2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/01-capitulo_1/img/image2.jpg -------------------------------------------------------------------------------- /v0.1/01-capitulo_1/img/image3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/01-capitulo_1/img/image3.jpg -------------------------------------------------------------------------------- /v0.1/01-capitulo_1/img/image4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/01-capitulo_1/img/image4.jpg -------------------------------------------------------------------------------- /v0.1/02-capitulo_2/02-capitulo_2.md: -------------------------------------------------------------------------------- 1 | 2 | Capítulo 2 3 | ========== 4 | 5 | Nesse capítulo aprenderemos sobre os operadores suportados pelo PHP. 6 | Quais seus tipos precedências e seus tipos. 7 | 8 | Operadores 9 | ---------- 10 | 11 | Um operador é utilizado para realizar operações entre um ou mais valores 12 | (ou expressões, no jargão de programação) e retornar apenas um valor 13 | final. Vamos agora aos operadores. 14 | 15 | ### Aritméticos 16 | 17 | Só podem ser utilizados quando os operandos são números (integer ou 18 | float). Se forem de outro tipo, terão seus valores convertidos antes da 19 | realização da operação. 20 | 21 | - \+ Adição 22 | - \- Subtração 23 | - \* Multiplicação 24 | - \/ Divisão 25 | - \% Módulo (resto da divisão) 26 | 27 | ### De strings 28 | 29 | Só há um operador exclusivo para strings (ponto): 30 | 31 | - \. Concatenação 32 | 33 | ### De atribuição 34 | 35 | Existe um operador básico de atribuição e diversos derivados. Sempre 36 | retornam o valor atribuído. No caso dos operadores derivados de 37 | atribuição, a operação é feita entre os dois operandos, sendo atribuído 38 | o resultado para o primeiro. A atribuição é sempre por valor, e não por 39 | referência. 40 | 41 | - \= Atribuição simples 42 | - \+= Atribuição com adição 43 | - \-= Atribuição com subtração 44 | - \*= Atribuição com multiplicação 45 | - \/= Atribuição com divisão 46 | - \%= Atribuição com módulo 47 | - \.= Atribuição com concatenação 48 | 49 | ### 50 | 51 | ### Bit a bit 52 | 53 | Comparam dois números bit a bit. 54 | 55 | - \& “e” lógico 56 | - \| “ou” lógico (pipe) 57 | - \^ “ou” exclusivo 58 | - \~ Não (inversão) 59 | - << shift left 60 | - >> shift right 61 | 62 | ### Lógico 63 | 64 | Utilizados para inteiros representando valores booleanos. 65 | 66 | - and “e” lógico 67 | - or “ou” lógico (pipe) 68 | - xor “ou” exclusivo 69 | - ! Não (inversão) 70 | - && “e” lógico 71 | - \|\| “ou” lógico (pipe pipe) 72 | 73 | ### Comparação 74 | 75 | As comparações são feitas entre os valores contidos nas variáveis, e não 76 | as referências. Sempre retornam um valor booleano. 77 | 78 | - == Igual a 79 | - ! Diferente 80 | - < Menor que 81 | - > Maior que 82 | - <= Menor ou igual a 83 | - >= Maior ou igual a 84 | 85 | ### Expressão condicional ou ternária 86 | 87 | Existe um operador de seleção que é ternário. O interpretador PHP avalia 88 | a primeira expressão. Se ela for verdadeira, a expressão retorna o valor 89 | de expressão2. Senão, retorna o valor de expressão3. 90 | 91 | `If 26 | 27 | = 18) { 32 | echo 'Opa, já posso dirigir e beber'; 33 | } 34 | ?> 35 | ... 36 | ``` 37 | 38 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/condicional1.php*, no 39 | browser digite 40 | [*http://localhost/*](http://localhost/PHPBasico/Cap3/condicional1.php)[*PHPBasico*](http://localhost/PHPBasico/Cap3/condicional1.php)[*/*](http://localhost/PHPBasico/Cap3/condicional1.php)[*Cap*](http://localhost/PHPBasico/Cap3/condicional1.php)[*3*](http://localhost/PHPBasico/Cap3/condicional1.php)[*/*](http://localhost/PHPBasico/Cap3/condicional1.php)[*condicional1*](http://localhost/PHPBasico/Cap3/condicional1.php)[*.php*](http://localhost/PHPBasico/Cap3/condicional1.php). 41 | 42 | Nota: Repare que entre o “**if**” e o parênteses “**(**“, existe um 43 | espaço, o mesmo ocorre entre o fechamento do parênteses “**)**” e a 44 | abertura da chaves “**{**“. Não há espaço depois da abertura nem 45 | fechamento das chaves.[^2] 46 | 47 | #### else 48 | 49 | ``` 50 | ... 51 |

If, Else

52 | 53 | = 18) { 58 | echo 'Opa, já posso dirigir e beber'; 59 | } else { 60 | //retorna false 61 | echo 'Não posso dirigir nem beber'; 62 | } 63 | ?> 64 | ... 65 | ``` 66 | 67 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/condicional2.php*, no 68 | browser digite 69 | [*http://localhost/*](http://localhost/PHPBasico/Cap3/condicional2.php)[*PHPBasico*](http://localhost/PHPBasico/Cap3/condicional2.php)[*/*](http://localhost/PHPBasico/Cap3/condicional2.php)[*Cap*](http://localhost/PHPBasico/Cap3/condicional2.php)[*3*](http://localhost/PHPBasico/Cap3/condicional2.php)[*/*](http://localhost/PHPBasico/Cap3/condicional2.php)[*condicional*](http://localhost/PHPBasico/Cap3/condicional2.php)[*2*](http://localhost/PHPBasico/Cap3/condicional2.php)[*.php*](http://localhost/PHPBasico/Cap3/condicional2.php). 70 | 71 | #### If, elseif e else 72 | 73 | 74 | ``` 75 | ... 76 |

If, Elseif e Else

77 | 78 | = 18) { 83 | //retorna true 84 | echo 'Opa, já posso dirigir e beber'; 85 | } elseif ($idade >= 12 && $idade <= 17) { 86 | //retorna true se idade for maior e 87 | //igual a 17 e menor e igual a 10 88 | echo 'Não posso dirigir nem beber'; 89 | } else { 90 | //retorna false 91 | echo 'Muito criança, não vai nem para escola sozinho'; 92 | } 93 | ?> 94 | ... 95 | ``` 96 | 97 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/condicional3.php*, no 98 | browser digite 99 | [*http://localhost/*](http://localhost/PHPBasico/Cap3/condicional3.php)[*PHPBasico*](http://localhost/PHPBasico/Cap3/condicional3.php)[*/*](http://localhost/PHPBasico/Cap3/condicional3.php)[*Cap*](http://localhost/PHPBasico/Cap3/condicional3.php)[*3*](http://localhost/PHPBasico/Cap3/condicional3.php)[*/*](http://localhost/PHPBasico/Cap3/condicional3.php)[*condicional*](http://localhost/PHPBasico/Cap3/condicional3.php)[*3*](http://localhost/PHPBasico/Cap3/condicional3.php)[*.php*](http://localhost/PHPBasico/Cap3/condicional3.php). 100 | 101 | #### Outro exemplo if e eles 102 | 103 | ``` 104 | ... 105 |

If e Else

106 | 107 | 126 | ... 127 | ``` 128 | 129 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/condicional4.php*, no 130 | browser digite 131 | [*http://localhost/*](http://localhost/PHPBasico/Cap3/condicional4.php)[*PHPBasico*](http://localhost/PHPBasico/Cap3/condicional4.php)[*/*](http://localhost/PHPBasico/Cap3/condicional4.php)[*Cap*](http://localhost/PHPBasico/Cap3/condicional4.php)[*3*](http://localhost/PHPBasico/Cap3/condicional4.php)[*/*](http://localhost/PHPBasico/Cap3/condicional4.php)[*condicional*](http://localhost/PHPBasico/Cap3/condicional4.php)[*4*](http://localhost/PHPBasico/Cap3/condicional4.php)[*.php*](http://localhost/PHPBasico/Cap3/condicional4.php). 132 | 133 | Veremos agora outra forma de condicional o switch (\$var) … case. 134 | 135 | #### Switch 136 | 137 | Assim como no if, esse comando fará comparações, e caso o valor seja 138 | verdadeiro, entrará na condição. Vamos a um exemplo bem simples. 139 | 140 | ``` 141 | ... 142 |

switch e case

143 | 144 | 156 | ... 157 | ``` 158 | 159 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/condicional5.php*, no 160 | browser digite 161 | [*http://localhost/*](http://localhost/PHPBasico/Cap3/condicional4.php)[*PHPBasico*](http://localhost/PHPBasico/Cap3/condicional4.php)[*/*](http://localhost/PHPBasico/Cap3/condicional4.php)[*Cap*](http://localhost/PHPBasico/Cap3/condicional4.php)[*3*](http://localhost/PHPBasico/Cap3/condicional4.php)[*/*](http://localhost/PHPBasico/Cap3/condicional4.php)[*condicional*](http://localhost/PHPBasico/Cap3/condicional4.php)[*5*](http://localhost/PHPBasico/Cap3/condicional4.php)[*.php*](http://localhost/PHPBasico/Cap3/condicional4.php). 162 | 163 | Note que no final de cada case exite o comando break, esse comando é 164 | obrigatório, e será explicado em outro exercício. 165 | 166 | ``` 167 | ... 168 |

switch e case

169 | 170 | 185 | ... 186 | ``` 187 | 188 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/condicional6.php*, no 189 | browser digite 190 | [*http://localhost/*](http://localhost/PHPBasico/Cap3/condicional6.php)[*PHPBasico*](http://localhost/PHPBasico/Cap3/condicional6.php)[*/*](http://localhost/PHPBasico/Cap3/condicional6.php)[*Cap*](http://localhost/PHPBasico/Cap3/condicional6.php)[*3*](http://localhost/PHPBasico/Cap3/condicional6.php)[*/*](http://localhost/PHPBasico/Cap3/condicional6.php)[*condicional*](http://localhost/PHPBasico/Cap3/condicional6.php)[*6*](http://localhost/PHPBasico/Cap3/condicional6.php)[*.php*](http://localhost/PHPBasico/Cap3/condicional6.php). 191 | 192 | O comando **default**:, serve como um “**else**”, ou seja, no caso de 193 | false em todos os “**case**” ele assume um valor padrão. 194 | 195 | ``` 196 | ... 197 |

switch e case

198 | 199 | 219 | ... 220 | ``` 221 | 222 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/condicional7.php*, no 223 | browser digite 224 | [*http://localhost/*](http://localhost/PHPBasico/Cap3/condicional7.php)[*PHPBasico*](http://localhost/PHPBasico/Cap3/condicional7.php)[*/*](http://localhost/PHPBasico/Cap3/condicional7.php)[*Cap*](http://localhost/PHPBasico/Cap3/condicional7.php)[*3*](http://localhost/PHPBasico/Cap3/condicional7.php)[*/*](http://localhost/PHPBasico/Cap3/condicional7.php)[*condicional*](http://localhost/PHPBasico/Cap3/condicional7.php)[*7*](http://localhost/PHPBasico/Cap3/condicional7.php)[*.php*](http://localhost/PHPBasico/Cap3/condicional7.php). 225 | 226 | Nota: Repare que entre o “**switch**” e o parênteses “**(**“, existe um 227 | espaço, o mesmo ocorre entre o fechamento do parênteses “**)**” e a 228 | abertura da chaves “**{**“. Não há espaço depois da abertura nem 229 | fechamento das chaves.[^3] 230 | 231 | ### Repetição 232 | 233 | As estruturas de repetições ou laços, servem para que uma determinada 234 | situação seja repetida enquanto ela seja verdadeira. Fazem parte dessa 235 | lista o while, do, for e foreach. 236 | 237 | #### While 238 | 239 | 240 | ``` 241 | ... 242 |

While

243 | 244 | '; 250 | } 251 | ?> 252 | ... 253 | ``` 254 | 255 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/repeticao1.php*, no 256 | browser digite . 257 | 258 | Nota: Assim como no **if** e no **switch**, observe o espaço entre o 259 | comando “**while**” e o parênteses “**(**“ e o espaço entre o fechamento 260 | do parênteses “**)**” com a abertura da chave “**{**“.[^4] 261 | 262 | #### Do while 263 | 264 | ``` 265 | ... 266 |

Do While

267 | 268 | '; 274 | } while ($contador <= 10); 275 | 276 | ?> 277 | ... 278 | ``` 279 | 280 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/repeticao2.php*, no 281 | browser digite 282 | [http://localhost/PHPBasico/Cap3/repeticao](http://localhost/PHPBasico/Cap3/repeticao1.php)[2](http://localhost/PHPBasico/Cap3/repeticao1.php)[.php](http://localhost/PHPBasico/Cap3/repeticao1.php). 283 | 284 | Nota: A diferença entre o **while** e o **do while** é que o **while** 285 | testa se é verdadeiro e executa enquanto o **do while** executa pelo 286 | menos uma vez antes de testar. Veja a forma como foi codificado o **do 287 | while**, segue o mesmo padrão do FIG[^5] 288 | 289 | #### For 290 | 291 | ``` 292 | ... 293 |

For

294 | 295 | '; 298 | } 299 | ?> 300 | ... 301 | ``` 302 | 303 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/repeticao3.php*, no 304 | browser digite 305 | [http://localhost/PHPBasico/Cap3/repeticao](http://localhost/PHPBasico/Cap3/repeticao1.php)[3](http://localhost/PHPBasico/Cap3/repeticao1.php)[.php](http://localhost/PHPBasico/Cap3/repeticao1.php). 306 | 307 | #### For com array 308 | 309 | ``` 310 | ... 311 |

For com array

312 | 313 | '; 319 | } 320 | ?> 321 | ... 322 | ``` 323 | 324 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/repeticao4.php*, no 325 | browser digite 326 | [http://localhost/PHPBasico/Cap3/repeticao](http://localhost/PHPBasico/Cap3/repeticao4.php)[4](http://localhost/PHPBasico/Cap3/repeticao4.php)[.php](http://localhost/PHPBasico/Cap3/repeticao4.php). 327 | 328 | #### Foreach simples 329 | 330 | ``` 331 | ... 332 |

Foreach simples

333 | 334 | '; 339 | } 340 | ?> 341 | ... 342 | ``` 343 | 344 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/repeticao5.php*, no 345 | browser digite 346 | [http://localhost/PHPBasico/Cap3/repeticao](http://localhost/PHPBasico/Cap3/repeticao5.php)[5](http://localhost/PHPBasico/Cap3/repeticao5.php)[.php](http://localhost/PHPBasico/Cap3/repeticao5.php). 347 | 348 | #### Foreach chave (key) e valor (value) 349 | 350 | ``` 351 | ... 352 |

Foreach chave valor

353 | 354 | 'Suzuki', 357 | 2 => 'Yamaha', 358 | 3 => 'Honda', 359 | 4 => 'Triumph', 360 | 5 => 'Ducati' 361 | ]; 362 | 363 | foreach ($motos as $key => $value) { 364 | echo $key . ' - ' . $value . '
'; 365 | } 366 | ?> 367 | ... 368 | ``` 369 | 370 | Salve em */home/seu\_usuario/www/PHPBasico/Cap3/repeticao6.php*, no 371 | browser digite 372 | [http://localhost/PHPBasico/Cap3/repeticao](http://localhost/PHPBasico/Cap3/repeticao5.php)[6](http://localhost/PHPBasico/Cap3/repeticao5.php)[.php](http://localhost/PHPBasico/Cap3/repeticao5.php). 373 | 374 | Nota: o **for** e o **foreach** também seguem a padronização do FIG[^6] 375 | 376 | Resumo do capítulo 377 | ------------------ 378 | 379 | Nesse capítulo aprendemos um pouco mais do básico do PHP. Vimos como é 380 | possível tomar decisões no código com os comandos ***if***, ***else*** e 381 | ***elseif***, e com o comando ***switch*** ***case***, uma outra maneira 382 | de tomar decisões. Com os comandos ***while***, ***do while***, 383 | ***for*** e ***foreach*** descobrimos como repetir informações de uma 384 | coleção de dados ou lista. 385 | 386 | Exercícios 387 | ---------- 388 | 389 | 1. Crie um script que informe se o aluno foi “Aprovado”, “Reprovado” ou 390 | está em “Recuperação”. Com os seguintes critérios, maior ou igual a 391 | 6, aluno está aprovado, menor ou igual a 5, aluno reprovado. 392 | 393 | 2. Crie uma estrutura de controle com o “switch case” para exibir se um 394 | modelo de carro é do ano atual ou não. 395 | 396 | 3. Crie um contador cujo exiba o valor de 4 até 100 contando de 2 em 2, 397 | ou seja, 4, 6, 8 etc. 398 | 399 | 4. Aproveite o arquivo exemplo4.php do Capítulo 1 para listar todos os 400 | itens e subitens do array “\$compras” criado no arquivo. 401 | 402 | 5. Crie um script que conte de 0 até 1000 e quando chegar no número da 403 | sua idade, escreva na tela “Eu tenho X anos” e quando chegar ao 404 | número 169 interromper o script. 405 | -------------------------------------------------------------------------------- /v0.1/04-capitulo_4/04-capitulo_4.md: -------------------------------------------------------------------------------- 1 | 2 | Capítulo 4 3 | ========== 4 | 5 | Nesse capítulo aprenderemos sobre as funções do PHP, e como elas são 6 | muito úteis e evitam a repetição de código. A partir de agora, sairemos 7 | do basicão e entraremos um pouco mais a fundo na linguagem e estamos 8 | dando um passo para o nível intermediário. 9 | 10 | Funções 11 | ------- 12 | 13 | O principal objetivo das funções é simplificar a vida do desenvolvedor. 14 | Aprendendo e usando as ***functions***, você será capaz de implementar o 15 | **DRY** (***Don't Repeat Yourself***). Algumas caraterísticas de uma 16 | função, ela pode ou não esperar um argumento ou mais, e sempre returna 17 | um valor mesmo que nulo. Vamos aos exemplos. 18 | 19 | ### Função sem argumentos 20 | 21 | ``` 22 | ... 23 | 24 |

Função sem argumento

25 | 26 | 41 | ... 42 | ``` 43 | 44 | Salve em */home/seu\_usuario/www/PHPBasico/Cap4/funcao1.php*, no browser 45 | digite 46 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap4/funcao1.php)[4](http://localhost/PHPBasico/Cap4/funcao1.php)[/](http://localhost/PHPBasico/Cap4/funcao1.php)[funcao1](http://localhost/PHPBasico/Cap4/funcao1.php)[.php](http://localhost/PHPBasico/Cap4/funcao1.php). 47 | 48 | **Nota:** Em uma função as variáveis criadas dentro dela, só é válida 49 | dentro da própria função. Variáveis criadas fora da função também não 50 | são acessadas pela função somente se utilizar o escopo GLOBALS dentro da 51 | função. 52 | 53 | ### Função sem argumentos com variável fora do escopo 54 | 55 | ``` 56 | ... 57 | 58 |

Função sem argumento com variável fora do 59 | escopo

60 | 61 | ' . $valor1; 79 | 80 | ?> 81 | ... 82 | ``` 83 | 84 | Salve em */home/seu\_usuario/www/PHPBasico/Cap4/funcao2.php*, no browser 85 | digite 86 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap4/funcao1.php)[4](http://localhost/PHPBasico/Cap4/funcao1.php)[/](http://localhost/PHPBasico/Cap4/funcao1.php)[funcao](http://localhost/PHPBasico/Cap4/funcao1.php)[2](http://localhost/PHPBasico/Cap4/funcao1.php)[.php](http://localhost/PHPBasico/Cap4/funcao1.php). 87 | 88 | **Nota:** Repare que o valor da soma continuou o mesmo. Isso porque a 89 | variável $valor1 só é utilizada fora da função. 90 | 91 | ### Função sem argumento com variável global 92 | ``` 93 | ... 94 | 95 |

Função sem argumento com variável global

96 | 97 | ' . $valor1; 115 | 116 | ?> 117 | ... 118 | ``` 119 | 120 | Salve em */home/seu\_usuario/www/PHPBasico/Cap4/funcao3.php*, no browser 121 | digite 122 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap4/funcao1.php)[4](http://localhost/PHPBasico/Cap4/funcao1.php)[/](http://localhost/PHPBasico/Cap4/funcao1.php)[funcao](http://localhost/PHPBasico/Cap4/funcao1.php)[3](http://localhost/PHPBasico/Cap4/funcao1.php)[.php](http://localhost/PHPBasico/Cap4/funcao1.php). 123 | 124 | **Nota:** Repare que o valor da soma modificou. Isso porque a variável 125 | \$valor1 foi precedida da palavra-chave “global” dentro da função. 126 | 127 | ### Função com argumento 128 | ``` 129 | ... 130 | 131 |

Função com argumento

132 | 133 | 149 | ... 150 | ``` 151 | 152 | Salve em */home/seu\_usuario/www/PHPBasico/Cap4/funcao4.php*, no browser 153 | digite 154 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap4/funcao4.php)[4](http://localhost/PHPBasico/Cap4/funcao4.php)[/](http://localhost/PHPBasico/Cap4/funcao4.php)[funcao](http://localhost/PHPBasico/Cap4/funcao4.php)[4](http://localhost/PHPBasico/Cap4/funcao4.php)[.php](http://localhost/PHPBasico/Cap4/funcao4.php). 155 | 156 | **Nota:** Observe que nesse exemplo eu passei um argumento para a função 157 | chamada $nome, com isso posso alterar livremente a variável nome sem 158 | ter que mudar a função. 159 | 160 | ### Função com dois argumentos ou mais 161 | ``` 162 | ... 163 |

Função com dos argumentos ou mais

164 | 165 | 183 | ... 184 | ``` 185 | 186 | Salve em */home/seu\_usuario/www/PHPBasico/Cap4/funcao5.php*, no browser 187 | digite 188 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap4/funcao5.php)[4](http://localhost/PHPBasico/Cap4/funcao5.php)[/](http://localhost/PHPBasico/Cap4/funcao5.php)[funcao](http://localhost/PHPBasico/Cap4/funcao5.php)[5.](http://localhost/PHPBasico/Cap4/funcao5.php)[php](http://localhost/PHPBasico/Cap4/funcao5.php). 189 | 190 | **Nota:** Nesse exemplo passamos 2 parâmetros, note que **$idade** está 191 | declarado com o valor 100, isso indica que o parâmetro tem um valor 192 | padrão e também quer dizer que pode ser omitido na chamada da função. 193 | 194 | Resumo do capítulo 195 | ------------------ 196 | 197 | Nesse capítulo aprendemos como criar e chamar funções. Elas são muito 198 | úteis para evitar reescrita do código. Com as funções você começará a 199 | criar suas próprias bibliotecas e reutilizá-las em outros projetos. 200 | 201 | Exercícios 202 | ---------- 203 | 204 | 1. Crie uma função que passe um parâmetro em forma de array contendo 205 | nome, nota1, nota2, nota3 e nota4, Calcule a média do aluno e exiba 206 | no final o nome do aluno e a situação se está aprovado, reprovado ou 207 | em recuperação e a sua média. O critério é o mesmo do exercício 1 do 208 | Capítulo 3. 209 | 210 | 2. Crie uma função que retorne os elementos pares de um loop de 211 | forma automática. 212 | -------------------------------------------------------------------------------- /v0.1/05-capitulo_5/05-capitulo_5.md: -------------------------------------------------------------------------------- 1 | 2 | Capítulo 5 3 | ========== 4 | 5 | Nesse capítulo abordaremos como disparar e-mail com o PHP usando a 6 | função mail. 7 | 8 | Função Mail 9 | ----------- 10 | 11 | Essa função é responsável por disparar e-mails usando o PHP. Ela suporta 12 | todas as configurações que são usadas normalmente em um webmail. 13 | Configurações como, anexo, mime-type entre outras. 14 | 15 | Abaixo um breve descritivo dos parâmetros da função. 16 | 17 | - **$to (*string*)** – Destinatário (para quem vai a mensagem); 18 | 19 | - **$subject (*string*)** – Assunto; 20 | 21 | - **$message (*string*)** – Mensagem; 22 | 23 | - **$adtional\_headers (*string*)** – Informações do Cabeçalho do 24 | e-mail (opcional); 25 | 26 | - **$adition\_parameters (*string*)** – Usado para definição 27 | de sendmail\_paht() (opcional); 28 | 29 | ### Envio de e-mail simples 30 | ``` 31 | ... 32 |

Envio de e-mail simples

33 | 34 | 41 | ... 42 | ``` 43 | 44 | Salve em */home/seu\_usuario/www/PHPBasico/Cap5/email1.php*, no browser 45 | digite 46 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap5/email1.php)[5](http://localhost/PHPBasico/Cap5/email1.php)[/](http://localhost/PHPBasico/Cap5/email1.php)[email1](http://localhost/PHPBasico/Cap5/email1.php)[.](http://localhost/PHPBasico/Cap5/email1.php)[php](http://localhost/PHPBasico/Cap5/email1.php). 47 | 48 | ### Envio de e-mail usando o header 49 | ``` 50 | ... 51 |

Envio de e-mail usando o header

52 | 53 | 64 | ... 65 | ``` 66 | 67 | Salve em */home/seu\_usuario/www/PHPBasico/Cap5/email2.php*, no browser 68 | digite 69 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap5/email2.php)[5](http://localhost/PHPBasico/Cap5/email2.php)[/](http://localhost/PHPBasico/Cap5/email2.php)[email2](http://localhost/PHPBasico/Cap5/email2.php)[.](http://localhost/PHPBasico/Cap5/email2.php)[php](http://localhost/PHPBasico/Cap5/email2.php). 70 | 71 | ### Envio de e-mail em HTML 72 | ``` 73 | ... 74 |

Envio de e-mail em HTML

75 | 76 | Isso é um teste de envio 82 |

Aqui pode ir um texto longo, imagens e listas

83 |
84 |

Pode incluir qualquer tag HTML e CSS também

85 | "; 86 | 87 | $headers = 'MIME-Version: 1.0' . "\r\n"; 88 | $headers .= 'Content-type:text/html;charset=UTF-8' . "\r\n"; 89 | $headers .= 'From: webmaster , alguém 90 | 101 | ... 102 | ``` 103 | 104 | Salve em */home/seu\_usuario/www/PHPBasico/Cap5/email3.php*, no browser 105 | digite 106 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap5/email3.php)[5](http://localhost/PHPBasico/Cap5/email3.php)[/](http://localhost/PHPBasico/Cap5/email3.php)[email](http://localhost/PHPBasico/Cap5/email3.php)[3](http://localhost/PHPBasico/Cap5/email3.php)[.](http://localhost/PHPBasico/Cap5/email3.php)[php](http://localhost/PHPBasico/Cap5/email3.php). 107 | 108 | ### Testando se o e-mail foi enviado 109 | ``` 110 | ... 111 |

Testando se o e-mail foi enviado

112 | 113 | Isso é um teste de envio 119 |

Aqui pode ir um texto longo, imagens e listas

120 |
121 |

Pode incluir qualquer tag HTML e CSS também

122 | "; 123 | 124 | $headers = 'MIME-Version: 1.0' . "\r\n"; 125 | $headers .= 'Content-type:text/html;charset=UTF-8' . "\r\n"; 126 | $headers .= 'From: webmaster , alguém 127 | E-mail enviado com sucesso!'; 138 | } else { 139 | echo 'Erro: Não foi possível enviar o e-mail!'; 140 | } 141 | ?> 142 | ... 143 | ``` 144 | 145 | Salve em */home/seu\_usuario/www/PHPBasico/Cap5/email4.php*, no browser 146 | digite 147 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap5/email4.php)[5](http://localhost/PHPBasico/Cap5/email4.php)[/](http://localhost/PHPBasico/Cap5/email4.php)[email](http://localhost/PHPBasico/Cap5/email4.php)[4](http://localhost/PHPBasico/Cap5/email4.php)[.](http://localhost/PHPBasico/Cap5/email4.php)[php](http://localhost/PHPBasico/Cap5/email4.php). 148 | 149 | Resumo do capítulo 150 | ------------------ 151 | 152 | Nesse capítulo aprendemos como fazer envio de e-mail diretamente com o 153 | PHP. No entanto, para elas funcionarem o seu servidor de hospedagem 154 | precisa estar com as configurações feitas, caso contrário o envio 155 | falhará. 156 | -------------------------------------------------------------------------------- /v0.1/06-capitulo_6/06-capitulo_6.md: -------------------------------------------------------------------------------- 1 | Capítulo 6 2 | ========== 3 | 4 | Nesse capítulo você aprenderá como recuperar dados de formulários, seus 5 | tipos (POST, GET e REQUEST) e formulários que suportam envio de 6 | arquivos. 7 | 8 | Recuperando dados de Formulários 9 | -------------------------------- 10 | 11 | Para recuperar dados vindo de um fomulário é preciso saber qual tipo de 12 | protocolo foi informado no formulário. Para formulário do tipo 13 | ***post*** as informações devem ser recebidas pela variável global de 14 | PHP do tipo **$_POST[]** e formulário do tipo ***get*** devem ser 15 | recebidos pela variável global **$_GET[]**. Existe um tipo especial 16 | que é o $_REQUEST[], que recebe tanto o tipo *get* quanto o tipo 17 | *post*, porém seu uso deve ser muito restrito (evitado). 18 | 19 | **Nota:** Todas as vezes que sua aplicação receber dados de um 20 | formulário ou tiver interação com o usuário esses dados **DEVEM** ser 21 | tratados por meio de algumas funções do PHP. 22 | 23 | ### Recuperando campos de texto via $_POST[]. 24 | ``` 25 | ... 26 |

Formulário simples 1 (POST)

27 | 28 |
29 | 30 | 31 | 32 | 34 | 35 |
36 | 37 | 39 | 40 |

41 | 42 |
43 | 44 | Recuperando campos de texto do tipo post'; 48 | 49 | echo 'Nome: ' . $_POST['nome']; 50 | echo '
E-mail: ' . $_POST['email']; 51 | endif; 52 | ?> 53 | ... 54 | ``` 55 | 56 | Salve em */home/seu_usuario/www/PHPBasico/Cap6/formSimples1.php*, no 57 | browser digite . 58 | 59 | **Nota:** Todos os campos são recuperados da mesma forma, porém campos 60 | do tipo checkbox tem um comportamento um pouco diferente dos outros. 61 | 62 | ### Recuperando campos de texto via $_GET[]. 63 | 64 | Salve o arquivo anterior como *formSimples2.php* e altere o ***method*** 65 | do formulário para o tipo **get** e substitua ***$_POST*** por 66 | ***$_GET***. Digite no browser 67 | [http://localhost/PHPBasico/Cap6/formSimples](http://localhost/PHPBasico/Cap6/formSimples1.php)[2](http://localhost/PHPBasico/Cap6/formSimples1.php)[.php](http://localhost/PHPBasico/Cap6/formSimples1.php). 68 | 69 | **Nota:** Uma atenção especial deve ser dada ao se recuperar pelo método 70 | get, esse protocolo só aceita 255 caracteres. 71 | 72 | **Obs:** links em modo geral são recuperados também com o 73 | **$_GET[]**. 74 | 75 | ### Recuperando campos do tipo checkbox e radiobutton. 76 | ``` 77 | ... 78 |

Formulário simples 3

79 | 80 |
81 | 82 | 83 | 85 | 86 | Não sei PHP
87 | 88 | 89 | PHP Básico
90 | 91 | PHP Intermediário
93 | 94 | 95 | PHP Avançado
96 | 97 | Jedi 98 |

99 | 100 | 101 | 3.x 102 |
103 | 104 | 4.x 105 |
106 | 107 | 5.0 108 |
109 | 110 | 5.3 111 |
112 | 113 | 5.5 114 |


115 | 116 | 117 | 118 |
119 | 120 | Recuperando campos Checkbox e Radiobutton'; 124 | 125 | echo 'Qual seu nível de conhecimento em PHP?
'; 126 | echo 'R: ' . $_POST['conhecimento'] . '

'; 127 | echo 'Quais versão do PHP já utilizou?
'; 128 | echo 'R: ' . $_POST['versao'][0] . '
'; //recupera o primeiro item selecionado 129 | 130 | var_dump($_POST['versao']); //Recupera todos os itens marcados 131 | endif; 132 | ?> 133 | ... 134 | ``` 135 | 136 | *Salve em /home/seu_usuario/www/PHPBasico/Cap6/formSimples3.php, no 137 | browser digite* 138 | [*http://localhost/PHPBasico/Cap6/formSimples*](http://localhost/PHPBasico/Cap6/formSimples3.php)[*3*](http://localhost/PHPBasico/Cap6/formSimples3.php)[*.php*](http://localhost/PHPBasico/Cap6/formSimples3.php)*.* 139 | 140 | Tratamento de dados recuperados de formulário 141 | --------------------------------------------- 142 | 143 | É altamente recomendado tratar e validar quais quer dado que venha de um 144 | formulário, isso vai garantir um pouco mais de segurança em seu site. 145 | Abordarei aqui as principais e mais comuns funções de tratamento e 146 | validação. O Exercício a seguir mostrará como aplicar essas validações. 147 | 148 | ### Tratamento de formulário com trim(), addslashes(), htmlspecialchars() e htmlentities() 149 | ``` 150 | ... 151 |

Tratando form 1

152 | 153 |
154 | 155 | 156 | 157 | 158 | 159 |
160 | 161 | 162 | 163 | 164 |

165 | 166 |
167 | 168 | Recuperando e tratando campos de texto do tipo post'; 171 | Nome: ' . addslashes($_POST['nome']); 172 | 173 | echo '

Nome: ' . htmlspecialchars(trim($_POST['nome']), ENT_COMPAT); //padrão 174 | 175 | echo '
E-mail: ' . htmlspecialchars(trim($_POST['email']), ENT_QUOTES); 176 | echo '

Nome: ' . htmlentities(trim($_POST['nome'])); 177 | echo '
E-mail: ' . htmlentities(trim($_POST['email'])); 178 | echo '

Nome: ' . htmlspecialchars(addslashes(trim($_POST['nome']))); 179 | 180 | echo '
E-mail: ' . htmlentities(addslashes(trim($_POST['email']))); 181 | endif; 182 | ?> 183 | ... 184 | ``` 185 | 186 | *Salve em /home/seu_usuario/www/PHPBasico/Cap6/tratandoForm1.php, no 187 | browser digite* 188 | [*http://localhost/PHPBasico/Cap6/*](http://localhost/PHPBasico/Cap6/tratandoForm1.php)[*tratandoForm1.php*](http://localhost/PHPBasico/Cap6/tratandoForm1.php)*.* 189 | 190 | ### *Tratamento de formulário com nl2br()* 191 | ``` 192 | ... 193 | 194 |

Tratando form 2

195 | 196 |
197 | 198 | 199 | 200 | 201 |
202 | 203 | 204 | 205 | 206 |
207 | 208 | 209 | 210 | 211 |

212 | 213 |
214 | 215 |
Nome: ' . htmlspecialchars(addslashes(trim($_POST['nome']))); 218 | echo '
E-mail: ' . htmlentities(addslashes(trim($_POST['email']))); 219 | echo '

Nome: ' . addslashes(nl2br(trim($_POST['comentario']))); 220 | endif; 221 | ?> 222 | ... 223 | ``` 224 | 225 | *Salve em /home/seu_usuario/www/PHPBasico/Cap6/tratandoForm2.php, no 226 | browser digite* 227 | [*http://localhost/PHPBasico/Cap6/*](http://localhost/PHPBasico/Cap6/tratandoForm2.php)[*tratandoForm*](http://localhost/PHPBasico/Cap6/tratandoForm2.php)[*2*](http://localhost/PHPBasico/Cap6/tratandoForm2.php)[*.php*](http://localhost/PHPBasico/Cap6/tratandoForm2.php)*.* 228 | 229 | Envio (upload) de arquivo 230 | ------------------------- 231 | 232 | O upload de arquivos é muito comum em um site. Mas para que ele funcione 233 | seu formulário precisa informar ao HTML que ele será ser usado com a 234 | finalidade de upload, para isso basta utilizar o atributo 235 | *enctype="multipart/form-data"* na tag form. 236 | 237 | ### Envio de dados com PHP e validação 238 | ``` 239 | ... 240 |

Upload de arquivo e validação

241 | 242 |
243 | 244 | 245 | 246 | 247 |

248 | 249 | 250 | 251 |

252 | 253 |
254 | 255 | Erro: O nome do campo deve ser informado!'; 266 | exit; 267 | } 268 | } 269 | 270 | function verificaCampoVazio($nomeCampo = nul, array $campo = null) 271 | { 272 | if ($_FILES[$nomeCampo]['size'] !== 0) { 273 | return true; 274 | } else { 275 | echo ' - Nenhum arquivo '. $nomeCampo .' para ser enviado!
'; 276 | } 277 | } 278 | 279 | function validaCampo(array $campo = null) 280 | { 281 | if (is_array($campo)) { 282 | return true; 283 | } else { 284 | echo 'Erro: O Campo deve ser um array!'; 285 | exit; 286 | } 287 | 288 | if ($campo) { 289 | return true; 290 | } else { 291 | echo 'Erro: O Campo deve ser informado!'; 292 | exit; 293 | } 294 | } 295 | 296 | function upload($nomeCampo = null, array $campo = null) 297 | { 298 | 299 | $dir = __DIR__ . '/upload/'; 300 | 301 | if (validaNomeCampo($nomeCampo)) { 302 | if (validaCampo($campo)) { 303 | $arquivo = $uploadfile = $dir . basename($_FILES[$nomeCampo]['name']); 304 | 305 | if(move_uploaded_file($_FILES[$nomeCampo]['tmp_name'], $uploadfile)) 306 | { 307 | echo "Arquivo válido e enviado com sucesso.
\n"; 308 | } else { 309 | echo "Não foi possível gravar oarquivo
\n"; 310 | } 311 | } 312 | } 313 | } 314 | 315 | if (verificaCampoVazio('img', $_FILES['img'])) { 316 | //verificando se upload é uma imagem 317 | if (!empty($_FILES['img']) && ($_FILES['img']['type'] == 'image/jpeg' || 318 | $_FILES['img']['type'] == 'image/jpg' || 319 | $_FILES['img']['type'] == 'image/png' || 320 | $_FILES['img']['type'] == 'image/gif')) : 321 | 322 | echo 'Grava a imagem no servidor ou banco. Para isso é necessário utilizar $_FILES["img"]["tmp_name"] e ter permissão de escrita no servidor.

'; 323 | 324 | upload('img', $_FILES['img']); 325 | else : 326 | echo 'Erro: Arquivo enviado não é uma imagem.

'; 327 | endif; 328 | } 329 | 330 | if (verificaCampoVazio('doc', $_FILES['doc'])) { 331 | //verificando se upload é um documento ou planílha ODF ou PDF 332 | if ($_FILES['doc']['type'] == 'application/vnd.oasis.opendocument.spreadsheet' || 333 | $_FILES['doc']['type'] == 'application/vnd.oasis.opendocument.text' || 334 | $_FILES['doc']['type'] == 'application/pdf') : 335 | echo 'Grava a imagem no servidor ou banco. Para isso é necessário utilizar $_FILES["doc"]["tmp_name"] e ter permissão de escrita no servidor.

'; 336 | 337 | upload('doc', $_FILES['doc']); 338 | else : 339 | 'Erro: Arquivo enviado não documento ou planílha ODF ou PDF.

'; 340 | endif; 341 | } 342 | endif; 343 | ?> 344 | ... 345 | ``` 346 | 347 | *Salve em /home/seu_usuario/www/PHPBasico/Cap6/formUpload.php, no 348 | browser digite* 349 | [*http://localhost/PHPBasico/Cap6/*](http://localhost/PHPBasico/Cap6/formUpload.php)[*formUpload*](http://localhost/PHPBasico/Cap6/formUpload.php)[*.php*](http://localhost/PHPBasico/Cap6/formUpload.php)*.* 350 | 351 | Evitando o CSRF (Cross Site Request Forgery) 352 | -------------------------------------------- 353 | 354 | Como já foi falado várias vezes durante o curso, segurança é um ponto 355 | que devemos sempre estar atento. Nesse tópico abordaremos mais ponto de 356 | segurança, o **CSRF**, popularmente conhecido como token de formulário. 357 | Para facilitar o entendimento e testes, faremos os exercícios em várias 358 | etapas e dividiremos em 2 arquivos. 359 | ``` 360 | ... 361 |

Evitando o CSRF (Cross Site Request Forgery)

362 | 363 |
364 | 365 | 366 | 367 | 368 |
369 | 370 | 371 | 372 |
373 | 374 | 375 | 376 |

377 | 378 |
379 | ... 380 | ``` 381 | 382 | *Salve em /home/seu_usuario/www/PHPBasico/Cap6/formEvitandoCSRF.php, no 383 | browser digite* 384 | [http://localhost/PHPBasico/Cap6/](http://localhost/PHPBasico/Cap6/formEvitandoCSRF.php)[*formEvitandoCSRF*](http://localhost/PHPBasico/Cap6/formEvitandoCSRF.php)[*.php*](http://localhost/PHPBasico/Cap6/formEvitandoCSRF.php)*.* 385 | 386 | Continuando a edição do arquivo criado anteriormente. Nesse momento 387 | faremos as principais validações e recuperação dos dados enviados pelo 388 | formulário no PHP. Abra o arquivo 389 | *home/seu_usuario/www/PHPBasico/Cap6/formEvitandoCSRF.php* e edite logo 390 | abaixo da tag ****. 391 | ``` 392 | ... 393 | 394 |
Erro: O Campo nome deve ser preenchido.
'; 413 | } 414 | 415 | if (trim($email) == "") { 416 | $erros['email'] = '
Erro: O Campo e-mail deve ser preenchido.
'; 417 | } 418 | 419 | if (trim($comentario) == "") { 420 | $erros['comentario'] = '
Erro: O Campo comentário deve ser preenchido.
'; 421 | } 422 | 423 | //Se não houver erro exibe os dados na tela 424 | if (empty($erros)) { 425 | echo 'Nome: ' . addslashes(trim($nome)) . '
'; 426 | echo 'E-mail: ' . addslashes(trim($email)) . '
'; 427 | echo 'Comentário:

' . addslashes(trim(nl2br($comentario))) . '
'; 428 | } 429 | } 430 | ?> 431 | 432 |

Evitando o CSRF (Cross Site Request Forgery)

433 | ... 434 | ``` 435 | 436 | *Salve em /home/seu_usuario/www/PHPBasico/Cap6/formEvitandoCSRF.php, no 437 | browser digite* 438 | [http://localhost/PHPBasico/Cap6/](http://localhost/PHPBasico/Cap6/formEvitandoCSRF.php)[*formEvitandoCSRF*](http://localhost/PHPBasico/Cap6/formEvitandoCSRF.php)[*.php*](http://localhost/PHPBasico/Cap6/formEvitandoCSRF.php)*.* 439 | 440 | Vamos agora testar nosso formulário e veremos como ainda está vulnerável 441 | a ataques. Abra o terminal (CTRL+T) e digite o seguinte comando: ***curl 442 | -d 'nome=qualquer nome&email=qualquer email&comentario=qualquer 443 | comentário'*** 444 | e veja 445 | que os valores digitados foram enviados e exibidos na tela. Isso indica 446 | o quão vulnerável ainda está seu formulário. 447 | 448 | Dando continuidade ao exercício proposto criaremos um arquivo para fazer 449 | as funções de validações contra o CSRF. 450 | ``` 451 | 482 | ``` 483 | *Salve em /home/seu_usuario/www/PHPBasico/Cap6/formEvitandoCSRF.php.* 484 | 485 | *Continue editando o arquivo formEvitandoCSRF.php*. Posicione o cursor 486 | depois do comentário '*if ($_POST) {*', e envolva todo o código PHP 487 | com a validação contra o CSRF, como no exercício abaixo. 488 | ``` 489 | ... 490 | //verifica se houve subimit 491 | if ($_POST) { 492 | if (verificaToken(isset($_POST['token']))) { 493 | extract($_POST); 494 | 495 | if (trim($nome) == "") { 496 | ... 497 | 498 | } //fim do if (verificaToken()) 499 | 500 | ... 501 | 502 | }// fim do if ($_POST) 503 | ?> 504 | ... 505 | ``` 506 | *Salve em /home/seu_usuario/www/PHPBasico/Cap6/formEvitandoCSRF.php*. 507 | 508 | Agora para finalizar, crie um campo do tipo hidden com o nome token. 509 | Esse campo pode ser o primeiro campo do formulário. 510 | ``` 511 | ... 512 |

Evitando o CSRF (Cross Site Request Forgery)

513 | 514 |
515 | 516 | 517 | 518 | ... 519 | ``` 520 | 521 | *Salve em /home/seu_usuario/www/PHPBasico/Cap6/formEvitandoCSRF.php, no 522 | browser digite* 523 | [http://localhost/PHPBasico/Cap6/](http://localhost/PHPBasico/Cap6/formEvitandoCSRF.php)[*formEvitandoCSRF*](http://localhost/PHPBasico/Cap6/formEvitandoCSRF.php)[*.php*](http://localhost/PHPBasico/Cap6/formEvitandoCSRF.php)*.* 524 | 525 | Vamos agora testar nosso formulário novamente. Abra o terminal (CTRL+T) 526 | e digite o seguinte comando: ***curl -d 'nome=qualquer 527 | nome&email=qualquer email&comentario=qualquer comentário'*** 528 | e veja 529 | que os valores digitados não são exibidos na tela. Isso indica que se 530 | alguém tentar enviar dados sem ser pelo site não conseguirá. 531 | 532 | Resumo do Capítulo 533 | ------------------ 534 | 535 | Nesse capítulo aprendemos como recuperar dados passados através de 536 | formulários pelos métodos **POST** e **GET**, como recuperar dados de 537 | campos checkbox, tratamento e validações dos dados recebidos, upload de 538 | arquivos e como tonar seus formulários mais seguros contra o **CSRF**. 539 | 540 | Exercícios 541 | ---------- 542 | 543 | 1. Crie um formulário de cadastro básico de cliente contendo os campos: 544 | Nome, Sobrenome, data de nascimento, senha e-mail e cpf; 545 | 546 | 2. Faça as validações necessárias para aplicar a segurança e evitar o 547 | CSRF; 548 | 549 | 3. Se as validações tiverem certas, exibir os dados na tela para 550 | o usuário. 551 | -------------------------------------------------------------------------------- /v0.1/07-capitulo_7/07-capitulo_7.md: -------------------------------------------------------------------------------- 1 | 2 | Capítulo 7 3 | ========== 4 | 5 | Nesse capítulo você aprenderá como trabalhar com diretórios e arquivos 6 | no PHP. No capítulo anterior, criamos um formulário para envio de 7 | arquivos para o servidor, mas o PHP é muito mais poderoso que isso, 8 | podemos manipular os diretórios como fazemos no mundo Linux. 9 | 10 | Listar diretórios e arquivos 11 | ---------------------------- 12 | 13 | O PHP possui funções internas que permite ler a estrutura diretórios do 14 | servidor (desde que possuam a devida permissão). Criaremos um script 15 | para exibição de diretórios do servidor. 16 | 17 | getcwd(), chdir(), dir() e scandir() 18 | ------------------------------------ 19 | 20 | 1. ... 21 | 22 | 2. <h1>Listagem de diretórios</h1> 23 | 24 | 3. 4. <h2>getcwd(), exibe o diretório atual</h2> 25 | 26 | 5. <?= getcwd() ?> 27 | 28 | 6. 7. <h2>chdir(), muda o diretório atual</h2> 29 | 30 | 8. <?php 31 | 32 | 9. echo getcwd() . '<br />'; 33 | 34 | 10. chdir('../Cap6'); 35 | 36 | 11. echo getcwd() . '<br />'; 37 | 38 | 12. chdir('upload'); 39 | 40 | 13. echo getcwd() . '<br />'; 41 | 42 | 14. ?> 43 | 44 | 15. 16. <h2>dir(), lista diretórios como uma lista</h2> 45 | 46 | 17. <?php 47 | 48 | 18. \$dir = dir('/var/'); 49 | 50 | 19. echo "Caminho: " . \$dir->path . "\\n<br />"; 51 | 52 | 20. 21. /\* Esta é a forma correta de varrer o diretório \*/ 53 | 54 | 22. while (false !== (\$item = \$dir->read())) { 55 | 56 | 23. echo \$item."\\n<br />"; 57 | 58 | 24. } 59 | 60 | 25. 26. \$dir->close(); 61 | 62 | 27. ?> 63 | 64 | 28. 29. <h2>scandir(), lista diretórios como array</h2> 65 | 66 | 30. <?php 67 | 68 | 31. \$dir = scandir('/var/'); 69 | 70 | 32. var\_dump(\$dir); 71 | 72 | 33. ?> 73 | 74 | 34. ... 75 | 76 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/listarDiretorios.php, no 77 | browser digite* 78 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/listarDiretorios.php)[7](http://localhost/PHPBasico/Cap7/listarDiretorios.php)[/](http://localhost/PHPBasico/Cap7/listarDiretorios.php)[*listarDiretorios*](http://localhost/PHPBasico/Cap7/listarDiretorios.php)[*.php*](http://localhost/PHPBasico/Cap7/listarDiretorios.php)*.* 79 | 80 | Criar, renomear, mover e deletar diretórios 81 | ------------------------------------------- 82 | 83 | Além da leitura podemos também criar, renomear, mover e excluir 84 | diretórios, desde que se tenha permissão para isso no servidor. 85 | 86 | ### Criar um diretório 87 | 88 | 1. ... 89 | 90 | 2. <h1>Criar diretórios</h1> 91 | 92 | 3. <h2>mkdir(), cria um diretório</h2> 93 | 94 | 4. <?php 95 | 96 | 5. mkdir('novo\_dir', 0777); // Cria uma nova pasta dentro do diretório 97 | atual 98 | 99 | 6. ?> 100 | 101 | 7. ... 102 | 103 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/criarDiretorios.php, no 104 | browser digite* 105 | [http://localhost/PHPBasico/Cap7/](http://localhost/PHPBasico/Cap7/listarDiretorios.php)[cri](http://localhost/PHPBasico/Cap7/listarDiretorios.php)[*arDiretorios*](http://localhost/PHPBasico/Cap7/listarDiretorios.php)[*.php*](http://localhost/PHPBasico/Cap7/listarDiretorios.php)*.* 106 | 107 | ### Renomear um diretório 108 | 109 | 1. ... 110 | 111 | 2. <h1>Renomear diretórios</h1> 112 | 113 | 3. 4. <h2>rename(), muda o nome do diretório ou move um 114 | diretório</h2> 115 | 116 | 5. <?php 117 | 118 | 6. //mkdir('novo\_dir', 0777); 119 | 120 | 7. rename('novo\_dir/', 'teste/'); 121 | 122 | 8. ?>... 123 | 124 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/renomearDiretorios.php, 125 | no browser digite* 126 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/renomearDiretorios.php)[7](http://localhost/PHPBasico/Cap7/renomearDiretorios.php)[/](http://localhost/PHPBasico/Cap7/renomearDiretorios.php)[renomear](http://localhost/PHPBasico/Cap7/renomearDiretorios.php)[*Diretorios*](http://localhost/PHPBasico/Cap7/renomearDiretorios.php)[*.php*](http://localhost/PHPBasico/Cap7/renomearDiretorios.php)*.* 127 | 128 | ### Deletar um diretório 129 | 130 | 1. ... 131 | 132 | 2. <h1>Deletar diretórios</h1> 133 | 134 | 3. 4. <h2>rmdir(), apaga um diretório</h2> 135 | 136 | 5. <?php 137 | 138 | 6. //mkdir('novo\_dir', 0777); 139 | 140 | 7. //rename('novo\_dir/', 'teste/'); 141 | 142 | 8. rmdir('teste/'); 143 | 144 | 9. ?> 145 | 146 | 10. ... 147 | 148 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/deletarDiretorios.php, 149 | no browser digite* 150 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/deletarDiretorios.php)[7](http://localhost/PHPBasico/Cap7/deletarDiretorios.php)[/](http://localhost/PHPBasico/Cap7/deletarDiretorios.php)[dele](http://localhost/PHPBasico/Cap7/deletarDiretorios.php)[*tarDiretorios*](http://localhost/PHPBasico/Cap7/deletarDiretorios.php)[*.php*](http://localhost/PHPBasico/Cap7/deletarDiretorios.php). 151 | 152 | **Nota:** Em todos os casos, podemos nos referenciar aos endereços dos 153 | diretórios como: './nome\_do\_diretorio' ou usando o caminho completo, 154 | algo como '/home/seu\_usuário/www/PHPBasico/Cap7/nome\_do\_diretorio'. 155 | 156 | Criar arquivos 157 | -------------- 158 | 159 | Assim como podemos criar diretórios pelo PHP, podemos criar arquivos. 160 | Vamos a um exemplo prático. 161 | 162 | fopen(), fwrite(), fclose() 163 | --------------------------- 164 | 165 | 1. ... 166 | 167 | 2. <h1>Criar arquivos</h1> 168 | 169 | 3. 4. <h2>fopen(), cria um arquivo se não existir ou abre um 170 | arquivo existente</h2> 171 | 172 | 5. <?php 173 | 174 | 6. \$criaArquivo = fopen('novo\_arquivo.txt', 'x'); //Cria o arquivo 175 | novo\_arquivo.txt com permissao de escrita 176 | 177 | 7. ?> 178 | 179 | 8. 9. <h2>fwrite(), escreve no arquivo criado ou 180 | aberto</h2> 181 | 182 | 10. <?php 183 | 184 | 11. \$escreve = fwrite(\$criaArquivo, 'Texto a ser inserido no arquivo. 185 | Pode ser substituído por uma variável contendo um texto longo'); 186 | 187 | 12. ?> 188 | 189 | 13. 14. <h2>fclose(), fecha o arquivo criado ou aberto</h2> 190 | 191 | 15. <?php 192 | 193 | 16. fclose(\$criaArquivo); 194 | 195 | 17. ?> 196 | 197 | 18. ... 198 | 199 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/criaArquivo1.php, no 200 | browser digite* 201 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/criarArquivos.php)[7](http://localhost/PHPBasico/Cap7/criarArquivos.php)[/](http://localhost/PHPBasico/Cap7/criarArquivos.php)[*criaArquivo*](http://localhost/PHPBasico/Cap7/criarArquivos.php)[*1*](http://localhost/PHPBasico/Cap7/criarArquivos.php)[*.php*](http://localhost/PHPBasico/Cap7/criarArquivos.php). 202 | 203 | Para usar o fopen() precisamos que o segundo argumento da função informe 204 | qual vai ser o tipo de permissão do arquivo. Veja na tabela abaixo quais 205 | são os tipos suportados. 206 | 207 | Modo Descrição 208 | -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 209 | *'r'* Abre somente para leitura; coloca o ponteiro do arquivo no começo do arquivo. 210 | *'r+'* Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo. 211 | *'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. 212 | *'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. 213 | *'a'* Abre somente para escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. 214 | *'a+'* Abre para leitura e escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. 215 | *'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. Isto é equivalente a especificar as flags *O\_EXCL|O\_CREAT* para a chamada de sistema *open(2)*. 216 | *'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. Isto é equivalente a especificar as flags *O\_EXCL|O\_CREAT* para a chamada de sistema *open(2)*. 217 | 218 | No nosso exemplo, usamos o “x” que indica cria e abre um arquivo e caso 219 | exista ele acusa um erro. Para validar o que o quadro informa, rode 220 | novamente o scripit anterior. *No browser digite* 221 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/criarArquivos.php)[7](http://localhost/PHPBasico/Cap7/criarArquivos.php)[/](http://localhost/PHPBasico/Cap7/criarArquivos.php)[*criaArquivo*](http://localhost/PHPBasico/Cap7/criarArquivos.php)[*1*](http://localhost/PHPBasico/Cap7/criarArquivos.php)[*.php*](http://localhost/PHPBasico/Cap7/criarArquivos.php). 222 | 223 | Perceba que foi exibido um erro. 224 | 225 | **Nota:** Sempre que utilizarmos a função fopen() no final do processo 226 | precisamos fazer o fechamento do arquivo com o fclose(). 227 | 228 | Criando um novo arquivo pegando um conteúdo externo 229 | --------------------------------------------------- 230 | 231 | 1. ... 232 | 233 | 2. <h1>Cria arquivo pegando conteúdo externo</h1> 234 | 235 | 3. 4. <?php 236 | 237 | 5. \$conteudoExterno = file\_get\_contents('criaArquivo1.php'); //Pega 238 | o conteúdo do arquivo 239 | 240 | 6. 7. if (@\$arquivo = fopen('novo\_arquivo1.txt', 'x')) { 241 | 242 | 8. if (fwrite(\$arquivo, \$conteudoExterno)) { 243 | 244 | 9. echo 'Conteúdo inserido no arquivo com sucesso.<br />'; 245 | 246 | 10. } else { 247 | 248 | 11. echo 'Erro: Não foi possível gravar o conteúdo no arquivo.<br 249 | />'; 250 | 251 | 12. } 252 | 253 | 13. 14. fclose(\$arquivo); 254 | 255 | 15. } else { 256 | 257 | 16. echo 'Erro: Não foi possível criar o arquivo.<br />'; 258 | 259 | 17. } 260 | 261 | 18. ?> 262 | 263 | 19. ... 264 | 265 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/criaArquivo2.php, no 266 | browser digite* 267 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/criaArquivo2.php)[7](http://localhost/PHPBasico/Cap7/criaArquivo2.php)[/](http://localhost/PHPBasico/Cap7/criaArquivo2.php)[*criaArquivo*](http://localhost/PHPBasico/Cap7/criaArquivo2.php)[*2*](http://localhost/PHPBasico/Cap7/criaArquivo2.php)[*.php*](http://localhost/PHPBasico/Cap7/criaArquivo2.php). 268 | 269 | Mais uma vez utilizamos o tipo de abertura de arquivo como “x”, execute 270 | novamente o arquivo e veja que depois do tratamento, é exibida uma 271 | mensagem de erro mais amigável. 272 | 273 | Lendo arquivos 274 | -------------- 275 | 276 | Podemos ler os arquivos com a função fgets(). Essa função lê a primeira 277 | linha do arquivo. Podemos ler também uma quantidade X de bytes de uma 278 | linha e para ler todo um arquivo podemos usa a função 279 | file\_get\_contents(). 280 | 281 | ftegs(), Ler arquivo simples 282 | ---------------------------- 283 | 284 | 1. ... 285 | 286 | 2. <h1>fgets(), ler arquivo simples</h1> 287 | 288 | 3. 4. <?php 289 | 290 | 5. if (\$arquivo = fopen('novo\_arquivo1.txt', 'r')) { 291 | 292 | 6. \$linha = fgets(\$arquivo); 293 | 294 | 7. 8. echo htmlentities(\$linha1); // lê a primeira linha do arquivo 295 | exibe 296 | 297 | 9. 10. fclose(\$arquivo); 298 | 299 | 11. } else { 300 | 301 | 12. echo 'Erro: Não foi possível ler o arquivo.<br />'; 302 | 303 | 13. } 304 | 305 | 14. ?> 306 | 307 | 15. ... 308 | 309 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/lerArquivo1.php, no 310 | browser digite* 311 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[7](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[/](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[ler](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[*Arquivo*](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[*1*](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[*.php*](http://localhost/PHPBasico/Cap7/lerArquivo1.php). 312 | 313 | fgets(), ler arquivo por bytes 314 | ------------------------------ 315 | 316 | 1. ... 317 | 318 | 2. <h1>fgets(), ler arquivo por byte</h1> 319 | 320 | 3. 4. <?php 321 | 322 | 5. if (\$arquivo = fopen('novo\_arquivo1.txt', 'r')) { 323 | 324 | 6. \$linha = fgets(\$arquivo, 16); 325 | 326 | 7. 8. echo htmlentities(\$linha); // lê a primeira linha do arquivo 327 | exibe 328 | 329 | 9. 10. fclose(\$arquivo); 330 | 331 | 11. } else { 332 | 333 | 12. echo 'Erro: Não foi possível ler o arquivo.<br />'; 334 | 335 | 13. } 336 | 337 | 14. ... 338 | 339 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/lerArquivo2.php, no 340 | browser digite* 341 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[7](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[/](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[ler](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[*Arquivo*](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[*2*](http://localhost/PHPBasico/Cap7/lerArquivo1.php)[*.php*](http://localhost/PHPBasico/Cap7/lerArquivo1.php). 342 | 343 | fgets(), ler todo o arquivo com um loop 344 | --------------------------------------- 345 | 346 | 1. ... 347 | 348 | 2. <h1>fgets(), lendo todo o arquivo com loop</h1> 349 | 350 | 3. 4. <?php 351 | 352 | 5. if (\$arquivo = fopen('novo\_arquivo1.txt', 'r')) { 353 | 354 | 6. while (!feof(\$arquivo)) { 355 | 356 | 7. \$linha = fgets(\$arquivo); 357 | 358 | 8. echo htmlentities(\$linha) . '<br />'; 359 | 360 | 9. } 361 | 362 | 10. 11. fclose(\$arquivo); 363 | 364 | 12. } else { 365 | 366 | 13. echo 'Erro: Não foi possível ler o arquivo.<br />'; 367 | 368 | 14. } 369 | 370 | 15. ?> 371 | 372 | 16. ... 373 | 374 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/lerArquivo3.php, no 375 | browser digite* 376 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/lerArquivo3.php)[7](http://localhost/PHPBasico/Cap7/lerArquivo3.php)[/](http://localhost/PHPBasico/Cap7/lerArquivo3.php)[ler](http://localhost/PHPBasico/Cap7/lerArquivo3.php)[*Arquivo*](http://localhost/PHPBasico/Cap7/lerArquivo3.php)[*3*](http://localhost/PHPBasico/Cap7/lerArquivo3.php)[*.php*](http://localhost/PHPBasico/Cap7/lerArquivo3.php). 377 | 378 | file\_get\_content(), ler todo o arquivo 379 | ---------------------------------------- 380 | 381 | 1. ... 382 | 383 | 2. <h1>file\_get\_contents(), lendo todo o arquivo com 384 | loop</h1> 385 | 386 | 3. 4. <?php 387 | 388 | 5. if (\$arquivo = file\_get\_contents('criaArquivo1.php')) { 389 | 390 | 6. echo htmlentities(\$arquivo); 391 | 392 | 7. } else { 393 | 394 | 8. echo 'Erro: Não foi possível ler o arquivo.<br />'; 395 | 396 | 9. } 397 | 398 | 10. ?> 399 | 400 | 11. ... 401 | 402 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/lerArquivo4.php, no 403 | browser digite* 404 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[7](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[/](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[ler](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[*Arquivo*](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[*4*](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[*.php*](http://localhost/PHPBasico/Cap7/lerArquivo4.php). 405 | 406 | Apagando um arquivo 407 | ------------------- 408 | 409 | Pelo PHP podemos também apagar arquivos usando a função unlink(). 410 | 411 | unlink(), apaga um arquivo 412 | -------------------------- 413 | 414 | 1. ... 415 | 416 | 2. <h1>unlink(), apaga um arquivo</h1> 417 | 418 | 3. 4. <?php 419 | 420 | 5. \$arquivo = 'novo\_arquivo1.txt'; 421 | 422 | 6. if (file\_exists(\$arquivo)) { 423 | 424 | 7. if (unlink(\$arquivo)) { 425 | 426 | 8. echo 'Arquivo deletado com sucesso.'; 427 | 428 | 9. } else { 429 | 430 | 10. echo 'Erro: Não foi possível deletar o arquivo.'; 431 | 432 | 11. } 433 | 434 | 12. } else { 435 | 436 | 13. echo 'Erro: Arquivo não encontrado.<br />'; 437 | 438 | 14. } 439 | 440 | 15. ?> 441 | 442 | 16. ... 443 | 444 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap7/apagarArquivo.php, no 445 | browser digite* 446 | [http://localhost/PHPBasico/Cap](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[7](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[/](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[apagar](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[*Arquivo*](http://localhost/PHPBasico/Cap7/lerArquivo4.php)[*.php*](http://localhost/PHPBasico/Cap7/lerArquivo4.php). 447 | 448 | Resumo do Capítulo 449 | ------------------ 450 | 451 | Nesse capítulo aprendemos as funções que manipulam diretórios e 452 | arquivos, vimos desde a listagem de diretórios e arquivos, como também 453 | sua criação e exclusão. 454 | 455 | Exercícios 456 | ---------- 457 | 458 | 1. Crie um diretório chamado ***exercicio***; 459 | 460 | 2. Crie dois subdiretórios em ***execicio*** simultaneamente chamados 461 | ***arquivos1*** e ***arquivos2***; 462 | 463 | 3. Crie um diretório chamado ***teste*** e o renomeie para 464 | ***aplicacao***; 465 | 466 | 4. Liste todos os diretórios criados; 467 | 468 | 5. Apague o diretório ***aplicacao***; 469 | 470 | 6. Crie um arquivo chamado ***lorem.txt***, contendo dois parágrafos 471 | lorem ipsum dentro do diretório ***arquivos1***; 472 | 473 | 7. Adicione um terceiro parágrafo ao arquivo ***lorem.txt*** no final 474 | do arquivo; 475 | 476 | 8. Faça uma cópia do arquivo ***lorem.txt*** para ***lorem2.txt*** no 477 | diretório ***arquivos2***; 478 | -------------------------------------------------------------------------------- /v0.1/08-capitulo_8/08-capitulo_8.md: -------------------------------------------------------------------------------- 1 | 2 | Capítulo 8 3 | ========== 4 | 5 | Nesse capítulo você aprenderá funções diversas do PHP, diferente dos 6 | outros capítulos a dinâmica desse será um pouco diferente, pois não 7 | abordaremos um tópico específico. A ideia desse capítulo é mostrar de 8 | uma forma geral a maioria das principais funções do PHP. 9 | 10 | substr() 11 | -------- 12 | 13 | O substr() é uma função que serve para pegar um determinado pedaço da 14 | string. Ela é muito útil quando temos um arquivo .txt ou .csv e 15 | precisamos ler um layout de arquivo e exportar para um banco de dados 16 | por exemplo. 17 | 18 | 1. ... 19 | 20 | 2. <h1>substr()</h1> 21 | 22 | 3. 4. <?php 23 | 24 | 5. \$string = 'Mussum ipsum cacilds, vidis litro abertis. fonte: 25 | http://mussumipsum.com/'; 26 | 27 | 6. 7. \$subString1 = substr(\$string, 0, 5); //Mussum; 28 | 29 | 8. \$subString2 = substr(\$string, 27, 13); //litro abertis 30 | 31 | 9. 10. echo \$string . '<br /><br />'; 32 | 33 | 11. echo 'Primeira substring: ' . \$subString1 . '<br />'; 34 | 35 | 12. echo 'Segunda substring: ' . \$subString2 . '<br />'; 36 | 37 | 13. 14. echo '<br /><br />'; 38 | 39 | 15. 16. \$arquivo = '../Cap7/novo\_arquivo.txt'; 40 | 41 | 17. if (file\_exists(\$arquivo)) { 42 | 43 | 18. \$arquivo = fopen(\$arquivo, 'r'); 44 | 45 | 19. \$linha = fgets(\$arquivo); 46 | 47 | 20. 21. echo htmlentities(\$linha) . '<br />'; 48 | 49 | 22. \$subString3 = substr(\$linha, 24, 8); //Arquivo 50 | 51 | 23. echo 'Terceira substring: ' . \$subString3 . '<br />'; 52 | 53 | 24. } else { 54 | 55 | 25. echo 'Erro: Arquivo não encontrado.<br />'; 56 | 57 | 26. } 58 | 59 | 27. 28. ?> ... 60 | 61 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/substr.php, no browser 62 | digite* 63 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/substr.php)[*substr*](http://localhost/PHPBasico/Cap8/substr.php)[*.php*](http://localhost/PHPBasico/Cap8/substr.php). 64 | 65 | strlen() 66 | -------- 67 | 68 | Essa função conta a quantidade de caracteres de uma string. 69 | 70 | 1. ... 71 | 72 | 2. <h1>strlen()</h1> 73 | 74 | 3. 4. <?php 75 | 76 | 5. \$string = 'Mussum ipsum cacilds, vidis litro abertis. fonte: 77 | http://mussumipsum.com/'; 78 | 79 | 6. 7. echo \$string; 80 | 81 | 8. echo '<br />Essa string tem <strong>' . 82 | strlen(\$string) . '</strong> caracteres'; 83 | 84 | 9. ?> 85 | 86 | 10. ... 87 | 88 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/strlen.php, no browser 89 | digite* 90 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/substr.php)[*strlen*](http://localhost/PHPBasico/Cap8/substr.php)[*.php*](http://localhost/PHPBasico/Cap8/substr.php). 91 | 92 | count() 93 | ------- 94 | 95 | Essa função conta a quantidades de elementos de um array ou objeto. 96 | 97 | 1. ... 98 | 99 | 2. <h1>count()</h1> 100 | 101 | 3. 4. <?php 102 | 103 | 5. \$array = \['Pera', 'Uva', 'Maça', 'Mamão'\]; 104 | 105 | 6. 7. var\_dump(\$array); 106 | 107 | 8. echo '<br />Essa array contém <strong>' . 108 | count(\$array) . '</strong> itens'; 109 | 110 | 9. 10. ?> 111 | 112 | 11. ... 113 | 114 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/count.php, no browser 115 | digite* 116 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/count.php)[*count*](http://localhost/PHPBasico/Cap8/count.php)[*.php*](http://localhost/PHPBasico/Cap8/count.php). 117 | 118 | trim() 119 | ------ 120 | 121 | Essa função tira os espaços em branco antes e depois da string. Ela é 122 | muito utilizada em campos vindos de formulários. 123 | 124 | nl2br() 125 | ------- 126 | 127 | Essa função insere quebras de linha HTML antes de todas newlines em uma 128 | string, também utilizada em campos vindos de formulários. 129 | 130 | crypt(), md5(), sha1() e base64\_encode() 131 | ----------------------------------------- 132 | 133 | Essas funções são geralmente utilizadas para hash, senhas ou qualquer 134 | coisa que precisa ser criptografada. 135 | 136 | 1. ... 137 | 138 | 2. <h1>crypt(), md5(), sha1() e base64\_encode()</h1> 139 | 140 | 3. 4. <?php 141 | 142 | 5. \$string = '123456789'; 143 | 144 | 6. 7. echo 'A string <strong>' . \$string . '</strong> 145 | usando a função <strong>crypt()</strong> é exibida 146 | assim: <strong>' . crypt(\$string) . '</strong>. <br 147 | />'; 148 | 149 | 8. echo 'A string <strong>' . \$string . '</strong> usando 150 | a função <strong>md5()</strong> é exibida assim: 151 | <strong>' . md5(\$string) . '</strong>. <br />'; 152 | 153 | 9. echo 'A string <strong>' . \$string . '</strong> usando 154 | a função <strong>sha1()</strong> é exibida assim: 155 | <strong>' . sha1(\$string) . '</strong>. <br />'; 156 | 157 | 10. echo 'A string <strong>' . \$string . '</strong> usando 158 | a função <strong>base64\_encode()</strong> é exibida 159 | assim: <strong>' . base64\_encode(\$string) . 160 | '</strong>. <br />'; 161 | 162 | 11. ?> 163 | 164 | 12. ... 165 | 166 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/criptografia.php, no 167 | browser digite* 168 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/count.php)[*criptografia*](http://localhost/PHPBasico/Cap8/count.php)[*.php*](http://localhost/PHPBasico/Cap8/count.php). 169 | 170 | ucwords(), strtolower() e strtoupper() 171 | -------------------------------------- 172 | 173 | Essas funções controlam como a string será exbida. A *ucwords()* 174 | converte somente as primeiras letras em maiúsculo, a *strtolower()* 175 | converte toda a string para minúsculo e a *strtoupper()* converte toda a 176 | string para maiúsculo. 177 | 178 | 1. ... 179 | 180 | 2. <h1>ucwords(), strtolower() e strtoupper()</h1> 181 | 182 | 3. 4. <?php 183 | 184 | 5. \$string = 'Mussum ipsum cacilds, vidis litro abertis. fonte: 185 | http://mussumipsum.com/'; 186 | 187 | 6. 7. echo \$string . '<br /><br />'; 188 | 189 | 8. echo 'usando a função <strong>ucwords()</strong>: ' . 190 | ucwords(\$string) . '<br />'; 191 | 192 | 9. echo 'usando a função <strong>strtolower()</strong>: ' . 193 | strtolower(\$string) . '<br />'; 194 | 195 | 10. echo 'usando a função <strong>strtoupper()</strong>: ' . 196 | strtoupper(\$string) . '<br />'; 197 | 198 | 11. 12. ?> 199 | 200 | 13. ... 201 | 202 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/trataString.php, no 203 | browser digite* 204 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/count.php)[*trataString*](http://localhost/PHPBasico/Cap8/count.php)[*.php*](http://localhost/PHPBasico/Cap8/count.php). 205 | 206 | date() 207 | ------ 208 | 209 | Essa função formata a data e a hora local (servidor). Essa função é 210 | muito poderosa, pois é possível montar um calendário completo, fazer 211 | conversões e junto com outras funções exclusivas para data podemos fazer 212 | diversos cálculos. Veja as possíveis opções de exibição no quadro 213 | abaixo. 214 | 215 | Caractere de format Descrição Exemplo de valores retornados 216 | ---------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------- 217 | *Day* --- --- 218 | *d* Dia do mês, 2 digitos com preenchimento de zero *01* até *31* 219 | *D* Uma representação textual de um dia, três letras *Mon* até *Sun* 220 | *j* Dia do mês sem preenchimento de zero *1* até *31* 221 | *l* ('L' minúsculo) A representação textual completa do dia da semana *Sunday* até *Saturday* 222 | *N* Representação numérica ISO-8601 do dia da semana (adicionado no PHP 5.1.0) *1* (para Segunda) até *7* (para Domingo) 223 | *S* Sufixo ordinal inglês para o dia do mês, 2 caracteres *st*, *nd*, *rd* ou *th*. Funciona bem com *j* 224 | *w* Representação numérica do dia da semana *0* (para domingo) até *6* (para sábado) 225 | *z* O dia do ano (começando do 0) *0* through *365* 226 | ***Semana*** **---** **---** 227 | *W* Número do ano da semana ISO-8601, semanas começam na Segunda (adicionado no PHP 4.1.0) Exemplo: *42* (the 42nd week in the year) 228 | *Mês* --- --- 229 | *F* Um representação completa de um mês, como January ou March *January* até *December* 230 | *m* Representação numérica de um mês, com leading zeros *01* a *12* 231 | *M* Uma representação textual curta de um mês, três letras *Jan* a *Dec* 232 | *n* Representação numérica de um mês, sem leading zeros *1* a *12* 233 | *t* Número de dias de um dado mês *28* through *31* 234 | ***Year*** **---** **---** 235 | *L* Se está em um ano bissexto *1* se está em ano bissexto, *0* caso contrário. 236 | *o* Número do ano ISO-8601. Este tem o mesmo valor como *Y*, exceto que se o número da semana ISO (*W*) pertence ao anterior ou próximo ano, o ano é usado ao invés. (adicionado no PHP 5.1.0) Exemplos: *1999* ou *2003* 237 | *Y* Uma representação de ano completa, 4 dígitos Exemplos: *1999* ou *2003* 238 | *y* Uma representação do ano com dois dígitos Exemplos: *99* ou *03* 239 | ***Tempo*** **---** **---** 240 | *a* Antes/Depois de meio-dia em minúsculo *am* or *pm* 241 | *A* Antes/Depois de meio-dia em maiúsculo *AM* or *PM* 242 | *B* Swatch Internet time *000* até *999* 243 | *g* Formato 12-horas de uma hora sem preenchimento de zero *1* até *12* 244 | *G* Formato 24-horas de uma hora sem preenchimento de zero *0* até *23* 245 | *h* Formato 12-horas de uma hora com zero preenchendo à esquerda *01* até *12* 246 | *H* Formato 24-horas de uma hora com zero preenchendo à esquerda *00* até *23* 247 | *i* Minutos com zero preenchendo à esquerda *00* até *59* 248 | *s* Segundos, com zero preenchendo à esquerda *00* até *59* 249 | *u* Milisegundos (adicionado no PHP 5.2.2) Exemplo: *54321* 250 | ***Timezone*** **---** **---** 251 | *e* Identificador de Timezone (adicionado no PHP 5.1.0) Exemplos: *UTC*, *GMT*, *Atlantic/Azores* 252 | *I* (capital i) Se a data está ou não no horário de verão *1* se horário de verão, *0* caso contrário. 253 | *O* Diferença para Greenwich time (GMT) em horas Exemplo: *+0200* 254 | *P* Diferença para Greenwich time (GMT) com dois pontos entre horas e minutos (adicionado no PHP 5.1.3) Exemplo: *+02:00* 255 | *T* Abreviação de Timezone Exemplos: *EST*, *MDT* ... 256 | *Z* Timezone offset in seconds. The offset for timezones west of UTC is always negative, and for those east of UTC is always positive. *-43200* até *50400* 257 | ***Full Date/Time*** **---** **---** 258 | *c* ISO 8601 date (adicionado no PHP 5) 2004-02-12T15:19:21+00:00 259 | *r* [» RFC 2822](http://www.faqs.org/rfcs/rfc2822) formatted date Exemplo: *Thu, 21 Dec 2000 16:01:07 +0200* 260 | *U* Segundos desde a Época Unix (January 1 1970 00:00:00 GMT) Veja também [time()](http://php.net/manual/pt_BR/function.time.php) 261 | 262 | 1. ... 263 | 264 | 2. <h1>date()</h1> 265 | 266 | 3. 4. <?php 267 | 268 | 5. echo 'Data e hora padrão de banco de dados <strong>' . 269 | date('Y-m-d H:i:s') . '</strong><br />'; 270 | 271 | 6. echo 'Data e hora padrão europeu <strong>' . 272 | date('d/m/Y H:i:s') . '</strong><br />'; 273 | 274 | 7. echo 'Data com ano com 2 dígitos <strong>' . date('d/m/y') . 275 | '</strong><br />'; 276 | 277 | 8. echo 'Somente hora <strong>' . date('H:i:s') . 278 | '</strong><br />'; 279 | 280 | 9. echo 'Mês por extenso <strong>' . date('F') . 281 | '</strong><br />'; 282 | 283 | 10. echo 'Mês com 3 letras <strong>' . date('M') . 284 | '</strong><br />'; 285 | 286 | 11. echo 'Semana do ano <strong>' . date('W') . 287 | '</strong><br />'; 288 | 289 | 12. ?> 290 | 291 | 13. ... 292 | 293 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/date.php, no browser 294 | digite* 295 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/count.php)[*date*](http://localhost/PHPBasico/Cap8/count.php)[*.php*](http://localhost/PHPBasico/Cap8/count.php). 296 | 297 | checkdate() 298 | ----------- 299 | 300 | Essa função verifica se uma data fornecida é verdadeira ou falsa. 301 | 302 | 1. ... 303 | 304 | 2. <h1>checkdate()</h1> 305 | 306 | 3. 4. <?php 307 | 308 | 5. echo 'Data 31/12/2000'; 309 | 310 | 6. var\_dump(checkdate(12, 31, 2000)); //mês, dia, ano 311 | 312 | 7. 8. echo '<br />Data 29/02/2001'; 313 | 314 | 9. var\_dump(checkdate(2, 29, 2001)); //mês, dia, ano 315 | 316 | 10. 11. \$data = date('d/m/Y'); 317 | 318 | 12. echo '<br />Data ' . \$data; 319 | 320 | 13. var\_dump(checkdate(substr(\$data, 3, 2), substr(\$data, 0, 2), 321 | substr(\$data, 7, 4))); //mês, dia, ano 322 | 323 | 14. ?> 324 | 325 | 15. ... 326 | 327 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/checkdate.php, no 328 | browser digite* 329 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/checkdatedate.php)[*check*](http://localhost/PHPBasico/Cap8/checkdatedate.php)[*datedate*](http://localhost/PHPBasico/Cap8/checkdatedate.php)[*.php*](http://localhost/PHPBasico/Cap8/checkdatedate.php). 330 | 331 | strtotime() 332 | ----------- 333 | 334 | Essa função é muito útil para cálculos de data, datas futuras etc. Ela 335 | pega uma data e converte para o padrão timestamp. 336 | 337 | 1. ... 338 | 339 | 2. <h1>strtotime()</h1> 340 | 341 | 3. 4. <?php 342 | 343 | 5. echo strtotime("now"), ' -> ', date('d/m/Y', 344 | strtotime("now")),'<br />'; 345 | 346 | 6. echo strtotime("10 September 2000"), ' -> ', date('d/m/Y', 347 | strtotime("10 September 2000")),'<br />'; 348 | 349 | 7. echo strtotime("+1 day"), ' -> ', date('d/m/Y', strtotime("+1 350 | day")),'<br />'; 351 | 352 | 8. echo strtotime("+1 week"), ' -> ', date('d/m/Y', strtotime("+1 353 | week")),'<br />'; 354 | 355 | 9. echo strtotime("+1 week 2 days 4 hours 2 seconds"), ' -> ', 356 | date('d/m/Y', strtotime("+1 week 2 days 4 hours 2 seconds")),'<br 357 | />'; 358 | 359 | 10. echo strtotime("next Thursday"), ' -> ', date('d/m/Y', 360 | strtotime("next Thursday")),'<br />'; 361 | 362 | 11. echo strtotime("last Monday"), ' -> ', date('d/m/Y', 363 | strtotime("last Monday")),'<br />'; 364 | 365 | 12. echo date("jS F, Y", strtotime("11/12/10")); 366 | 367 | 13. ?> 368 | 369 | 14. ... 370 | 371 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/strtotime.php, no 372 | browser digite* 373 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/strtotime.php)[*strtotime*](http://localhost/PHPBasico/Cap8/strtotime.php)[*.php*](http://localhost/PHPBasico/Cap8/strtotime.php). 374 | 375 | str\_replace() 376 | -------------- 377 | 378 | Essa função faz substituição de caracteres, strings inteiras ou 379 | elementos de array. 380 | 381 | 1. ... 382 | 383 | 2. <h1>str\_replace()</h1> 384 | 385 | 3. 4. <?php 386 | 387 | 5. //substituição com string 388 | 389 | 6. \$string = 'O gato roeu a roupa do rei de Roma.'; 390 | 391 | 7. \$novaString = str\_replace('gato', 'rato', \$string); 392 | 393 | 8. echo \$novaString . '<br /><br />'; 394 | 395 | 9. 10. //substituição com arrays 396 | 397 | 11. \$frase = "você comeria frutas, vegetais, e fibra todos os dias."; 398 | 399 | 12. \$saudavel = array("frutas", "vegetais", "fibra"); 400 | 401 | 13. \$saboroso = array("pizza", "cerveja", "sorvete"); 402 | 403 | 14. \$novafrase = str\_replace(\$saudavel, \$saboroso, \$frase); 404 | 405 | 15. echo \$novafrase; 406 | 407 | 16. ?> ... 408 | 409 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/strReplace.php, no 410 | browser digite* 411 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/strReplace)[*st*](http://localhost/PHPBasico/Cap8/strReplace)[*rReplace*](http://localhost/PHPBasico/Cap8/strReplace)*.*[*php*](http://localhost/PHPBasico/Cap8/strtotime.php). 412 | 413 | preg\_replace() 414 | --------------- 415 | 416 | Parecida com a função *str\_replace()*, essa função faz substituições 417 | utilizando expressões regulares. 418 | 419 | 1. ... 420 | 421 | 2. <h1>preg\_replace()</h1> 422 | 423 | 3. 4. <?php 424 | 425 | 5. \$cpf = '234.144.675/26'; 426 | 427 | 6. \$cpf = preg\_replace("/\[\^0-9\]/", "", \$cpf); 428 | 429 | 7. // O /.../ indica um intervalo, o \^ sgnifica negação, \[0-9\] 430 | somente número. 431 | 432 | 8. // Ou seja, substitua qualquer coisa que não seja número por nada. 433 | 434 | 9. echo 'CPF: ' . \$cpf . '<br /><br />'; 435 | 436 | 10. 11. \$string1 = "Copyright 1999 - 2015"; 437 | 438 | 12. \$string1 = preg\_replace("(\[0-9\]+)", "2000", \$string1); 439 | 440 | 13. // O (...) indica uma expressão. Substitua qualquer expressão 441 | numérica para 2000. 442 | 443 | 14. echo \$string1 . '<br /><br />'; 444 | 445 | 15. 16. \$string1 = 'Abril 15, 2003'; 446 | 447 | 17. \$pattern = '/(\\w+) (\\d+), (\\d+)/i'; 448 | 449 | 18. // \\w indica os caracteres alfa (letras), \\d equivalente ao 450 | \[0-9\], \\i case insensitive 451 | 452 | 19. \$replacement = '\${1} 1, \$3'; 453 | 454 | 20. echo preg\_replace(\$pattern, \$replacement, \$string1) . '<br 455 | /><br />'; 456 | 457 | 21. 22. \$string2 = "Entre em contato comigo no email email@email.com, 458 | 459 | 23. responderei quando puder."; 460 | 461 | 24. \$string2 = preg\_replace('/@(\[-\\.0-9a-zA-Z\]+)/', '@…', 462 | \$string2); 463 | 464 | 25. 26. echo \$string2; 465 | 466 | 27. ?> 467 | 468 | 28. ... 469 | 470 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/pregReplace.php, no 471 | browser digite* 472 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/pregReplace.php)[*preg*](http://localhost/PHPBasico/Cap8/pregReplace.php)[*Replace.*](http://localhost/PHPBasico/Cap8/pregReplace.php)[*php*](http://localhost/PHPBasico/Cap8/pregReplace.php). 473 | 474 | **Nota:** Expressão regula é um assunto muito vasto e complexo, para 475 | poder entender melhor, vale muito a pena a leitura desse material da 476 | DevMedia: 477 | **http://www.devmedia.com.br/expressoes-regulares-em-php/25076** 478 | 479 | explode() 480 | --------- 481 | 482 | Essa função, como o nome sugere explode uma string de acordo com uma 483 | regra (delimitador). Ela é muito útil quando temos um arquivo .csv e 484 | precisamos separar palavas ou textos que contenham algum delimitador 485 | como a virgula ou ponto e virgula. 486 | 487 | 1. ... 488 | 489 | 2. <h1>explode()</h1> 490 | 491 | 3. 4. <?php 492 | 493 | 5. \$str = 'carro|moto|bike|ônibus'; 494 | 495 | 6. 7. \$string1 = explode('|', \$str); //explode a string inteira 496 | 497 | 8. var\_dump(\$string1); 498 | 499 | 9. 10. \$string2 = explode('|', \$str, 3); //explode somente até a 500 | terceira ocorrência 501 | 502 | 11. var\_dump(\$string2); 503 | 504 | 12. ?> 505 | 506 | 13. ... 507 | 508 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/explode.php, no browser 509 | digite* 510 | [http://localhost/PHPBasico/Cap8/explode](http://localhost/PHPBasico/Cap8/explode.php)[*.*](http://localhost/PHPBasico/Cap8/explode.php)[*php*](http://localhost/PHPBasico/Cap8/explode.php). 511 | 512 | str\_word\_count() 513 | ------------------ 514 | 515 | Essa função, como nome sugere, conta palavras em uma string. 516 | 517 | 1. ... 518 | 519 | 2. <h1>str\_word\_count()</h1> 520 | 521 | 3. 4. <?php 522 | 523 | 5. \$string = 'Mussum ipsum cacilds, vidis litro abertis. fonte: 524 | http://mussumipsum.com/'; 525 | 526 | 6. 7. echo \$string; 527 | 528 | 8. echo '<br />Essa string tem <strong>' . 529 | str\_word\_count(\$string) . '</strong> palavras'; 530 | 531 | 9. var\_dump(str\_word\_count(\$string, 1)); // retorna um array 532 | contendo todas as palavras encontradas dentro de string 533 | 534 | 10. var\_dump(str\_word\_count(\$string, 2)); // retorna um array 535 | associativo, onde a chave é a posição numérica da palavra 536 | 537 | 11. //dentro da string e o valor é a própria palavra. 538 | 539 | 12. ?> 540 | 541 | 13. ... 542 | 543 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap8/strWordCount.php, no 544 | browser digite* 545 | [http://localhost/PHPBasico/Cap8/](http://localhost/PHPBasico/Cap8/strWordCount.php)[*strWordCount*](http://localhost/PHPBasico/Cap8/strWordCount.php)[*.*](http://localhost/PHPBasico/Cap8/strWordCount.php)[*php*](http://localhost/PHPBasico/Cap8/strWordCount.php). 546 | 547 | Resumo do Capítulo 548 | ------------------ 549 | 550 | Nesse capítulo aprendemos algumas funções importantes do PHP, elas são 551 | apenas uma pequena fração das funções existentes. Para conhecer mais 552 | sobre as funções acesse o site [www.php.net](http://www.php.net/). Essa 553 | sempre será sua principal referência. 554 | -------------------------------------------------------------------------------- /v0.1/09-capitulo_9/09-capitulo_9.md: -------------------------------------------------------------------------------- 1 | 2 | Capítulo 9 3 | ========== 4 | 5 | Nesse capítulo você aprenderá as principais e mais conhecidas funções de 6 | banco de dados. Conhecerá um pouco da evolução das bibliotecas de banco 7 | de dados e também como atualmente os profissionais estão trabalhando. 8 | 9 | A coisa mais importante quando se está usando banco de dados é criar um 10 | banco de dados e suas tabelas e uma conexão com ele, a partir daí que 11 | podemos fazer nossas consultas, inclusões, alterações e exclusões, essas 12 | quatro operações são chamadas de **CRUD** (***Create, Retrieve/Read, 13 | Update e Delete***). 14 | 15 | Criando o banco de dados 16 | ------------------------ 17 | 18 | Vamos a partir de agora criar nosso banco e nossas tabelas. No início do 19 | curso instalamos vários pacotes, um deles foi o MySql Server, MySql 20 | Client e o phpMyAdmin. Vamos usar o phpMyAdmin para criar e administrar 21 | nosso banco de teste. O phpMyAdmin é uma interface web muito simples, 22 | intuitiva e fácil de se utilizar. 23 | 24 | 1. Acesse a url 25 | [http://localhost/phpMyAdmin/](http://localhost/phpmyadmin/) e vamos 26 | logar com o usuário *root* e senha *toor*; 27 | 28 | 2. Clique no botão “Base de dados”; 29 | 30 | 3. Na caixa de texto “Create database” coloque o nome 31 | “curso-php-basico”; 32 | 33 | 4. Na caixa ao lado marque a opção: utf8\_general\_ci; 34 | 35 | 5. Clique no botão “Criar” 36 | 37 | Pronto com isso já criamos nosso banco de dados. 38 | 39 | Criando a tabela no banco curso-php-basico 40 | ------------------------------------------ 41 | 42 | 1. Se não estiver logado no phpMyAdmin, se logue com as credenciais do 43 | banco; 44 | 45 | 2. Clique no banco que criamos “curso-php-basico”; 46 | 47 | 3. Na tela de criação de tabela, “Create table”, no campo “name” digite 48 | usuarios e no campo “Number of columns” digite o número 5 e clique 49 | no botão “Executar”; 50 | 51 | 4. Na tela que carregou, apareceram 5 linhas referentes aos 5 campos 52 | que vamos criar nessa tabela. Os campos que aparecem para o cadastro 53 | são: 54 | 55 | 1. **Nome** (representa o nome do campo); 56 | 57 | 2. **Tipo** (qual tipo de dados vou gravar. Ex. Texto, Data, Float 58 | e etc); 59 | 60 | 3. **Tamanho** (quantos caracteres poderá armazenar esse campo); 61 | 62 | 4. **Predefinido** (um valor já pré-selecionado); 63 | 64 | 5. **Agrupamento** (tipo de caracteres, como a tabela já foi 65 | definida com um agrupamento esse pode ficar em branco); 66 | 67 | 6. **Atributos** (geralmente não se mexe nesses dados); 68 | 69 | 7. **Nulo** (indica se o campo pode ser nulo ou não); 70 | 71 | 8. **Indice** (indica se o campo será um indice); 72 | 73 | 9. **A\_I** (auto-incremento). 74 | 75 | 5. Crie os campos na ordem descrita abaixo: 76 | 77 | 1. Nome: id, Tipo: INT, e marque a opção A\_I; 78 | 79 | 2. Nome: nome, Tipo: Varchar, Tamanho: 200; 80 | 81 | 3. Nome: login, Tipo: Varchar, Tamanho: 20, Índice UNIQUE; 82 | 83 | 4. Nome: senha, Tipo: Varchar, Tamanho: 32; 84 | 85 | 5. Nome: email, Tipo: Varchar, Tamanho: 200, Índice UNIQUE; 86 | 87 | 6. No campo “Storage Engine” marque a opção InnoDB. 88 | 89 | Vamos agora criar nosso arquivo de conexão com banco de dados. 90 | 91 | Conexão 92 | ------- 93 | 94 | 1. <?php 95 | 96 | 2. //Abre uma conexao com o banco de dados 97 | 98 | 3. function dbConnect() 99 | 100 | 4. { 101 | 102 | 5. \$host = 'localhost'; 103 | 104 | 6. \$user = 'root'; 105 | 106 | 7. \$pass = 'toor'; 107 | 108 | 8. \$db = 'curso-php-basico0'; 109 | 110 | 9. 10. \$con = mysqli\_connect(\$host, \$user, \$pass, \$db) 111 | 112 | 11. or die (mysqli\_connect\_error(\$con)); 113 | 114 | 12. mysqli\_set\_charset(\$con, 'utf8') or die (mysqli\_error()); 115 | 116 | 13. 14. return \$con; 117 | 118 | 15. } 119 | 120 | 16. 17. //Fecha a conexao com o banco de dados 121 | 122 | 18. function dbClose(\$con) 123 | 124 | 19. { 125 | 126 | 20. mysqli\_close(\$con); 127 | 128 | 21. } 129 | 130 | 22. 131 | 132 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap9/conexao.php, no browser 133 | digite* 134 | [http://localhost/PHPBasico/Cap9/](http://localhost/PHPBasico/Cap9/conexao.php)[*conexao*](http://localhost/PHPBasico/Cap9/conexao.php)[*.*](http://localhost/PHPBasico/Cap9/conexao.php)[*php*](http://localhost/PHPBasico/Cap9/conexao.php). 135 | 136 | **Nota:** MySQL versão 4.1.3 maior ou igual e PHP versão 5.3 maior ou 137 | igual deve-se sempre usar as funções mysqli. 138 | 139 | Vamos ver como era a antiga biblioteca do PHP para o MySQL. 140 | 141 | Conexão com a biblioteca antiga 142 | ------------------------------- 143 | 144 | 1. <?php 145 | 146 | 2. //Abre uma conexao com o banco de dados 147 | 148 | 3. function dbConnect() 149 | 150 | 4. { 151 | 152 | 5. \$host = 'localhost'; 153 | 154 | 6. \$user = 'root'; 155 | 156 | 7. \$pass = 'toor'; 157 | 158 | 8. \$db = 'curso-php-basico'; 159 | 160 | 9. 10. \$con = mysql\_connect(\$host, \$user, \$pass) 161 | 162 | 11. or die (mysql\_error()); 163 | 164 | 12. // Conecta ao banco de dados 165 | 166 | 13. mysql\_select\_db(\$db) or die (mysql\_error()); 167 | 168 | 14. 15. return \$con; 169 | 170 | 16. } 171 | 172 | 17. 18. //Fecha a conexao com o banco de dados 173 | 174 | 19. function dbClose(\$con) 175 | 176 | 20. { 177 | 178 | 21. mysql\_close(\$con); 179 | 180 | 22. } 181 | 182 | 23. 24. dbConnect(); 183 | 184 | 25. 185 | 186 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap9/conexaoAntiga.php, no 187 | browser digite* 188 | [http://localhost/PHPBasico/Cap9/](http://localhost/PHPBasico/Cap9/conexao.php)[*conexao*](http://localhost/PHPBasico/Cap9/conexao.php)[*Antiga*](http://localhost/PHPBasico/Cap9/conexao.php)[*.*](http://localhost/PHPBasico/Cap9/conexao.php)[*php*](http://localhost/PHPBasico/Cap9/conexao.php). 189 | 190 | **Nota:** Observe que teve pequenas mudanças, a mais importante é o 191 | “**i**” que não existe no nome da função a outra é que precisa do 192 | **mysql\_select\_db()** para informar qual banco de dados será usado. 193 | Essa era a forma usada antes das versões 5.3 do PHP. 194 | 195 | O CRUD 196 | ------ 197 | 198 | O CRUD é a sigla que representa as quatro operações básicas de um Banco 199 | de Dados. **C**reate, **R**etrieve/**R**ead, **U**pdate e **D**elete. 200 | Faremos agora essas quatro operações em exercícios separados. 201 | 202 | ### Create (Inserir) 203 | 204 | 1. ... 205 | 206 | 2. <h1>Inserir usuarios</h1> 207 | 208 | 3. <?php 209 | 210 | 4. //importa o arquivo de conexão 211 | 212 | 5. require\_once('conexao.php'); 213 | 214 | 6. 7. //abre a conexao com o banco 215 | 216 | 8. \$con = dbConnect(); 217 | 218 | 9. 10. //define as variávels para o insert 1 219 | 220 | 11. \$nome1 = 'Carlos'; 221 | 222 | 12. \$login1 = 'carlinhos'; 223 | 224 | 13. \$senha1 = sha1('bobmarley'); 225 | 226 | 14. \$email1 = 'carlos.silva.@bol.com.br'; 227 | 228 | 15. 16. \$sql = "INSERT INTO usuarios (nome, login, senha, 229 | 230 | 17. email) VALUES ('\$nome1', '\$login1', '\$senha1', '\$email1')"; 231 | 232 | 18. 19. if (mysqli\_query(\$con, \$sql)) { 233 | 234 | 20. echo '<p>Usuário inserido com sucesso.</p>'; 235 | 236 | 21. } else { 237 | 238 | 22. echo '<p>Erro: Não foi possível inserir o usuário</p>'; 239 | 240 | 23. } 241 | 242 | 24. 25. //define as variávels para o insert 2 243 | 244 | 26. \$nome2 = 'José Carlos'; 245 | 246 | 27. \$login2 = 'jcbomzao'; 247 | 248 | 28. \$senha2 = sha1('123456789'); 249 | 250 | 29. \$email2 = 'jcb33@ig.com.br'; 251 | 252 | 30. 31. \$sql = mysqli\_prepare(\$con, "INSERT INTO usuarios (nome, 253 | login, senha, 254 | 255 | 32. email) VALUES (?, ?, ?, ?)"); 256 | 257 | 33. 34. mysqli\_stmt\_bind\_param(\$sql, 'ssss', \$nome2, \$login2, 258 | \$senha2, \$email2); 259 | 260 | 35. 36. \$qry = mysqli\_stmt\_execute(\$sql); 261 | 262 | 37. mysqli\_stmt\_close(\$sql); 263 | 264 | 38. 39. if (\$qry) { 265 | 266 | 40. echo '<p>Usuário inserido com sucesso.</p>'; 267 | 268 | 41. } else { 269 | 270 | 42. echo '<p>Erro: Não foi possível inserir o usuário</p>'; 271 | 272 | 43. } 273 | 274 | 44. 45. //fecha a conexao 275 | 276 | 46. dbClose(\$con); 277 | 278 | 47. ?> 279 | 280 | 48. ... 281 | 282 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap9/inserir.php, no browser 283 | digite* 284 | [http://localhost/PHPBasico/Cap9/](http://localhost/PHPBasico/Cap9/inserir.php)[*inserir*](http://localhost/PHPBasico/Cap9/inserir.php)[*.*](http://localhost/PHPBasico/Cap9/inserir.php)[*php*](http://localhost/PHPBasico/Cap9/inserir.php). 285 | 286 | ### Retrieve/Read (Consultar) 287 | 288 | 1. ... 289 | 290 | 2. <h1>Consultar usuarios</h1> 291 | 292 | 3. <?php 293 | 294 | 4. //importa o arquivo de conexão 295 | 296 | 5. require\_once('conexao.php'); 297 | 298 | 6. 7. //abre a conexao com o banco 299 | 300 | 8. \$con = dbConnect(); 301 | 302 | 9. \$nome = 'Carlos'; 303 | 304 | 10. 11. //consulta simples 305 | 306 | 12. \$sql1 = "SELECT id, nome, login, senha, email FROM usuarios WHERE 307 | nome LIKE '%\$nome%'"; 308 | 309 | 13. \$result = mysqli\_query(\$con, \$sql1); //Executa a consulta 310 | 311 | 14. 15. \$dados1 = mysqli\_fetch\_array(\$result); 312 | 313 | 16. \$dados2 = mysqli\_fetch\_assoc(\$result); 314 | 315 | 17. 18. var\_dump(\$dados1); 316 | 317 | 19. var\_dump(\$dados2); 318 | 319 | 20. 21. //acessando dados do mysqli\_fetch\_array() 320 | 321 | 22. echo '<br>Nome: ' . \$dados1\[1\] . ', E-mail: ' . 322 | \$dados1\['email'\]; 323 | 324 | 23. 24. //acessando dados do mysqli\_fetch\_assoc() 325 | 326 | 25. echo '<br>Nome: ' . \$dados2\['nome'\] . ', E-mail: ' . 327 | \$dados2\['email'\]; 328 | 329 | 26. 27. mysqli\_free\_result(\$result); 330 | 331 | 28. 29. //fecha a conexao 332 | 333 | 30. dbClose(\$con); 334 | 335 | 31. ?> 336 | 337 | 32. ... 338 | 339 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap9/consultar1.php, no 340 | browser digite* 341 | [http://localhost/PHPBasico/Cap9/](http://localhost/PHPBasico/Cap9/inserir.php)[*consultar1*](http://localhost/PHPBasico/Cap9/inserir.php)[*.*](http://localhost/PHPBasico/Cap9/inserir.php)[*php*](http://localhost/PHPBasico/Cap9/inserir.php). 342 | 343 | 1. ... 344 | 345 | 2. <h1>Consultar usuarios</h1> 346 | 347 | 3. <h2>Evitando SQL Injection</h2> 348 | 349 | 4. <?php 350 | 351 | 5. //importa o arquivo de conexão 352 | 353 | 6. require\_once('conexao.php'); 354 | 355 | 7. 8. //abre a conexao com o banco 356 | 357 | 9. \$con = dbConnect(); 358 | 359 | 10. \$nome = '%Carlos%'; 360 | 361 | 11. 12. //consulta preparada contra SQL Injection 362 | 363 | 13. \$sql = "SELECT id, nome, login, senha, email FROM usuarios WHERE 364 | nome LIKE ?"; 365 | 366 | 14. \$result = mysqli\_prepare(\$con, \$sql); //Executa a consulta 367 | 368 | 15. 16. if (\$result) { 369 | 370 | 17. mysqli\_stmt\_bind\_param(\$result, 's', \$nome); 371 | 372 | 18. mysqli\_stmt\_execute(\$result); 373 | 374 | 19. mysqli\_stmt\_bind\_result(\$result, \$id, \$nome, \$login, \$senha, 375 | \$email); 376 | 377 | 20. 21. while (mysqli\_stmt\_fetch(\$result)) { 378 | 379 | 22. echo \$nome . '<br />'; 380 | 381 | 23. } 382 | 383 | 24. 25. mysqli\_stmt\_close(\$result); 384 | 385 | 26. } else { 386 | 387 | 27. trigger\_error('Statement failed: ' . mysqli\_stmt\_error(\$result), 388 | E\_USER\_ERROR); 389 | 390 | 28. } 391 | 392 | 29. 30. //fecha a conexao 393 | 394 | 31. dbClose(\$con); 395 | 396 | 32. ?> 397 | 398 | 33. ... 399 | 400 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap9/consultar2.php, no 401 | browser digite* 402 | [http://localhost/PHPBasico/Cap9/](http://localhost/PHPBasico/Cap9/consultar2.php)[*consultar*](http://localhost/PHPBasico/Cap9/consultar2.php)[*2*](http://localhost/PHPBasico/Cap9/consultar2.php)[*.*](http://localhost/PHPBasico/Cap9/consultar2.php)[*php*](http://localhost/PHPBasico/Cap9/consultar2.php). 403 | 404 | **Nota:** Nas consultas que dependem de interação com o usuário é 405 | **extremamente** recomendado utilizar os **prepared statmens**. Porem, 406 | se decidir usar a forma convencional é de suma importância utilizar as 407 | funções do PHP para “escapar” caracteres nocivos para a consulta, como 408 | por exemplo a função **mysqli\_escape\_string()**. 409 | 410 | ### Update (Atualizar) 411 | 412 | 1. ... 413 | 414 | 2. <h1>Atualizar usuario</h1> 415 | 416 | 3. <?php 417 | 418 | 4. //importa o arquivo de conexão 419 | 420 | 5. require\_once('conexao.php'); 421 | 422 | 6. 7. //abre a conexao com o banco 423 | 424 | 8. \$con = dbConnect(); 425 | 426 | 9. 10. //consulta simples 427 | 428 | 11. \$sql = "UPDATE usuarios SET nome = 'Carlos Silva' WHERE id = 13"; 429 | 430 | 12. mysqli\_query(\$con, \$sql); 431 | 432 | 13. 14. if (mysqli\_affected\_rows(\$con)) { 433 | 434 | 15. echo '<p>Usuário alterado com sucesso.</p>'; 435 | 436 | 16. } else { 437 | 438 | 17. echo '<p>Erro: Não foi possível alterar o usuário</p>'; 439 | 440 | 18. } 441 | 442 | 19. 20. //liberira memória 443 | 444 | 21. mysqli\_free\_result(\$qry); 445 | 446 | 22. 23. //fecha a conexao 447 | 448 | 24. dbClose(\$con); 449 | 450 | 25. ?> 451 | 452 | 26. ... 453 | 454 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap9/atualizar1.php, no 455 | browser digite* 456 | [http://localhost/PHPBasico/Cap9/](http://localhost/PHPBasico/Cap9/atualizar1.php)[*atualizar1*](http://localhost/PHPBasico/Cap9/atualizar1.php)[*.*](http://localhost/PHPBasico/Cap9/atualizar1.php)[*php*](http://localhost/PHPBasico/Cap9/atualizar1.php). 457 | 458 | 1. ... 459 | 460 | 2. <h1>Atualizar usuario</h1> 461 | 462 | 3. <h2>Evitando SQL Injection</h2> 463 | 464 | 4. <?php 465 | 466 | 5. //importa o arquivo de conexão 467 | 468 | 6. require\_once('conexao.php'); 469 | 470 | 7. 8. //abre a conexao com o banco 471 | 472 | 9. \$con = dbConnect(); 473 | 474 | 10. \$nome = 'Carlos'; 475 | 476 | 11. \$id = 13; 477 | 478 | 12. 13. //consulta preparada contra SQL Injection 479 | 480 | 14. \$sql = "UPDATE usuarios SET nome = ? WHERE id = ?"; 481 | 482 | 15. \$result = mysqli\_prepare(\$con, \$sql); //Executa a consulta 483 | 484 | 16. mysqli\_stmt\_bind\_param(\$result, 'si', \$nome, \$id); 485 | 486 | 17. mysqli\_stmt\_execute(\$result); 487 | 488 | 18. 19. if (mysqli\_affected\_rows(\$con)) { 489 | 490 | 20. echo '<p>Usuário alterado com sucesso.</p>'; 491 | 492 | 21. } else { 493 | 494 | 22. echo '<p>Erro: Não foi possível alterar o usuário</p>'; 495 | 496 | 23. } 497 | 498 | 24. //liberira memória 499 | 500 | 25. mysqli\_stmt\_close(\$result); 501 | 502 | 26. 27. //fecha a conexao 503 | 504 | 28. dbClose(\$con); 505 | 506 | 29. ?> 507 | 508 | 30. ... 509 | 510 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap9/atualizar2.php, no 511 | browser digite* 512 | [http://localhost/PHPBasico/Cap9/](http://localhost/PHPBasico/Cap9/atualizar2.php)[*atualizar2*](http://localhost/PHPBasico/Cap9/atualizar2.php)[*.*](http://localhost/PHPBasico/Cap9/atualizar2.php)[*php*](http://localhost/PHPBasico/Cap9/atualizar2.php). 513 | 514 | ### Delete (Deletar) 515 | 516 | 1. ... 517 | 518 | 2. <h1>Deletar usuario</h1> 519 | 520 | 3. <?php 521 | 522 | 4. //importa o arquivo de conexão 523 | 524 | 5. require\_once('conexao.php'); 525 | 526 | 6. 7. //abre a conexao com o banco 527 | 528 | 8. \$con = dbConnect(); 529 | 530 | 9. 10. //consulta simples 531 | 532 | 11. \$sql = "DELETE FROM usuarios WHERE id = 15"; 533 | 534 | 12. mysqli\_query(\$con, \$sql); 535 | 536 | 13. 14. if (mysqli\_affected\_rows(\$con)) { 537 | 538 | 15. echo '<p>Usuário deletado com sucesso.</p>'; 539 | 540 | 16. } else { 541 | 542 | 17. echo '<p>Erro: Não foi possível deletar o usuário</p>'; 543 | 544 | 18. } 545 | 546 | 19. //liberira memória 547 | 548 | 20. mysqli\_free\_result(\$qry); 549 | 550 | 21. 22. //fecha a conexao 551 | 552 | 23. dbClose(\$con); 553 | 554 | 24. ?> 555 | 556 | 25. ... 557 | 558 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap9/deletar1.php, no browser 559 | digite* 560 | [http://localhost/PHPBasico/Cap9/deletar](http://localhost/PHPBasico/Cap9/deletar1.php)[*1*](http://localhost/PHPBasico/Cap9/deletar1.php)[*.*](http://localhost/PHPBasico/Cap9/deletar1.php)[*php*](http://localhost/PHPBasico/Cap9/deletar1.php). 561 | 562 | 1. ... 563 | 564 | 2. <h1>Deletar usuario</h1> 565 | 566 | 3. <h2>Evitando SQL Injection</h2> 567 | 568 | 4. <?php 569 | 570 | 5. //importa o arquivo de conexão 571 | 572 | 6. require\_once('conexao.php'); 573 | 574 | 7. 8. //abre a conexao com o banco 575 | 576 | 9. \$con = dbConnect(); 577 | 578 | 10. \$id = 16; 579 | 580 | 11. 12. //consulta preparada contra SQL Injection 581 | 582 | 13. \$sql = "DELETE FROM usuarios WHERE id = ?"; 583 | 584 | 14. \$result = mysqli\_prepare(\$con, \$sql); //Executa a consulta 585 | 586 | 15. mysqli\_stmt\_bind\_param(\$result, 'i', \$id); 587 | 588 | 16. mysqli\_stmt\_execute(\$result); 589 | 590 | 17. 18. if (mysqli\_affected\_rows(\$con)) { 591 | 592 | 19. echo '<p>Usuário deletado com sucesso.</p>'; 593 | 594 | 20. } else { 595 | 596 | 21. echo '<p>Erro: Não foi possível deletar o usuário</p>'; 597 | 598 | 22. } 599 | 600 | 23. //liberira memória 601 | 602 | 24. mysqli\_stmt\_close(\$result); 603 | 604 | 25. 26. //fecha a conexao 605 | 606 | 27. dbClose(\$con); 607 | 608 | 28. ... 609 | 610 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap9/deletar2.php, no browser 611 | digite* 612 | [http://localhost/PHPBasico/Cap9/deletar](http://localhost/PHPBasico/Cap9/atualizar1.php)[*2*](http://localhost/PHPBasico/Cap9/atualizar1.php)[*.*](http://localhost/PHPBasico/Cap9/atualizar1.php)[*php*](http://localhost/PHPBasico/Cap9/atualizar1.php). 613 | 614 | **Atenção:** Ao executar os comandos **UPDATE** e **DELETE** 615 | certifique-se que esteja usando a cláusula **WHERE**. Pois se não fizer 616 | isso **TODOS** os registros da tabela serão alterados ou deletados. 617 | 618 | Resumo do Capítulo 619 | ------------------ 620 | 621 | Nesse capítulo aprendemos como fazer as quatro operações básicas de um 622 | banco de dados, o **CRUD**. Vimos também como dar um pouco mais de 623 | segurança a nossa aplicação com os **prepare statements**. 624 | 625 | Exercícios 626 | ---------- 627 | 628 | 1. Crie um script que faça um insert no banco pegando dados do 629 | formulário usando o prepared statements; 630 | 631 | 2. Crie um script que faça um select no banco pegando dados do 632 | formulário usando o prepared statements; 633 | 634 | 3. Crie um script que faça um update no banco pegando dados do 635 | formulário usando o prepared statements; 636 | 637 | 4. Crie um script que faça um delete no banco pegando dados do 638 | formulário usando o prepared statements; 639 | 640 | 5. Crie um CRUD usando a biblioteca PDO do PHP (para fazer esse 641 | exercício será necessário uma consulta no manual do PHP). 642 | -------------------------------------------------------------------------------- /v0.1/10-capitulo_10/10-capitulo_10.md: -------------------------------------------------------------------------------- 1 | 2 | Capítulo 10 3 | =========== 4 | 5 | Nesse capítulo você aprenderá os conceitos iniciais de Orientação a 6 | Objetos (OO). A ideia aqui é somente apresentar o que é uma classe, não 7 | nos aprofundar no assunto. Pois é um assunto muito vasto e complexo que 8 | envolve muitos padrões de desenvolvimento. Aqui é só um gancho para o 9 | próximo curso, **PHP do Jeito Certo com Orientação a Objetos**. 10 | 11 | 1. <?php 12 | 13 | 2. class Pessoa 14 | 15 | 3. { 16 | 17 | 4. public \$nome; 18 | 19 | 5. public \$idade; 20 | 21 | 6. public \$sexo; 22 | 23 | 7. 8. public function \_\_construct(\$nome, \$idade, \$sexo) 24 | 25 | 9. { 26 | 27 | 10. \$this->nome = \$nome; 28 | 29 | 11. \$this->idade = \$idade; 30 | 31 | 12. \$this->\$sexo = \$sexo; 32 | 33 | 13. } 34 | 35 | 14. 15. public function comer(\$alimento, \$qtd = 0) 36 | 37 | 16. { 38 | 39 | 17. echo utf8\_decode(\$this->nome . ' esta comendo ' . \$alimento . 40 | '<br /><br />'); 41 | 42 | 18. 19. for (\$i=1; \$qtd >= \$i; \$i++) { 43 | 44 | 20. echo utf8\_decode(\$this->nome . ' comeu ' . \$i . ' ' . 45 | \$alimento . '(s)<br />'); 46 | 47 | 21. } 48 | 49 | 22. } 50 | 51 | 23. } 52 | 53 | 24. 25. \$pessoa = new Pessoa('Cálcio', 35, 'Masculino'); 54 | 55 | 26. 27. echo \$pessoa->comer('Maça', 5); 56 | 57 | 28. 58 | 59 | *Salve em /home/seu\_usuario/www/PHPBasico/Cap10/Pessoa.php, no browser 60 | digite* 61 | [http://localhost/PHPBasico/Cap10/](http://localhost/PHPBasico/Cap10/Pessoa.php)[*Pessoa*](http://localhost/PHPBasico/Cap10/Pessoa.php)[*.*](http://localhost/PHPBasico/Cap10/Pessoa.php)[*php*](http://localhost/PHPBasico/Cap10/Pessoa.php). 62 | 63 | Por convenção uma classe deve sempre começar com letra maiúscula e ser 64 | no singular, e o nome do arquivo ser o mesmo nome da classe. Um método 65 | deve ser no padrão ***camelCased***, e deve ser um verbo e/ou 66 | representar uma ação. As propriedades seguem o padrão das variáveis do 67 | PHP, ***camelCased*** seja ou separada por underline. 68 | 69 | Para verificar essas convenções acesse o site 70 | **http://www.php-fig.org/** e procure por **PSR-1** e **PSR-2**. 71 | 72 | Resumo do capítulo 73 | ------------------ 74 | 75 | Nesse capítulo aprendemos um pouco sobre classes e uma breve introdução 76 | a Programação Orientada a Objetos. No próximo curso **PHP do Jeito Certo 77 | com Orientação a Objetos**, você aprenderá de fato os conceitos e como 78 | criar uma aplicação Orientada a Objetos. 79 | -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image10.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image11.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image12.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image13.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image14.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image15.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image16.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image17.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image18.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image19.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image20.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image5.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image6.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image7.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image8.jpg -------------------------------------------------------------------------------- /v0.1/11-capitulo_11/img/image9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHProgramando/phprogramando/d414cf4bb1db61deb272ee3f406d6512cf59764a/v0.1/11-capitulo_11/img/image9.jpg --------------------------------------------------------------------------------