PHP Básico — Controle de Estruturas
Olá, DevZ.
O código em PHP é construído por uma série de instruções. Muitas dessas instruções são baseadas em expressões que são avaliadas por seus valores booleanos.
Se uma expressão for avaliada como TRUE, o PHP executará a declaração, e se avaliá-la como FALSE vai ignorá-la.
Sempre use {}
(chaves) para criar agrupamentos de suas estruturas de controle. Apesar de não ser mandatório e não produzir nenhum erro no console, essa prática ajuda a manter o seu código legível.
Conversão para booleano
Antes de enterdemos como funcionam essas estruturas precisamos conhecer como funciona a conversão para valores booleanos no PHP.
<?phpvar_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) "false"); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) ""); // bool(false)
var_dump((bool) false); // bool(false)
var_dump((bool) true); // bool(true)
var_dump((bool) 0); // bool(false)
var_dump((bool) 0.0); // bool(false)?>
If
Permite a execução condicional de fragmentos de código. O PHP apresenta uma estrutura if
semelhante a do C:
if (expr)
statement<?php
// Número de títulos na Champions League
$cr7 = 5;
$messi = 4;// RUIM
if ($cr7 > $messi)
echo "CR7 é maior que Messi";// BOM
if ($cr7 > $messi) {
echo "CR7 é maior que Messi";
}
?>
Else
Muitas vezes deseja-se executar uma instrução se uma certa condição for válida, e uma instrução diferente se a mesma condição não for válida.
<?php
// Número de Campeonatos Espanhóis
$cr7 = 2;
$messi = 9;// BOM
if ($cr7 > $messi) {
echo "CR7 é maior que Messi";
} else {
echo "Messi é maior que CR7";
}// MUITO BOM
echo $cr7 > $messi ? "CR7 é maior que Messi" : "Messi é maior que CR7";
?>
Else if
Como o nome sugere é uma combinação do if
e do else
como mostra o exemplo abaixo.
<?php
// Número de Supercopa da Europa
$cr7 = 3;
$messi = 3;// RUIM
echo $cr7 > $messi
? "CR7 maior que o Messi"
: ($cr7 == $messi
? "CR7 é Messi são geniais"
: "CR7 é maior que Messi");// BOM
if ($cr7 > $messi) {
echo "CR7 é maior que Messi";
} elseif ($cr7 == $messi) {
echo "CR7 e Messi são geniais";
} else {
echo "Messi é maior que CR7";
}
Operador Ternário
// COMUM [COMMON ASSIGNMENT FORM]
<EXPRESSÃO> ? <VALOR SE TRUE> : <VALOR SE FALSE>;// FORMA CURTA [SHORTHAND ASSIGNMENT FORM]
<EXPRESSÃO> ?: <VALOR SE FALSE>; // RETORNA E_NOTICE IF NO VALUE [NOT RECOMMENDED]// EVITA NULO [NULL COALESCE OPERATOR]
<EXPRESSÃO> ?? <VALOR SE FALSE>; // NO E_NOTICE IF NO VALUE [BEST PRACTICE]
Para entedermos o Coalesce Operator vamos compará-lo com a função COALESCE(expr1, expr2, ..., expr_n)
do MySQL.
//MySQL
SELECT COALESCE(NULL, NULL, NULL, 'veus.com.br', NULL, 'homolog.veus.com'); // 'veus.com.br'//PHP
echo null ?? "VEUS" ?? null ?? "PNCQ"; // "VEUS"
Switch
A declaração switch é similar a uma série de declarações IF na mesma expressão. Em muitos casos, se deseja comparar as mesmas variáveis (ou expressões), com diferentes valores, e executar pedaços diferentes de código dependendo de qual valor ela é igual.
No PHP 7.0 múltiplos cases default lançarão um erro E_COMPILE_ERROR
.
<?php
$craque = "Gabriel Jesus";switch ($craque) {
case 7:
case 10:
case 11:
echo "Faz gol em Copa do Mundo!";
break;
default:
echo "Pior camisa 9 da história!";
}
?>
While / Do-While
Laços while são os mais simples tipos de laços do PHP. Possui comportamento semelhante ao C. O propósito da declaração while é simples. Ele dirá ao PHP para executar as declarações aninhadas repetidamente, enquanto a expressão do while forem avaliadas como TRUE.
Os laços do-while é muito similar aos laços while, com exceção que a expressão de avaliação é verificada ao final de cada iteração em vez de no começo.
<?php// DO WHILE
do {
$num_de_copas = 0;
echo "França campeã 98!\n";
$num_de_copas++; } while ($num_de_copas > 1 || finishWorldCup() );function finishWorldCup() {
echo "França Campeã 18!";
return false;
}// OUTPUT:
// França campeã 98!
// França campeã 18¹// WHILE
$count = 1;while ($count <= 8) {
if ($count == 1) {
echo "Não dá pra esconder, o que eu sinto por você Russia!\n";
} else if ($count == 2) {
echo "Não dá, não dá, não dá, não dá...\n";
} else if ($count == 3) {
echo "Só sei que a Alemanha estremece\n";
} else if ($count == 4) {
echo "A Argentina só tem o Messi\n";
} else if ($count == 5) {
echo "Inevitavelmente a Itália dança\n";
} else if ($count == 6) {
echo "O Zidane não nasceu na França\n";
} else if ($count == 7) {
echo "O Iniesta não joga mais\n";
} else {
echo "Só sei que ser brasileiro é bom demais\n
Ê ô, ê ô, sou brasileiro... sou brasileiro...";
}
$count++;
}// OUTPUT:
// Não dá pra esconder, o que eu sinto por você Russia!
// Não dá, não dá, não dá, não dá...
// Só sei que a Alemanha estremece
// A Argentina só tem o Messi
// Inevitavelmente a Itália dança
// O Zidane não nasceu na França
// O Iniesta não joga mais
// Só sei que ser brasileiro é bom demais
// Ê ô, ê ô, sou brasileiro... sou brasileiro...
?>
For
Os laços for são os mais complexo no PHP. Possui comportamento semelhante ao C.
for (expr1; expr2; expr3)
statement
Cada uma das expressões podem ser vazias ou conter múltiplas expressões separadas por vírgulas. Na expr2, todas as expressões separadas por vírgula são avaliadas mas o resultado é obtido da última parte. Se a expr2 estiver vazia significa que o laço deve ser executado indefinidamente (O PHP considera implicitamente como TRUE, igual ao C).
Isto não é inútil como se imagina, pois muitas vezes deseja-se interromper o laço utilizando a instrução break ao invés de usar a expressão verdade do for
.
<?php
$i = 1;for (; ;) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}// OUTPUT
// 123456789
?>
Foreach
O construtor foreach fornece uma maneira fácil de iterar sobre arrays. O foreach funciona somente em arrays e objetos, e emitirá um erro ao tentar usá-lo em uma variável com um tipo de dado diferente ou em uma variável não inicializada.
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement<?php$titles = array(1958, 1962, 1970, 1994, 2002); foreach ($titles as $value) {
echo "O Brasil foi campeão mundial em $value!\n";
}?>
Break / Continue
- break finaliza a execução da estrutura for, foreach, while, do-while ou switch atual.
- continue é utilizado em estruturas de laço para pular o resto da iteração atual.
Desafio do Capítulo
Qual será a saída da instrução
var_dump((bool) "0"); // bool(?)
?
/whoami
Me chamo Victor Hugo Rocha, sou desenvolvedor PHP e escrevo umas paradas. Se você chegou até aqui não esqueça de deixar o seu clap e/ou um comentário. Se você tem interesse por Laravel ou gostou desse texto você pode ler algum dos meus outros artigos, eu recomendo:
- PHP Básico — Variáveis
- PHP Básico — Sintaxe
- PHP Básico — Operadores
- PHP — Implementando adminLTE no Laravel
- PHP — Criando um CRUD com Laravel
- PHP — Relacionando Models e Tabelas no Laravel
- PHP — Escrevendo o seu primeiro teste no Laravel
- PHP — Atualizando a versão do Laravel para a 5.5
- PHP — Salvando imagens no Laravel 5.5
- PHP — Construingo o seu ambiente de desenvolvimento Laravel com Docker
See you, Space Cowboy!