Aprenda PHP Intermediário

  • Página Inicial
  • Contato!
  • Tudo sobre PHP Intermediário Parte 1!
  • Tudo sobre PHP Intermediário Parte 2!
  • Tudo sobre PHP Intermediário Parte 3!
  • Tudo sobre PHP Intermediário Parte 4!
  • Tudo sobre PHP Intermediário Parte 5!
  • Tudo sobre PHP Intermediário Parte 6!
  • Tudo sobre PHP Intermediário Parte 7!
  • Tudo sobre PHP Intermediário Parte 2

    Trabalhando com Includes

    Primeiro, vamos criar um projeto novo, cuja página inicial (index) será algo tipo isso: Site

    Os includes são usados para evitar que, ao criar um link novo, tenha que trocar em todas as páginas (principalmente sites com muitas páginas).

    Faremos uma segunda página com o nome "empresa.php", quase igual ao index, mas sem o footer e o header. Faremos também uma terceira com "topo.php", apenas com o header e uma quarta com "footer.php" apenas com o footer, todas a princípio, iguais.

    Na página empresa, nos locais onde estariam as tags header e footer, colocamos um bloco PHP com include_once(); e o link da página referente (topo.php e header.php). Agora faremos o mesmo na index.php.

    Essa dica deverá ser usada em partes do site que serão comuns em todo o site, de forma que evite a edição de várias vezes do mesmo link.

    Por ser uma linguagem do lado servidor, nada escrito em PHP retornará pro cliente, se olhar o código-fonte, apenas retornará as linguagens do lado cliente (HTML, CSS e JS). Nada do lado servidor é visível para o cliente (como o PHP).

    Arrays - Conceitos e Prática

    Como sabemos, os arrays (vetores e matrizes), são variáveis compostas, que nos permitem ter mais de um valor numa mesma variável.

    Vejamos alguns exemplos:

    
    $x[0] = "Oi";
    $x[1] = "Olá";
        
    echo $x[0];
    
    

    No caso acima, o $x é uma variável com array de duas posições (sempre numeradas a partir do 0).

    Assim como uma variável pode receber um valor de outra, ela virará array também, se a outra também for, dessa forma, complementando o código acima:

    
    $y = $x;
    echo $y[1];
    
    

    Esse é o jeito mais usado de criar um array:

    
    $zoo = array("Leão", "Elefante", "Girafa");
    echo $zoo;
    
    

    Mas nesse caso acima, o echo só exibirá que a variável é um array, mas não exibirá os valores. Para chamar a posição desejada, coloque ela da mesma forma entre colchetes, por exemplo:

    
    $zoo = array("Leão", "Elefante", "Girafa");
    echo $zoo[0];
    
    

    PS: Também podemos fazer um laço for pra exibir.

    Também podemos declarar as posições específicas, dessa forma:

    
    $nomes = array(0 => "João", 1 => "Camila", 2 => "Júlia", 4 => "Saulo", 3 => "Amanda");
    echo $nomes[3];
    
    

    PS: Note que nesse caso, não é obrigatório seguir a ordem das posições.

    E também não precisa ser somente números, as posições podem ser strings, por exemplo:

    
    $nomes = array("N" => "Sérgio", "P" => "Luciana");
    echo $nomes["N"];
    
    

    Assim como os vetores, temos também as matrizes (no PHP são vetores dentro de vetore). Veja um exemplo novo abaixo:

    
    $x[0][0] = "Valor 1";
    $x[0][1] = "Valor 2";
    
    echo $x[0][1];
    
    

    Declaração de vetor dentro de vetor (matriz):

    
    $n = array(array(2, 3), array(3, 4), array(9, 5));
    
    for($l = 0; $l < 3; $l++) {
        for($c = 0; $c < 2; $c++) {
            if($c < 2 - 1) {
                echo $n[$l][$c] . " ";
            }
            else {
                echo $n[$l][$c] . "<br/>";
            }
        }
    }
    
    

    Matriz com declarações de posições:

    
    $cor = array(0 => array(0 => "Ciano", 1 => "Preto"));
    echo $cor[0][1];
    
    

    Arrays Associativos

    Os arrays associativos, como visto, são aqueles em que os índices, ao invés de números (0, 1, 2, etc.), usamos strings, por exemplo:

    Veja um exemplo disso:

    
    $config = array();
    
    $config["Nome"] = "PontoCOM";
    $config["Email"] = "contato@pontocom";
    $config["Site"] = "http://pontocomdesenvolvimento.net";
    
    echo $config["Nome"] . " - " . $config["Site"];
    
    

    PS: Não é necessário declarar variáveis em PHP.

    A diferença disso pros arrays normais, é que facilita a procura de determinados códigos sem precisar decorar números (assim podemos achar mais facilmente o índice correspondente a campos como nome, email, etc., principalmente ao integrar com MySQL), esse tipo de array não é permitido em algumas linguagens.

    Veja mais um exemplo:

    
    $exemplo = array("Nome" => "PontoCOM", "Email" => "contato@pontocom", "Site" => "http://pontocomdesenvolvimento.net");
    echo $exemplo["Email"];
    
    

    Para vermos como está funcionando o código, usamos funções de depuração, o print_r() e var_dump(), usadas para testes.

    O print_r() mostra os detalhes da variável, em arrays ele mostra os índices e os valores dentro deles, e como ele foi formado, por exemplo:

    
    $exemplo = array("Nome" => "PontoCOM", "Email" => "contato@pontocom", "Site" => "http://pontocomdesenvolvimento.net");
    print_r($exemplo);
    
    

    PS: Ao ver o código-fonte do navegador, dá pra visualizar melhor.

    O var_dump() faz algo parecido, mas mais complexo, mostrando coisas como o número de índices e os tipos primitivos. Esse é mais usado em banco de dados. Por exemplo:

    
    $exemplo = array("Nome" => "PontoCOM", "Email" => "contato@pontocom", "Site" => "http://pontocomdesenvolvimento.net");
    var_dump($exemplo);
    
    

    Array com Laço de Repetição

    Para exibir o conteúdo de todos os índices do array sem precisar mostrar ele em vários echos separados, podemos usar laços de repetição, por exemplo:

    
    $zoo = array("Leão", "Elefante", "Girafa");
    
    for($i = 0; $i < 3; $i++) {
        echo $zoo[$i] . " ";
    }
    
    

    Isso daí, inclusive é muito usado com banco de dados para exibir conteúdos.

    No caso do array for aumentando de tamanho, podemos utilizar a função count(), que mostra a quantidade de elementos do array. Por exemplo:

    
    $zoo = array("Leão", "Elefante", "Girafa");
    
    for($i = 0; $i < count($zoo); $i++) {
        echo $zoo[$i] . " ";
    }
    
    

    PS: Cuidado pra não usar <= para não contar índices vazios. O print_r() e o var_dump() ajudam a identificar erros, inclusive.

    No caso acima, a medida que for adicionando elemento no Array, ele será exibido também, sem a necessidade de alterar o laço.

    Pra facilitar, podemos usar o foreach, dessa forma:

    
    foreach($zoo as $v) {
        echo "$v ";
    }
    
    

    Mas tem um detalhe, se usarmos arrays associativos (com nomes definidos com Arrays), não poderemos usar o laço for. Nesse caso usamos o foreach. Por exemplo:

    
    $exemplo = array("Nome" => "PontoCOM", "Email" => "contato@pontocom", "Site" => "http://pontocomdesenvolvimento.net");
    
    foreach($exemplo as $k => $e) {
        echo "$k = $e<br/>";
    }
    
    

    Veja um exemplo de uso com while para inserir valores no Array:

    
    $fim = 10;
    $i = 0;
    $vetor = array();
    
    while($fim > $i) {
        $vetor[] = "Contador:" . $i;
        $i++;
    }
    
    print_r($vetor);
    
    

    PS: Note que nesse caso, o índice está vazio. Pode ser colocado a variável $i dentro dele.

    Trabalhando com Funções

    Como sabemos, as funções são usadas para economizar tempo e trabalho para ações repetitivas.

    Veja um exemplo simples de uso de funções e invocação dela:

    
    function soma() {
        $x = 10;
        $y = 15;
        echo $x + $y . "<br/>";
    }
    soma();
    
    

    Com uma função só, podemos chamar ela quantas vezes precisar, por exemplo:

    
    function soma() {
        $x = 10;
        $y = 15;
        echo $x + $y . "<br/>";
    }
    soma();
    soma();
    soma();
    soma();
    
    

    Ou com um laço:

    
    function soma() {
        $x = 10;
        $y = 15;
        echo $x + $y . "<br/>";
    }
    
    for($i = 0; $i < 5; $i++) {
        soma();
    }
    
    

    Para entender a passagem de parâmetros, precisamos entender a diferença entre variáveis locais e globais, veja um exemplo:

    
    $x = 10; // Essa é global e não influencia da função.
    
    function soma($x, $y) {
        echo $x + $y . "<br/>"; // Essas são locais de escopo, apenas o que for passado pela função será executado.
    }
    
    soma(2, 5);
    soma(50, 20);
    soma(40, 15);
    
    

    Como visto, apenas o que for passado entre os parênteses da invocação, que serão colocadas nas variáveis locais da função. A variável global com 10 não influenciou em nada. Com isso, podemos passar diferentes valores pelos parâmetros (só não pode deixar eles vazios).

    As variáveis das funções também podem ter um valor padrão, que será substituído pelos valores passados, nesse caso, se não for passado nada, será usado o valor inicializado. Por exemplo:

    
    $x = 10;
    
    function soma($x = 0, $y = 0) {
        echo $x + $y . "<br/>";
    }
    
    soma(2, 5); // Retorna a soma.
    soma(50); // Retorna a soma de 50 (x) e o padrão 0 (y).
    soma(); // Retorna 0, por causa dos padrões.
    
    

    Veja outro exemplo:

    
    function med($n1, $n2, $n3, $n4) {
        $res = ($n1 + $n2 + $n3 + $n4) / 4;
        echo $res;
    }
    med(10, 8, 7, 10);
    
    

    Para uma exibição melhor, sem "gambiarra", usamos um return para retornar o valor para a invocação da função, esta será colocada numa variável, dessa forma:

    
    function med($n1, $n2, $n3, $n4) {
        $res = ($n1 + $n2 + $n3 + $n4) / 4;
        return $res;
    }
    $media = med(10, 8, 7, 10);
    echo "A nota que você tirou foi $media.";
    
    

    Veja um exemplo onde usamos um array com nomes, para exibir dados:

    
    function med($n1, $n2, $n3, $n4) {
        $res = ($n1 + $n2 + $n3 + $n4) / 4;
        return $res;
    }
    
    $alunos[0]["Nome"] = "Alice";
    $alunos[0]["Media"] = med(10, 8, 7, 10);
    
    $alunos[1]["Nome"] = "Mario";
    $alunos[1]["Media"] = med(9, 5, 7, 10);
    
    $alunos[2]["Nome"] = "Camile";
    $alunos[2]["Media"] = med(10, 5, 7, 8);
    
    $alunos[3]["Nome"] = "Jairo";
    $alunos[3]["Media"] = med(10, 4, 8, 10);
    
    for($i = 0; $i < count($alunos); $i++) {
        echo "Nome do Aluno: " . $alunos[$i]["Nome"] . "<br/>";
        echo "Média do Aluno: " . $alunos[$i]["Media"] . "<br/><br/>";
    }
    
    

    Leitura de Arquivos e Exibição de Dados

    Ler e exibir arquivos é uma tarefa muito útil quando se deseja construir aplicações web complexas, capazes de disponibilizar informações úteis para os usuários. Atualmente, precisamos exibir informações dinâmicas em diversos sites. Mostrar os dados sem nenhum tratamento visual não é algo bem-visto em sites. O ideal é fazer a leitura dos dados e sua devida formatação.

    Veja a seguir um exemplo:

    Um site que exiba informações a respeito do mercado financeiro, ou algum site que faz importação de produtos.

    O histórico da cotação do dólar é informação primordial, assim, pode-se criar um arquivo com as cotações no seguinte formato:

    
    20/11/2020 - 5.38710
    21/11/2020 - 5.37970
    22/11/2020 - 5.38060
    23/11/2020 - 5.44500
    24/11/2020 - 5.43900
    25/11/2020 - 5.37910
    26/11/2020 - 5.34980
    27/11/2020 - 5.36980
    28/11/2020 - 5.34560
    29/11/2020 - 5.34560
    30/11/2020 - 5.38030
    
    

    Podemos exibir esses dados em uma tabela HTML, para isso, podemos fazer uma página PHP.

    Veja um exemplo simples disso:

    
    <table border="1">
        <tr>
            <th>Data</th>
            <th align="right">Valor</th>
        </tr>
        <?php
            $arquivo = fopen("cotacoes.txt", "r");
    
            if($arquivo) {
                while(!feof($arquivo)) {
                    $linha = fgets($arquivo);
    
                    $vetor = explode("-", $linha);
                    $data = $vetor[0];
                    $valor = trim($vetor[1]);
                    echo "<tr>";
                    echo "<td>$data</td>";
                    echo "<td align=\"right\">" . number_format($valor, 2, ",", ".") . "</td>";
                    echo "</tr>";
                }
    
                fclose($arquivo);
            }
        ?>
    </table>