PHP e ILP

PHP: Hypertext Preprocessor

  • Linguagem de script de propósito geral
  • Popular para desenvolvimento Web (server-side)
  • Início: 1994
  • Fracamente e dinamicamente tipada

PHP: Hypertext Preprocessor

Pode ser embutida no HTML

    

<!DOCTYPE HTML>
<html>
    <head>
        <title>Example</title>
    </head>
    <body>

        <?php
            echo "Hi, I'm a PHP script!";
        ?>

    </body>
</html>
    

Criando um script PHP

  • Extensão: nome_do_arquivo.php
  • PHP tag
  •     
    <?php /* php code goes here */ ?>
    
    <?php
        /* php code goes here */
    ?>
        
    

echo

Função de impressão

    
<?php
    echo "Hello World!"
?>
    

Exercício

Crie seu primeiro script que irá imprimir Hello World!

Como executar um script?

    
$ php nome_do_arquivo.php
    

Comentários

    
<?php
    echo 'This is a test'; // This is a one-line c++ style comment
    /* This is a multi line comment
       yet another line of comment */
?>
    

Tipos

PHP tem 8 tipos primitivos

  • 4 tipos escalares
  • 2 tipos compostos
  • 2 tipos especiais

Tipos escalares

tipos associados a variáveis que podem conter apenas um valor

boolean

    
<?php
    //Tipo mais simples, expressa TRUE ou FALSE
    $bool_var =  true;
?>
    

integer

    
<?php
    //número do conjunto dos inteiros Z = {...-2, -1, 0, 1, 2, ...}
    $integer_var = 25;
    $integer_var = -12;
?>
    

float / double

    
<?php
    $float_var = 27.55123;
    $float_var = -12.124;
?>
    

string

    
<?php
    $string_var = '27.55123';
    $string_var = "abcdefg";
?>
    

Cuidado!

    
<?php
    echo 'Hello World!\n';
    echo "Hello World!\n";
?>
    

Tipos compostos

Podem conter mais de um valor ao mesmo tempo

  • array
  • objeto

Tipos especiais

NULL

Representa que a variavel não tem nenhum valor

    
<?php
    $var = NULL;
?>
    

Tipos especiais

resource

Referência para um recurso externo

    
<?php
    $result = mysql_query($query);
?>
    

Operadores aritméticos

Operador Nome
- Negação
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Módulo
** Potenciação
    
<?php
    $var = -7; // -7
    echo 2+3,"\n"; // 5
    $var = 3-2; // 1
    $var = 5*2.5; // 12.5
    $var = 8/4; // 4
    echo 8%3,"\n"; // 2
    echo 2**3,"\n"; // 8 --> Introduzido a partir do PHP 5.6
?>
    

Operadores de atribuição

Atribuição Mesmo que
$a += $b $a = $a + $b Adição
$a -= $b $a = $a - $b Subtração
$a *= $b $a = $a * $b Multiplicação
$a /= $b $a = $a / $b Divisão
$a %= $b $a = $a % $b Módulo
$a .= $b $a = $a . $b Concatenação

Exercício

Leia dois números (a e b) da entrada padrão e imprima o resultado da seguinte expressão:

dobro de a somado com b módulo a

Operadores de comparação

Exemplo Nome
$a == $b Igual
$a === $b Idêntico
$a != $b Não iguais
$a <> $b Não iguais
$a !== $b Não idênticos
$a < $b Menor que
$a > $b Maior que
$a <= $b Menor ou igual que
$a >= $b Maior ou igual que

Estruturas de controle

if else

    
<?php
    if(/*conddição*/) {
        // Comandos
    } else if (/*condição*/) {
        // Comandos
    } else {
        // Comandos
    }
?>
    

Operador ternário

    
<?php
    echo $a > $b ? $a : $b,"\n";
?>
    

Exercício 2

Como todos sabem a nota mínima para ser aprovado em uma matéria na UFBA é 5, e tem muita gente com nota abaixo disso. O reitor preocupado com o baixo desempenho dos estudantes sancionou que para utilizar alguns serviços da UFBA como o RU e a biblioteca o estudante deve estar com o coeficiente de rendimento (CR) com valor 5 no mínimo.

Exercício 2

Rafael sempre almoça e janta no RU e está preocupado se poderá continuar a frequentar esse maravilhoso restaurante, então ele pede sua ajuda.

Sua tarefa é criar um script que deverá calcular a média aritmética (CR) de Rafael a partir das notas das 3 matérias que ele pegou no ultimo semestre.

Exercício 2

  • Entrada:

    A entrada é composta por uma única linha com 3 números inteiros separados por espaços.

  • Saída:

    Se o CR de Rafael for pelo menos 5 você deve imprimir a mensagem "RU", caso contrário a mensagem deve ser "Chumbinho". A mensagem deve ser seguida de uma quebra de linha

Switch

    
<?php
    switch ($i) {
        case 0:
            echo "i equals 0";
            break;
        case 1:
        case 2:
            echo "i equals 1 or 2";
            break;
        default:
           echo "i is not equal to 0, 1 or 2";
    }
?>
    

Exercício 3

Francisco começou a estagiar na biblioteca da UFBA, sua primeira tarefa é de arrumar diversos livros nas estante seguindo o padrão da biblioteca.

A estante é dividida em 5 seções (A, B, C, D, E e F) em cada uma delas devem estar os livros em que o código começa com um determinado dígito, seguindo esse padrão.

  • A ==> 1...
  • B ==> 2...
  • ...
  • E ==> 5...

Todos os livros com primeiro dígito do código diferente dos definidos acima deve ser colocados na seção F.

Exercício 3

Você quer que Francisco lhe ajude a estudar Discreta 1, e para isso irá ajuda-lo a terminar sua tarefa mais rapidamente construindo um script que dirá qual é a estante que um livro deve ser colocado.

  • Entrada

    A entrada é composta por uma única linha com um inteiro indicando o primeiro dígito do código do livro.

  • Saída

    Você deve imprimir o código da seção que o livro deve ser colocado.

Operadores lógicos

Exemplo Nome
$a and $b And
$a or $b Or
$a xor $b Xor
!$a Not
$ && $b and
$a || $b Or

Operadores em php sempre retornam valores booleanos

Como calcular o CR de 50 alunos?

Como saber a seção correta para guardar 100 livros diferentes?

Estruturas de repetição

while

    
<?php
    $i = 1;
    while ($i <= 10) { // Condição de parada
        echo $i++;
    }
?>
    

do-while

    
<?php
    $i = 0;
    do {
        echo $i;
    } while ($i > 0);
?>
    

for

    
<?php
    for ($i = 1; $i <= 10; $i++) {
        echo $i;
    }

    for ($i = 1; ; $i++) {
        echo $i;
        if ($i > 10)
            break;
    }
?>
    

Exercício 4

Um dos professores ficou interessado no seu trabalho de calcular o CR dos alunos, ele pede sua ajuda para saber quantos alunos estão com CR acima de 7.

Exercício 4

  • Entrada:

    A primeira linha da entrada terá um inteiro n que representa o número de notas, a seguir cada grupo de n linhas representará as notas de um aluno. A quantidade de alunos não é definida, um inteiro -1 indicará que não tem mais alunos

  • Saída

    Sua saída deve ter apenas um inteiro indicando a quantidade de alunos com CR acima de 7.

Exemplo de entrada

    
3
5
8
9
4
7
5
9
9
6
-1
    

Saída: 2

Arrays

Armazena multiplos valores em apenas uma variável

    
<?php
    $a = array(); // Cria array vazio

    $cargos = array("Gerente", "Assessor", "Diretor", "Conselheiro");
    echo $cargos[2],"\n"; // Diretor

    $cargos[10] = "Trainee";
    echo $cargos[10],"\n"; // Trainee

    $cargos[] = "Consultor";

    unset($cargos[1]);

    print_r($cargos);
    /*
    Array
    (
        [0] => Gerente
        [2] => Diretor
        [3] => Conselheiro
        [10] => Trainee
        [11] => Consultor
    )
    */
?>
    

Array multidimensional

    
<?php
    $cargos = array(
        array("Gerente de Projetos"),
        array("Gerente de próvisão", "Gerente de Treinamentos"),
        array("Gerente de Qualidade", "Gerente de Gestão"),
        array("Gerente de Mercado", "Gerente de Comunicação"),
        array("Gerente ADM-FIN"),
        array("Gerente de Negócios"),
    );

    echo $cargos[2][1],"\n";

    print_r($cargos);
?>
    

foreach

    
<?php
    $nums = array(1, 4, 2, 7, 9, 6, 5);

    foreach($nums as $n)
        echo $n," ";
    echo "\n";
?>
    

Exercício 5

  • Entrada:

    A primeira linha terá um inteiro n indicando a quantidade de números. As próximas n linhas conterão um inteiro cada.

  • Saída

    Você deve imprimir duas linhas, a primeira com os números pares e a segunda com os ímpares, a ordem deve ser mantida.

Arrays associativos

    
<?php
    $array = array(
        "foo" => "bar",
        "bar" => "foo",
        100   => -100,
        -100  => 100,
    );
    var_dump($array);
    /*
    array(4) {
        ["foo"]=>
        string(3) "bar"
        ["bar"]=>
        string(3) "foo"
        [100]=>
        int(-100)
        [-100]=>
        int(100)
    }
    */
?>
    
    
<?php
    $cargos = array(
        "DPRJ" => array("Gerente de Projetos"),
        "DGP" => array("Gerente de próvisão", "Gerente de Treinamentos"),
        "DVP" => array("Gerente de Qualidade", "Gerente de Gestão"),
        "DMKT" => array("Gerente de Mercado", "Gerente de Comunicação"),
        "DAF" => array("Gerente ADM-FIN"),
        "DPRE" => array("Gerente de Negócios"),
    );

    foreach ($cargos as $diretoria => $cd) {
        echo $diretoria," => ";
        foreach ($cd as $c) {
            echo $c," ";
        }
        echo "\n";
    }
?>
    
    
<?php
    /*
    DPRJ => Gerente de Projetos
    DGP => Gerente de próvisão Gerente de Treinamentos
    DVP => Gerente de Qualidade Gerente de Gestão
    DMKT => Gerente de Mercado Gerente de Comunicação
    DAF => Gerente ADM-FIN
    DPRE => Gerente de Negócios
    */
?>
    

Exercício 6

Dessa vez seu professor quer saber quais são os alunos que tem nota par e quais tem nota ímpar

  • Entrada:

    A primeira linha terá um inteiro n indicando a quantidade de alunos. As próximas n linhas serão formadas pelo nome do aluno e pela nota (inteiro), separados por um espaço.

  • Saída:

    Na primeira linha você deve imprimir as o nome dos alunos com nota par e na segunda os com nota ímpar.

    
<?php
    // Create a simple array.
    $array = array(1, 2, 3, 4, 5);
    print_r($array);

    // Now delete every item, but leave the array itself intact:
    foreach ($array as $i => $value) {
        unset($array[$i]);
    }
    print_r($array);

    // Append an item (note that the new key is 5, instead of 0).
    $array[] = 6;
    print_r($array);

    // Re-index:
    $array = array_values($array);
    $array[] = 7;
    print_r($array);
?>
    

Strings

    
<?php
    $st = "InfoJr UFBA";
    echo strlen($st),"\n"; // 11
?>
    

Exercício 7

Você deve criar um script para verificar se uma string é ou não um palíndromo

  • Entrada:

    A entrada tem apenas uma linha com uma string

  • Saída:

    Se a string for um palíndromo imprima "S", caso contrário imprima "N".

    
<?php
    $in = fscanf(STDIN, "%s");
    list($st) = $in;

    echo $st == strrev($st) ? "S\n" : "N\n";
?>
    
    
<?php
    $st = "GitHub Gmail Trello Drive";

    $ferramentas = explode(" ", $st);
    print_r($ferramentas);

    $comma = implode(", ", $ferramentas);
    echo $comma,"\n";

    echo strlen($comma),"\n";

    echo strpos($comma, "Tre"),"\n";

    echo strtolower($comma),"\n";
    echo strtoupper($comma),"\n";
?>
    

Querem mais?