• Nenhum resultado encontrado

Prof Alexandre EUGÊNIO da Silva

N/A
N/A
Protected

Academic year: 2021

Share "Prof Alexandre EUGÊNIO da Silva"

Copied!
62
0
0

Texto

(1)

“Deus é fiel! Sem Ele nada somos e nada faríamos”

Rua da Quitanda 185 Centro - Rio de Janeiro - RJ

Telefone: (021) 2233-4982 / 2233-6186 cursoadonai@yahoo.com.br

(2)

Profº Alexandre Eugênio da Silva Página 1

SUMÁRIO

1. Estrutura e visão geral da linguagem

1.1. Interação entre PHP e HTML 1.2. Identificadores 1.3. Variáveis 1.4. Constantes 1.5. Operadores 1.6. Estruturas de controle 2. Arrays 3. Manipulação de strings 4. Utilização de funções

5. Conceitos e implementação de orientação a objeto:

5.1. Classe

5.2. Objeto

5.3. Herança

5.4. Criação de objetos

(3)

Profº Alexandre Eugênio da Silva Página 2 1. Estrutura e visão geral da linguagem

PHP (um acrônimo recursivo para "PHP: Hypertext Preprocessor") é uma linguagem de script Open Source de uso geral, muito utilizada e especialmente utilizada para o desenvolvimento de aplicações Web.

Programas ou aplicaçãos desenvolvidas para WEB através de uma linguagem de script como PHP possuem um escopo muito diferente em relação aos mesmos desenvolvidos para Desktop (programas que rodam no computador do usuário).

Primeiramente alguns conceitos devem ser muito bem entendidos para que possamos analisar o comportamento desse tipo de desenvolvimento:

Scripts – Um script como o próprio nome sugere, nada mais é que uma sequência de rotinas ou instruções que nos retornarão um resultado esperado.

Dentro do contexto WEB, os scripts são arquivos de texto1 os quais colocamos os códigos-fonte da linguagem de programação utilizada.

Server Side – Existem scripts do tipo “Server Side”, os mesmo são interpretados (processados / executados) pelo Servidor WEB que os retornam para o Navegador WEB cliente.

Client Side – Scripts do tipo “Client Side”, são interpretados (processados / executados) pelo Navegador WEB do cliente. O script “Client Side”, mais utilizado no mundo é o JAVASCRIPT.

1 – Arquivo de texto – Este arquivo texto possuirá a extensão da linguagem empregada. Exemplo: .php para script PHP; .asp para linguagem ASP; .aspx para linguagem .NET; .jsp para linguagem JAVA para WEB.

(4)

Profº Alexandre Eugênio da Silva Página 3 1.1. Interação entre PHP e HTML

Página PHP

Crie um novo arquivo chamado ola.php e coloque-o em seu diretório root do seu servidor web com o seguinte conteúdo:

Ex.: Nosso primeiro script PHP: ola.php <html>

<head>

<title>PHP Teste</title> </head>

<body>

<?php echo "<p>Olá Mundo</p>"; ?> </body>

</html>

Use o seu navegador para acessar o arquivo pelo endereço de seu servidor web, ao final do endereço coloque o arquivo "/ola.php" como referência.

Quando o desenvolvimento é local você usará uma url como esta http://localhost/ola.php ou http://127.0.0.1/ola.php.

Se tudo foi configurado corretamente, o arquivo irá ser interpretado pelo PHP e irá mostrar a seguinte mensagem de saída no seu navegador:

Saída no navegador Código-fonte

Olá Mundo <html> <head> <title>PHP Teste</title> </head> <body> <p>Olá Mundo</p> </body> </html>

Note que isto não é como em um script CGI. O arquivo não precisa ser executável ou especial em nenhum aspecto. Pense nesse arquivo como um arquivo HTML normal mas com a diferença que ele pode conter algumas tags especiais à mais que permitem a você fazer coisas mais interessantes do que somente páginas HTML estáticas.

Este exemplo é extremamente simples e você realmente não precisa usar o PHP para criar uma página como esta. Tudo o que ele faz é mostrar uma mensagem Olá Mundo usando a declaração echo() do PHP.

O objetivo do exemplo é mostrar o formato especial das tags do PHP. Neste exemplo nós usamos <?php para indicar que à partir daquele ponto começa um código PHP. Então nós colocamos uma declaração de fechamento para indicar que o script PHP acabou, usando a tag ?>. Você pode usar o PHP em qualquer parte do seu código HTML, e também pode usar várias tags de abertura e fechamento no mesmo arquivo.

(5)

Profº Alexandre Eugênio da Silva Página 4 1.2. Identificadores

Os identificadores são os nomes de variáveis, funções e classes. Há algumas regras simples sobre indentificadores:

• Os identificadores podem ser de qualquer comprimento e podem consister em letras, números, sublinhados e sinais de cifrão;

• Os identificadores não podem iniciar com um dígito;

• Diferenciam letras maiúsculas e minúsculas. Os nomes de funções são uma exceção a essa regra.

• Uma variável pode ter o mesmo nome que uma função. Mas isso é confuso e deve ser evitado.

• Além disso, você não pode criar uma função com o mesmo nome de outra.

<?php

$var = 'Bob'; $Var = 'Joe';

echo "$var, $Var"; // exibe "Bob, Joe"

$4site = 'not yet'; // inválido; começa com um número $_4site = 'not yet'; // válido; começa com um sublinhado

$täyte = 'mansikka'; // válido; 'ä' é um caracter ASCII (extendido) 228 ?>

1.3. Variáveis

As variáveis no PHP são representadas por um cifrão ($) seguido pelo nome da variável. Os nomes de variável no PHP fazem distinção entre maiúsculas e minúsculas.

$this é uma variável especial que não pode ser atribuída. Tipos

Booleanos

Este é o tipo mais fácil. Um booleano expressa um valor de verdade. Ele pode ser TRUE ou FALSE. Sintaxe

Para especificar um literal booleano, use as palavras chave TRUE ou FALSE. Ambas são insensitivas ao caso.

<?php

$foo = True; // assimila o valor TRUE para $foo ?>

(6)

Profº Alexandre Eugênio da Silva Página 5 Usualmente você pode utilizar algum tipo de operador que retorne um valor booleano, e passá-lo para uma estrutura de controle.

<?php

// == é um operador que testa // igualdade e retorna um booleano if ($action == "mostrar_versao") { echo "A versão é 1.23";

}

// isto não é necessário ...

if ($exibir_separadores == TRUE) { echo "<hr>\n";

}

// ... porque você pode simplesmente escrever isso: if ($exibir_separadores) {

echo "<hr>\n"; }

?>

Convertendo para booleano

Para converter explicitamente um valor para booleano, utilize-se dos modificadores (bool) ou (boolean). Entretanto, na maioria dos casos, você não precisa utilizar o modificador, desde que qualquer valor será convertido automaticamente se um operador, função ou estrutura de controle requerer um argumento booleano.

Veja também Manipulação de tipos.

Quando convertendo para booleano, os seguintes valores são considerados FALSE:

• o próprio booleano FALSE

• o inteiro 0 (zero)

• o ponto flutuante 0.0 (zero)

• uma string vazia e a string "0"

• um array sem elementos

• o tipo especial NULL (incluindo variáveis não definidas)

Qualquer outro valor é considerado TRUE (incluindo qualquer recurso). Aviso

-1 é considerado TRUE, como qualquer valor não zero (negativos ou positivos)! <?php

var_dump((bool) ""); // bool(false) var_dump((bool) 1); // bool(true) var_dump((bool) -2); // bool(true) var_dump((bool) "foo"); // bool(true) var_dump((bool) 2.3e5); // bool(true) var_dump((bool) array(12)); // bool(true) var_dump((bool) array()); // bool(false) var_dump((bool) "false"); // bool(true) ?>

(7)

Profº Alexandre Eugênio da Silva Página 6 Inteiros

Um inteiro é um número do conjunto Z = {..., -2, -1, 0, 1, 2, ...}. Sintaxe

Inteiros podem ser especificados em notação decimal (base 10), hexadecimal (base 16) ou octal (base 8), opcionalmente precedido de sinal (- ou +).

Para usar a notação octal, você precisa preceder o número com um 0 (zero). Para utilizar a notação hexadecimal, preceda número com 0x.

Literais inteiras <?php

$a = 1234; // número decimal $a = -123; // um número negativo

$a = 0123; // número octal (equivalente a 83 em decimal)

$a = 0x1A; // número hexadecimal (equivalente a 26 em decimal) ?>

Números de ponto flutuante

Números de ponto flutuante ("floats", "doubles" ou "números reais") podem ser especificados utilizando qualquer uma das sintaxes seguintes:

<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?> Strings

Uma string é uma série de caracteres. No PHP, um caracter é o mesmo que um byte, ou seja, há exatamente 256 caracteres diferentes possíveis.

Nota: Não há nenhum problema nas strings se tornarem muito grandes. Não há nenhum limite para o tamanho de strings imposta pelo PHP, então não há razão para se preocupar com strings longas. Sintaxe

• apóstrofo

• aspas Apóstrofos

A maneira mais simples para especificar uma string é delimitá-la entre apóstrofos (também conhecido por aspas simples).

Para especificar um apóstrofo você precisará "escapá-lo" com um contra barra (\), como em muitas outras linguagens. Se uma contra barra precisa ocorrer antes de um apóstrofo ou no final da string, você precisa duplicá-la.

Note que se você tentar escapar qualquer outro caracter, a contra barra também será impressa! Então geralmente não é necessário escapar a própria contra barra.

(8)

Profº Alexandre Eugênio da Silva Página 7 Nota: Diferentemente das duas outras sintaxes, variáveis e seqüências de escape para caracteres especiais não serão substituídas quando elas ocorrerem dentro de strings delimitadas por apóstrofes. <?php

echo 'isto é uma string comum';

echo 'Você pode incluir novas linhas em strings, dessa maneira que estará

tudo bem';

// Imprime: Arnold disse uma vez: "I\'ll be back" echo 'Arnold disse uma vez: "I\'ll be back"'; // Imprime: Você tem certeza em apagar C:\*.*? echo 'Você tem certeza em apagar C:\\*.*?'; // Imprime: Você tem certeza em apagar C:\*.*? echo 'Você tem certeza em apagar C:\*.*?';

// Imprime: Isto não será substituido: \n uma nova linha echo 'Isto não será substituido: \n uma nova linha'; // Imprime: Variaveis $também não $expandem echo 'Variaveis $também não $expandem'; ?>

Aspas

Se a string é delimitada entre aspas ("), o PHP entende mais seqüências de escape para caracteres especiais:

Seqüências de escape Seqüência Significado

\n fim de linha (linefeed ou LF ou 0x0A (10) em ASCII)

\r retorno de carro (carriage return ou CR ou 0x0D (13) em ASCII) \t TAB horizontal (HT ou 0x09 (9) em ASCII)

\\ contra barra ou barra invertida

\$ sinal de cifrão

\" Aspas

Arrays

Um array no PHP é atualmente um mapa ordenado. Um mapa é um tipo que relaciona valores para chaves. Este tipo é otimizado de várias maneiras, então você pode usá-lo como um array real, ou uma lista (vetor), hashtable (que é uma implementação de mapa), dicionário, coleção, pilha, fila e provavelmente mais. Como você pode ter outro array PHP como um valor, você pode facilmente simular árvores.

Um array pode ser criado com o construtor de linguagem array(). Ele pega certo número de pares separados por vírgula chave => valor .

array( chave => valor )

// chave pode ser tanto string ou um integer // valor pode ser qualquer coisa

(9)

Profº Alexandre Eugênio da Silva Página 8

<?php

$arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; // bar

echo $arr[12]; // 1 ?>

A chave pode ser tanto um integer ou uma string. Se a chave é uma representação padrão de um integer, ele será interpretado assim (por exemplo, "8" será interpretado como 8, enquanto "08" será interpretado como "08"). Floats em chaves são truncados para integer.

O valor pode ser qualquer tipo PHP: <?php

$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42)); echo $arr["somearray"][6]; // 5

echo $arr["somearray"][13]; // 9 echo $arr["somearray"]["a"]; // 42 ?>

Se omitir a chave quando fornece um novo item, o maior índice inteiro é obtido, e a nova chave será esse máximo + 1. Se você especificar uma chave que já possui um valor assimilada a ela, então o valor é sobrescrito.

<?php

// Esse array é como ...

array(5 => 43, 32, 56, "b" => 12); // ... este array

array(5 => 43, 6 => 32, 7 => 56, "b" => 12); ?>

Você pode também modificar um array existente explicitamente assimilando valores nele.

Isto é feito apenas assimilando valores para o array enquanto especificando a chave em colchetes. Você pode omitir a chave, colocando um par vazio de colchetes ("[]").

$arr[chave] = valor; $arr[] = valor;

// chave tanto um integer ou string // valor pode ser qualquer coisa

(10)

Profº Alexandre Eugênio da Silva Página 9 Se $arr não existir ainda, ele será criado. Então isto é um meio alternativo para especificar um array. Para mudar um certo valor, apenas assimile um novo valor para um elemento especificado por sua chave. Se você quiser remover um par chave/valor, você deve aplicar unset() neste par.

<?php

$arr = array(5 => 1, 12 => 2);

$arr["x"] = 42; // Isto acrescenta um novo elemento // para o array com a chave "x"

unset($arr[5]); // Isto remove um elemento do array unset($arr); // E isto apaga todo o array

?>

Objetos

Inicialização de objetos

Para inicializar um objeto, você usa a instrução new, criando uma instância do objeto em uma variável. <?php class MinhaClasse { function metodo() {

echo "Executando metodo."; }

}

$bar = new MinhaClasse; $bar->metodo();

?>

Convertendo para objeto

Se um objeto é convertido para objeto, ele não é modificado. Se um valor de outro tipo é convertido para objeto, uma nova instância da stdClass é criada. Se o valor é NULL, a nova instância estará vazia. Arrays convertem para um objeto com propriedades chamadas pelas chaves do array e com os respectivos valores. Para qualquer outro valor, uma variável membro chamada scalar irá conter o valor.

<?php

$obj = (object) 'palavra';

echo $obj->scalar; // exibe 'palavra' ?>

1.4. Constantes

Uma constante é um identificador (nome) para um único valor. Como o nome sugere, esse valor não pode mudar durante a execução do script. As constantes são case-sensitive (distinguem letras maiúsculas e minúsculas) por padrão. Por convenção os nomes de constantes são sempre em maiúsculas.

O nome de uma constante tem as mesmas regras de qualquer identificador no PHP. Um nome de constante válida começa com uma letra ou sublinhado, seguido por qualquer número de letras, números ou sublinhados.

(11)

Profº Alexandre Eugênio da Silva Página 10 Nomes de constantes válidos e inválidos

<?php

// Nomes de constantes válidos define("FOO", "alguma coisa"); define("FOO2", "alguma outra coisa"); define("FOO_BAR", "alguma coisa mais"); // Nomes de constantes inválidas

define("2FOO", "alguma coisa"); ?>

O escopo de uma constante é global. Você pode acessar constantes de qualquer lugar em seu script sem se preocupar com o escopo.

Sintaxe

Você pode definir uma constante utilizando-se da função define(). Quando uma constante é definida, ela não pode ser mais modificada ou anulada.

Somente dados escalares (boolean, integer, float e string) pode ser colocados em constantes. Não defina constantes do tipo resource (recurso).

Você pode obter o valor de uma constante simplesmente especificando seu nome. Diferentemente de variáveis, você não pode prefixar uma constante com um sinal de $. Você também pode utilizar a função constant() para ler o valor de uma constante, se você precisar obter seu valor dinamicamente. Utilize get_defined_constants() para obter a lista de todas as constantes definidas. Estas são as diferenças entre constantes e variáveis:

• Constantes não podem ter um sinal de cifrão ($) antes delas;

• Constantes só podem ser definidas utilizando a função define(), e não por simples assimilação;

• Constantes podem ser definidas e acessadas de qualquer lugar sem que a regras de escopo de variáveis sejam aplicadas;

• Constantes não podem ser redefinidas ou eliminadas depois que elas são criadas; e

• Constantes só podem conter valores escalares. Definindo Constantes

<?php

define("CONSTANT", "Hello world."); echo CONSTANT; // imprime "Hello world."

echo Constant; // imprime "Constant" e gera um aviso de alerta. ?>

(12)

Profº Alexandre Eugênio da Silva Página 11 1.5. Operadores

Operadores Aritméticos

Exemplo Nome Resultado

-$a Negação Oposto de $a.

$a + $b Adição Soma de $a e $b.

$a - $b Subtração Diferença entre $a e $b.

$a * $b Multiplicação Produto de $a e $b.

$a / $b Divisão Quociente de $a por $b.

$a % $b Módulo Resto de $a dividido por $b.

O operador de divisão ("/") sempre retorna um valor com ponto flutuante, a não ser que os dois operados sejam inteiros (ou strings que são convertidas para inteiros) e numéricos inteiramente divisíveis, em outro caso um inteiro é retornado.

Operadores de Atribuição

O operador básico de atribuição é "=". Isto quer dizer, na verdade, que o operando da esquerda recebe o valor da expressão da direita (ou seja, "é configurado para").

O valor de uma expressão de atribuição é o valor atribuído. Ou seja, o valor de "$a = 3" é 3. Isto permite que você crie algumas expressões como:

<?php

$a = ($b = 4) + 5; // $a é igual a 9 agora e $b foi configurado como 4. ?>

Além do operador básico de atribuição, há "operadores combinados" para todos os operadores aritméticos, de array e string que permitem a você pegar um valor de uma expressão e então usar seu próprio valor para o resultado daquela expressão. Por exemplo:

<?php

$a = 3;

$a += 5; // configura $a para 8, como se disséssemos: $a = $a + 5; $b = "Bom ";

$b .= "Dia!"; // configura $b para "Bom Dia!", como em $b = $b . "Dia!"; ?>

Operadores de Comparação

Operadores de comparação, como os seus nomes implicam, permitem que você compare dois valores. Você pode se interessar em ver as tabelas de comparação de tipos, que tem exemplo das várias comparações entre tipos relacionadas.

(13)

Profº Alexandre Eugênio da Silva Página 12 Operadores de comparação

Exemplo Nome Resultado

$a == $b Igual Verdadeiro (TRUE) se $a é igual a $b.

$a === $b Idêntico Verdadeiro (TRUE) se $a é igual a $b, e eles são do mesmo tipo (introduzido no PHP4).

$a != $b Diferente Verdadeiro se $a não é igual a $b. $a <> $b Diferente Verdadeiro se $a não é igual a $b.

$a !== $b Não idêntico Verdadeiro de $a não é igual a $b, ou eles não são do mesmo tipo (introduzido no PHP4).

$a < $b Menor que Verdadeiro se $a é estritamente menor que $b. $a > $b Maior que Verdadeiro se $a é estritamente maior que $b. $a <= $b Menor ou igual Verdadeiro se $a é menor ou igual a $b. $a >= $b Maior ou igual Verdadeiro se $a é maior ou igual a $b.

Se você comparar um inteiro com uma string, a string é convertida para um número. Se você comparar 2 strings numéricas, elas serão comparadas como inteiras. Estas regras também se aplicam ao comando switch.

<?php

var_dump(0 == "a"); // 0 == 0 -> true var_dump("1" == "01"); // 1 == 1 -> true var_dump("1" == "1e0"); // 1 == 1 -> true switch ("a") {

case 0: echo "0"; break;

case "a": // nunca é alcançado porque "a" já foi combinado com 0 echo "a";

break; }

?>

Para vários tipos, comparações são feitas de acordo com a seguinte tabela (em ordem). Comparação com vários tipos

Tipo do 1º operando Tipo do 2º operando Resultado

null ou string string Converte NULL para "", numérico ou comparação léxica

bool or null qualquer Converte para bool, FALSE < TRUE

object object Classes nativas podem definir como são

comparadas, classes diferentes são incomparáveis. Classes de mesmo tipo – comparação de propriedades

string, resource ou number

string, resource ou number Transforma strings e resources para números

array array Array com menos membros é menor, se a

chave do operando 1 não é encontrada no operando 2, então os arrays são incomparáveis, caso contrário - compara valor por valor (veja o seguinte exemplo)

array qualquer array é sempre maior

Object qualquer object é sempre maior

(14)

Profº Alexandre Eugênio da Silva Página 13 <?php

function comparacao_array($op1, $op2) {

if (count($op1) < count($op2)) { return -1; // $op1 < $op2

} elseif (count($op1) > count($op2)) { return 1; // $op1 > $op2

}

foreach ($op1 as $key => $val) { if (!array_key_exists($key, $op2)) { return null; // incomparavel } elseif ($val < $op2[$key]) { return -1;

} elseif ($val > $op2[$key]) { return 1;

} }

return 0; // $op1 == $op2 }

?>

Operador Ternário

Outro operador condicional é o operador ?: (ou ternário). Atribuindo um valor padrão

<?php

$action = (empty($_POST['action'])) ? 'default' : $_POST['action']; // o mesmo que if (empty($_POST['action'])) { $action = 'default'; } else { $action = $_POST['action']; } ?>

A expressão (expr1) ? (expr2) : (expr3) é avaliada para expr2 se expr1 é avaliada como TRUE, ou expr3 se expr1 é avaliada como FALSE.

Nota: Note que o operador ternário é um comando, e ele não é avaliado para uma variável, mas para o resultado do comando. Isto é importante saber se você quer retornar uma variável por referência. O comando return $var == 42 ? $a : $b; em uma função que retorna por referência conseqüentemente não irá funcionar e será avisado nas últimas versões do PHP.

Nota: É recomendado evitar "stacking" de expressões ternárias. O comportamento do PHP quando usando mais de um operador ternário no único comando não é óbvio:

(15)

Profº Alexandre Eugênio da Silva Página 14 Comportamento do ternário (não recomendado)

<?php

// o seguinte aparenta imprimir 'true' echo (true?'true':false?'t':'f');

// conteudo, a saída acima é 't'

// isto por causa da expressão ternário se avaliada da esquerda para direita // o seguinte é a versão mais óbvia do mesmo código acima

echo ((true ? 'true' : 'false') ? 't' : 'f');

// aqui, você pode ver que a primeira expressão é avaliada para 'true', que // por sua vez avalia para (bool)true, assim retornando a parte true da // segunda expressão ternária.

?>

Operadores de controle de erro

O PHP suporta um operador de controle de erro: o sinal 'arroba' (@). Quando ele precede uma expressão em PHP, qualquer mensagem de alerta ou erro que possa ser gerada por aquela expressão será ignorada.

<?php

/* Erro de arquivo intencional */

$my_file = @file ('arquivo_nao_existente') or die ("Falha abrindo arquivo: '$php_errormsg'");

// Isto funciona para qualquer expressão, não apenas para funções: $value = @$cache[$key];

// você não receberá nenhum aviso se a chave $key não existir. ?>

Nota: O operador @ funciona somente em expressões. Uma regra simples para lembrar disso: se você pode pegar o valor de alguma coisa, você pode prefixar isso com o @. Assim, você pode prefixar chamadas de variáveis, funções e include()s, constantes e afins. Você não pode prefixar definições de funções ou classe, estruturas condicionais como o if, foreach e assim por diante.

Nota: O prefixo de controle de erro "@" não desabilita mensagens que são resultado de erros de interpretação (parse errors).

Operadores de Execução

O PHP suporta um operador de execução: acentos graves (``). Note que não são apóstrofes! O PHP tentará executar o conteúdo dos acentos graves como um comando do shell; a saída será retornada (isto é, ela não será simplesmente descarregada para a saída; ela pode ser atribuída a uma variável). A utilização do operador contra-apóstrofo é idêntica a função shell_exec().

<?php

$output = `ls -l`;

echo "<pre>$output</pre>"; ?>

Nota: O operador de execução fica desabilitado quando safe mode está ativo ou shell_exec() está desabilitado.

Operadores de Incremento/Decremento

(16)

Profº Alexandre Eugênio da Silva Página 15 Nota: Os operadores incremento/decremento não afetam valores booleanos. Decrementando valores NULL não há efeito também, mas incrementando resulta em 1.

Operadores de Incremento / Decremento Exemplo

Nome Efeito

++$a Pré-incremento Incrementa $a em um, e então retorna $a. $a++ Pós-incremento Retorna $a, e então incrementa $a em um. --$a Pré-decremento Decrementa $a em um, e então retorna $a. $a-- Pós-decremento Retorna $a, e então decrementa $a em um. Aqui está um script de exemplo simples:

<?php

echo "<h3>Pós-incremento</h3>"; $a = 5;

echo "Deve ser 5: " . $a++ . "<br />\n"; echo "Deve ser 6: " . $a . "<br />\n"; echo "<h3>Pré-incremento</h3>"; $a = 5;

echo "Deve ser 6: " . ++$a . "<br />\n"; echo "Deve ser 6: " . $a . "<br />\n"; echo "<h3>Pós-decremento</h3>"; $a = 5;

echo "Deve ser 5: " . $a-- . "<br />\n"; echo "Deve ser 4: " . $a . "<br />\n"; echo "<h3>Pré-decremento</h3>"; $a = 5;

echo "Deve ser 4: " . --$a . "<br />\n"; echo "Deve ser 4: " . $a . "<br />\n"; ?>

Operações aritmétricas em variáveis caracter <?php $i = 'W'; for ($n=0; $n<6; $n++) { echo ++$i . "\n"; } ?>

O exemplo acima irá imprimir: X Y Z AA AB AC Operadores Lógicos

Exemplo Nome Resultado

$a and $b E Verdadeiro (TRUE) se tanto $a quanto $b são verdadeiros. $a or $b OU Verdadeiro se $a ou $b são verdadeiros.

(17)

Profº Alexandre Eugênio da Silva Página 16

! $a NÃO Verdadeiro se $a não é verdadeiro.

$a && $b E Verdadeiro se tanto $a quanto $b são verdadeiros. $a || $b OU Verdadeiro se $a ou $b são verdadeiros.

A razão para as duas variantes dos operandos "and" e "or" é que eles operam com precedências diferentes. (Veja Precedência de Operadores.)

Ilustrando operadores lógicos <?php

// "&&" tem maior precedência que "and" $a = false && true;

$b = true and false; var_dump($a, $b);

// "||" tem maior precedência que "or" $c = false || true;

$d = true or false; var_dump($c, $d); ?>

O exemplo acima irá imprimir algo similar a: bool(false)

bool(true) bool(true) bool(true)

Operadores de String

Há dois operadores de string. O primeiro é o operador de concatenação ('.'), que retorna a concatenação dos seus argumentos direito e esquerdo. O segundo é o operador de atribuição e concatenação ('.='), que acrescenta o argumento do lado direito no argumento do lado esquerdo. <?php

$a = "Olá ";

$b = $a . "mundo!"; // agora $b contém "Olá mundo!" $a .= "mundo!"; // agora $a contém "Olá mundo!" ?>

O operador + acrescenta os elementos da direita no array da esquerda, contudo, chaves duplicadas NÃO são sobrescritas.

<?php

$a = array("a" => "maçã", "b" => "banana");

$b = array("a" =>"pêra", "b" => "framboesa", "c" => "morango"); $c = $a + $b; // Uniao de $a e $b

echo "União de \$a e \$b: \n"; var_dump($c);

(18)

Profº Alexandre Eugênio da Silva Página 17 $c = $b + $a; // União de $b e $a

echo "União de \$b e \$a: \n"; var_dump($c);

?>

Quando executado, o script produz uma saída assim: União de $a e $b: array(3) { ["a"]=> string(5) "maçã" ["b"]=> string(6) "banana" ["c"]=> string(6) "morango" } União de $b e $a: array(3) { ["a"]=> string(4) "pêra" ["b"]=> string(10) "framboesa" ["c"]=> string(6) "morango" }

Elementos do array são iguais para efeitos de comparação se eles possuem o mesmo valor e chave. Comparando arrays

<?php

$a = array("maçã", "banana");

$b = array(1 => "banana", "0" => "maçã"); var_dump($a == $b); // bool(true)

var_dump($a === $b); // bool(false) ?>

Operadores de tipo

instanceof é usado para determinar se um variável do PHP é uma objeto instânciado de uma certa classe:

Usando instanceof com classes <?php

class A {} class B {} $a = new A;

var_dump($a instanceof A); var_dump($a instanceof B ); ?>

(19)

Profº Alexandre Eugênio da Silva Página 18 bool(true)

bool(false)

instanceof pode também ser usado para determinar se uma variável é um objeto instanciado de uma classe que herda de uma classe pai:

Usando instanceof com herança <?php

class ClasseMae { }

class MinhaClasse extends ClasseMae { } $a = new MinhaClasse;

var_dump($a instanceof MinhaClasse); var_dump($a instanceof ClasseMae); ?>

O exemplo acima irá imprimir: bool(true)

bool(true)

Por fim, instanceof pode também ser usado para determinar se uma variável é um objeto instanciado de uma classe que implementa uma interface:

Usando instanceof para classe <?php

interface MinhaInterface {}

class MinhaClasse implements MinhaInterface { } $a = new MinhaClasse;

var_dump($a instanceof MinhaClasse); var_dump($a instanceof MinhaInterface); ?>

O exemplo acima irá imprimir: bool(true)

bool(true)

Embora instanceof é usualmente usado com um nome de classe literal, ele pode também ser usado com outro objeto ou uma variável string:

Usando instanceof com outras variáveis <?php

interface MinhaInterface {}

class MinhaClasse implements MinhaInterface {} $a = new MinhaClasse;

$b = new MinhaClasse; $c = 'MinhaClasse'; $d = 'NaoMinhaClasse';

var_dump($a instanceof $b); // $b é um objeto da classe MinhaClasse var_dump($a instanceof $c); // $c é uma string 'MinhaClasse'

var_dump($a instanceof $d); // $d é uma string 'NaoMinhaClasse' ?>

(20)

Profº Alexandre Eugênio da Silva Página 19 O exemplo acima irá imprimir:

bool(true) bool(true) bool(false) 1.6. Estruturas de controle if

A construção if é uma das mais importantes implementações de muitas linguagens, incluindo o PHP. Ela permite a execução condicional de fragmentos de código. O PHP implementa uma estrutura if que é similar aquela do C:

if (expressao) instrucoes

Uma expressão é avaliada por seu contexto booleano. Se expressão for avaliado como TRUE, o PHP executará as instruções, e se for avaliado como FALSE, ele será ignorado.

Os exemplos a seguir mostrariam “a é maior que b” se $a for maior que $b: <?php

if ($a > $b)

echo "a é maior que b"; ?>

Normalmente você vai querer ter mais que uma instrução executada condicionalmente. E é claro, não há necessidade de englobar cada instrução com uma cláusula if. Em vez disso, você pode colocar várias instruções em um agrupamento de comandos. Por exemplo, este código mostraria “a é maior que b” se $a for maior que $b, e então atribuiria o valor de $a para $b:

<?php

if ($a > $b) {

echo "a é maior que b"; $b = $a;

} ?>

Comandos if podem ser aninhados indefinidamente dentro de outros comandos if, o que faz com que você complete a flexibilidade para a execução condicional de várias partes do seu programa.

else

Normalmente você vai querer executar uma instrução se uma certa condição for encontrada, e uma instrução diferente se a condição não for encontrada. Isto é o que o else faz. Else interpreta a saída de um comando if para executar uma instrução, caso a expressão no comando if seja avaliada como FALSE o else será executado.

Por exemplo, o código a seguir mostraria “a é maior que b” se $a for maior que $b, e a NÃO é maior que b caso contrário:

(21)

Profº Alexandre Eugênio da Silva Página 20 <?php

if ($a > $b) {

echo "a é maior que b"; } else {

echo "a NÃO é maior que b"; }

?> elseif

elseif, como seu nome sugere, é uma combinação de if e else. Da mesma forma que o else, ele estende um comando if para executar uma instrução diferente no caso de a expressão if original ser avaliada como FALSE. Porém, ao contrário de else, ele executará aquela expressão alternativa somente se a expressão condicional do elseif for avaliada como TRUE. Por exemplo, o código a seguir mostraria “a é maior que b”, “a é igual a b” ou “a é menor que b”:

<?php

if ($a > $b) {

echo "a é maior que b"; } elseif ($a == $b) { echo "a é igual a b"; } else {

echo "a é menor que b b"; }

?>

Podem haver vários elseifs dentro da mesma instrução if. A primeira expressão elseif (se houver) que for avaliada como TRUE será executada. No PHP, você também pode escrever 'else if' (em duas palavras) e o comportamento será idêntico a um 'elseif' (em uma só palavra).

O comando elseif só é executado se a expressão if precedente e quaisquer expressões elseif anteriores forem avaliadas como FALSE, e a expressão elseif atual for avaliada como TRUE.

while

Loops while são o tipo mais simples de criar um laços em PHP. Eles se comportam como seus compatíveis em C. O formato básico de um comando while é:

while (expressao) instrucoes

O significado de um comando while é simples. Ele pede que o PHP execute os comandos aninhados repetidamente, enquanto a expressão do while é avaliada como TRUE. O valor da expressão é verificado cada vez que se passa no começo do 'loop', desta forma, mesmo que este valor mude durante a execução do(s) comando(s) aninhado(s), a execução não parará até que o fim da iteração (cada vez que o PHP executa os comandos dentro do 'loop' é uma iteração). Às vezes, se a expressão while é avaliada como FALSE logo no início, o(s) comando(s) aninhado(s) não será(ão) rodado(s) nem uma vez sequer.

Como no comando if, você pode agrupar múltiplos comandos dentro do mesmo laço while englobando um grupo de instruções com chaves, ou usando a sintaxe alternativa:

while (expressao): instrucoes

...

(22)
(23)

Profº Alexandre Eugênio da Silva Página 22 Os exemplos a seguir são idênticos, e ambos imprimem números de 1 até 10:

<?php

/* exemplo 1 */ $i = 1;

while ($i <= 10) {

echo $i++; /* o valor impresso será $i depois do acréscimo (post-increment) */ } /* exemplo 2 */ $i = 1; while ($i <= 10): echo $i; $i++; endwhile; ?> do-while

Loops do-while são bem similares aos loops while, exceto pelo fato de que a condição é verificada no fim de cada iteração em vez de no começo. A diferença principal dos loops while regulares é que a primeira iteração de um loop do-while é garantidamente executada (a condição só é verificada no fim da iteração) enquanto que ele pode não rodar necessariamente em um loop while normal (a condição é verificada no começo de cada iteração, se ela é avaliada como FALSE logo no começo, a execução do loop terminaria imediatamente).

Há apenas uma sintaxe para loops do-while: <?php $i = 0; do { echo $i; } while ($i > 0); ?>

O loop acima rodaria exatamente uma vez, desde que depois da primeira iteração, quando a condição é verificada, ela é avaliada como FALSE ($i não é maior que zero 0) e a execução do loop termina.

for

Loops for são os laços mais complexos em PHP. Eles se comportam como os seus compatíveis em C. A sintaxe de um loop for é:

for (expr1; expr2; expr3) instrucoes

A primeira expressão (expr1) é avaliada (executada) uma vez incondicionalmente no começo do loop.

No começo de cada iteração, expr2 é avaliada. Se ela é avaliada como TRUE, o loop continua e o(s) comando(s) aninhado(s) é(são) executado(s). Se é avaliada como FALSE, a execução do 'loop' termina.

(24)

Profº Alexandre Eugênio da Silva Página 23 Cada uma das expressões pode ser vazia ou conter múltiplas expressões separadas por vírgulas. Em expr2, todas as expressões separadas por vírgula são avaliadas mas o resultado é obtido pela última parte. expr2 vazia significa que o loop pode rodar indefinidamente (PHP considera-a implicitamente como TRUE, como em C). Isto pode não ser tão inútil quanto você pode pensar, pois freqüentemente você pode querer terminar o 'loop' usando uma instrução break condicional em vez de usar a expressão-verdade do for.

Considere os seguintes exemplos. Todos eles mostram números de 1 até 10: <?php

/* exemplo 1 */

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

}

/* exemplo 2 */ for ($i = 1; ; $i++) { if ($i > 10) { break; } echo $i; } /* exemplo 3 */ $i = 1; for (; ; ) { if ($i > 10) { break; } echo $i; $i++; } /* exemplo 4 */

for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++); ?>

Obviamente, o primeiro exemplo parece ser o mais bonito (ou talvez o quarto), mas você pode perceber que a possível utilização de expressões vazias em laços for se torna prático em algumas ocasiões.

foreach

O PHP4 inclui um construtor foreach, muito parecido com o Perl e outras linguagens. Isto oferece uma maneira fácil de iterar sobre matrizes. foreach funciona somente com arrays, e lançará um erro se tentar utilizá-lo em uma variável de qualquer tipo diferente ou em variáveis não inicializadas. Há duas sintaxes:

foreach (expressao_array as $valor) instrucoes

foreach (expressao_array as $chave => $valor) instrucoes

A primeira forma varre uma dada matriz dada por expressao_array. Em cada 'loop', o valor do elemento corrente é atribuído a $valor e o ponteiro interno da matriz é avançado em uma posição (assim, no próxima iteração você estará olhando para o próximo elemento).

A segunda forma faz a mesma coisa, exceto pelo fato de que a chave do elemento atual será atribuído à variável $chave em cada iteração.

(25)

Profº Alexandre Eugênio da Silva Página 24 A partir do PHP 5, é possível iterar objetos também.

Nota: Quando o foreach inicia sua primeira execução, o ponteiro interno da matriz é zerado automaticamente para o primeiro elemento do array. Isto significa que você não precisa chamar reset() antes de um loop foreach .

A partir do PHP 5, você pode modificar facilmente os elementos da matriz precedendo $value com &. Isto irá definir uma referência ao invés de copiar o valor.

<?php

$arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; }

// $arr is now array(2, 4, 6, 8)

unset($value); // quebra a referência com o último elemento ?>

Nota: No foreach é possível utilizar o operador '@' para evitar mensagens de erro. Você pode ter notado que os seguintes itens são funcionalmente idênticos:

<?php

$arr = array("um", "dois", "três"); reset ($arr);

while (list(, $value) = each ($arr)) { echo "Valor: $value<br />\n"; }

foreach ($arr as $value) {

echo "Valor: $value<br />\n"; }

?>

Os seguintes também são funcionalmente idênticos: <?php

$arr = array("one", "two", "three"); reset($arr);

while (list($key, $value) = each ($arr)) { echo "Chave: $key; Valor: $value<br />\n"; }

foreach ($arr as $key => $value) {

echo "Chave: $key; Valor: $value<br />\n"; }

(26)

Profº Alexandre Eugênio da Silva Página 25 Mais alguns exemplos para demonstrar os usos:

<?php

/* exemplo foreach 1: somente valores */ $a = array(1, 2, 3, 17);

foreach ($a as $v) {

echo "Valor atual de \$a: $v.\n"; }

/* exemplo foreach 2: valores (com as chaves impressas para ilustração) */ $a = array(1, 2, 3, 17);

$i = 0; /* para exemplo somente */ foreach ($a as $v) {

echo "\$a[$i] => $v.\n"; $i++;

}

/* exemplo foreach 3: chaves e valores */ $a = array ( "um" => 1, "dois" => 2, "três" => 3, "dezessete" => 17 ); foreach ($a as $k => $v) { echo "\$a[$k] => $v.\n"; }

/* exemplo foreach 4: arrays multidimensionais */ $a = array(); $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } }

/* exemplo foreach 5: arrays expressos */ foreach (array(1, 2, 3, 4, 5) as $v) { echo "$v\n";

} ?> break

break cancela a execução do comando for, foreach, while, do-while ou switch atual.

break aceita um argumento numérico opcional que diz a ele quantas estruturas aninhadas englobadas devem ser quebradas.

(27)

Profº Alexandre Eugênio da Silva Página 26 <?php

$arr = array('um', 'dois', 'três', 'quatro', 'PARE', 'cinco'); while (list (, $val) = each ($arr)) {

if ($val == 'PARE') {

break; /* Você poderia colocar 'break 1;' aqui. */ }

echo "$val<br />\n"; }

/* Utilizando o argumento opcional. */ $i = 0;

while (++$i) { switch ($i) { case 5:

echo "No 5<br />\n";

break 1; /* Sai somente do switch. */ case 10:

echo "No 10; saindo<br />\n"; break 2; /* Sai do switch e while. */ default: break; } } ?> continue

continue é usado dentro de estruturas de loops para saltar o resto da iteração do loop atual e continuar a execução na avaliação e no início da próxima iteração.

Nota: Note que no PHP a instrução switch é considerada uma estrutura de loop quando relacionada ao comando continue.

continue aceita um argumento numérico opcional que diz a ele de quantos níveis de loops aninhados ele deve saltar até o fim.

$arr = array(0,1,2,3,4,5,6,7,8,9);

while (list ($key, $value) = each ($arr)) { if (!($key % 2)) { // pula itens pares continue; } echo $value; } echo "<br/>"; $i = 0; while ($i++ < 5) { echo "Fora<br />\n"; while (1) { echo "&nbsp;&nbsp;Meio<br />\n"; while (1) { echo "&nbsp;&nbsp;Dentro<br />\n"; continue 3; }

echo "Isto nunca será exibido.<br />\n"; }

echo "Nem isso.<br />\n"; }

(28)

Profº Alexandre Eugênio da Silva Página 27 Omitindo o ponto e vírgula depois do continue pode resultar em confusão. Este é um exemplo do que você NÃO deve fazer.

<?php

for ($i = 0; $i < 5; ++$i) { if ($i == 2)

continue print "$i\n"; }

?>

Um resultado esperado poderia ser: 0

1 3 4

mas esse script somente exibirá: 2

porque o valor de retorno da chamada a print() é int(1), e então ele se parecerá como o argumento numérico opcional mencionado acima.

switch

A instrução switch é similar a uma série de instruções IFs aninhados. Em muitas ocasiões, você poderá ter que comparar a mesma variável (ou expressão) com muitos valores diferentes, executando códigos diferentes dependendo com qual valor ele se encaixar. É exatamente para isso que a instrução switch faz.

Nota: Note que diferentemente de outras linguagens, a instrução continue se aplica a switch e age similarmente a um break. Se você tem um switch dentro de um loop e deseja continuar para a próxima iteração do loop, use continue 2.

Nota: Note que switch/case fazem comparações soltas.

Os exemplos seguintes mostram duas maneiras diferentes de escrever a mesma coisa, uma utilizando uma série de ifs e elseifs e a outra utlizando a instrução switch:

(29)

Profº Alexandre Eugênio da Silva Página 28 <?php

if ($i == 0) {

echo "i igual a 0"; } elseif ($i == 1) { echo "i igual a 1"; } elseif ($i == 2) { echo "i igual a 2"; }

switch ($i) { case 0:

echo "i igual a 0"; break;

case 1:

echo "i igual a 1"; break;

case 2:

echo "i igual a 2"; break;

} ?>

A estrutura switch permite uso de strings <?php

switch ($i) { case "apple": echo "i is apple"; break;

case "bar": echo "i is bar"; break;

case "cake": echo "i is cake"; break;

} ?>

É importante entender como a instrução switch funciona para evitar enganos. A instrução switch executa linha a linha (atualmente, instrução a instrução). No início, nenhum código é executado. Somente quando uma instrução case é encontrada com um valor que combina com a expressão do switch faz com que o PHP execute as instruções a partir daí. O PHP continua executando as instruções até o fim do bloco switch ou na primeira vez que encontrar uma instrução break. Se você não escrever uma instrução break no fim das instruções case, o PHP continuará executando os cases seguintes. Exemplo:

<?php

switch ($i) { case 0:

echo "i igual a 0"; case 1:

echo "i igual a 1"; case 2:

echo "i igual a 2"; }

(30)

Profº Alexandre Eugênio da Silva Página 29 Aqui, se $i é igual a zero, o PHP executará todas as instruções echo! Se $i é igual a 1, o PHP executará os últimas duas instruções echo, e somente se $i for igual a 2, você terá o comportamento 'esperado' apenas onde 'i igual a 2' será mostrado. Então é importante não se esquecer das instruções break (e as vezes não colocá-las para obter esse resultado em certas circunstâncias). Em uma instrução switch, a condição somente será avaliada e resultado comparado para cada instrução case. Em uma instrução elseif, a condição é avaliada novamente. Se sua condição é mais complicada que um simples comparação e/ou e dentro de um loop, um switch é mais rápido.

Um case pode não ter nenhuma instrução dentro, o que simplesmente passa o controle para o próximo case. <?php switch ($i) { case 0: case 1: case 2:

echo "i é menor que 3 mas não negativo"; break;

case 3:

echo "i é 3"; }

?>

Um case especial é o default. Esse case é executado quando nenhum outro case combina. Por exemplo:

<?php

switch ($i) { case 0:

echo "i igual a 0"; break;

case 1:

echo "i igual a 1"; break;

case 2:

echo "i igual a 2"; break;

default:

echo "i não é igual a 0, 1 ou 2"; }

?>

A expressão avaliada pelo case precisa ser um tipo simples, ou seja, inteiros, números de ponto flutuante e strings. Arrays ou objetos não podem ser utilizados a não ser que eles impliquem num tipo simples.

A sintaxe alternativa para estruturas de controle é suportada para os switches. Para maiores informações, veja Sintaxe alternativa para estruturas de controle.

(31)

Profº Alexandre Eugênio da Silva Página 30 <?php

switch ($i): case 0:

echo "i igual a 0"; break;

case 1:

echo "i igual a 1"; break;

case 2:

echo "i igual a 2"; break;

default:

echo "i não é igual a 0, 1 ou 2"; endswitch;

?>

return

Se chamada em uma função, a instrução return() termina imediatamente a execução da função atual e retorna seu argumento como o valor da função. return() também termina a execução de uma instrução eval() ou de um script.

Se chamada no escopo global, a execução do script atual será terminada. Se o arquivo do script atual foi incluído com include() ou require(), então a execução é devolvida para o arquivo chamador. Especificamente para arquivos de script incluídos com include(), o valor fornecido para return() será devolvido como o valor da chamada include(). Se return() for chamado do arquivo de script principal, então o programa pára. Se o arquivo de script atual é o configurado em auto_prepend_file ou auto_append_file do php.ini, então a execução desses scripts é finalizada.

Nota: Note que return() é um construtor de linguagem e não uma função, e parênteses em volta do argumento não é requerido. è comum deixa-los, e você atualmente deve faze-lo, já que o PHP tem menos trabalho para fazer neste caso.

Nota: Você jamais deve usar parênteses em torno da sua variável retornada ao retornar por referência, já que isto não irá funcionar. Você pode retornar apenas variáveis por referência, não o resultado de um comando. Se você usar return ($a); então você não esta retornando uma variável, mas o resultado da expressão ($a) (o qual é, claro, o valor de $a).

require

A instrução require() inclui e avalia um arquivo específico.

require() e include() são idênticos em todas as formas exceto pela manipulação de erros. Ambas produzem um Warning, mas require() resultará em um Fatal Error. Em outras palavras, não hesite em utilizar require() se na falta de um arquivo quiser parar o processamento da página. include() não se comporta da mesma maneira, e o script poderá continuar nessa situação. Em todo caso, vale a pena confirmar a configuração da diretiva include_path.

Exemplos simples de require()s <?php require 'prepend.php'; require $somefile; require ('somefile.txt'); ?> include

(32)

Profº Alexandre Eugênio da Silva Página 31 A instrução include() inclui e avalia o arquivo informado.

A documentação a seguir se aplica também a require(). Esses dois construtores são idênticos a exceção de como eles manipulam erros. Ambas produzem um Warning mas require() resultará em um Fatal Error. Em outras palavras, utilize require() se você deseja que um arquivo faltando interrompa o processamento da página. include() não se comporta da mesma maneira, permitindo que o script continue nessas situações. Em todo caso, vale a pena confirmar a configuração da diretiva include_path. Esteja avisado que um erro de interpretação no arquivo incluído não causa a parada do processamento em versões do PHP anteriores a PHP 4.3.5. A partir desta versão, causa. Arquivos a incluir são procurados primeiramente no include_path relativo ao diretório atual de trabalho, e então no diretório atual do script. Por exemplo, se seu include_path é libraries, o diretório atual é /www/, se você incluiu include/a.php e há um b.php nesse arquivo, b.php será procurado primeiro em /www/libraries/ e somente depois em /www/include/.0 Se o nome do arquivo começa com ./ ou ../, ele é procurado apenas no diretório atual.

Quando um arquivo é incluído, seu código entra no escopo de variável da linha onde a inclusão ocorre. Qualquer variável disponível da linha onde a chamada da inclusão ocorre estará disponível para o arquivo incluído, daquele ponto em diante. Entretanto, todas as funções e classes definidas no arquivo incluído tem um escopo global.

Exemplos de include()s simples variaveis.php <?php $cor = 'verde'; $fruta = 'maçã'; ?> teste.php <?php

echo "Uma $fruta $cor"; // Uma include 'vars.php';

echo "Uma $fruta $cor"; // Uma maçã verde ?>

Se o include ocorre dentro de uma função do arquivo principal, então todo o código incluído será executado como se ele tivesse sido definido dentro daquela função. Da mesma forma, ele seguirá o escopo de variáveis da função. Uma exceção para esta regra são as constantes mágicas que são avaliadas pelo parser antes dos includes ocorrerem.

Incluindo dentro de funções <?php

function foo() {

global $cor;

include 'variaveis.php'; echo "Uma $fruta $cor"; }

/* variaveis.php está no escopo de foo(), * .* então $fruta NÃO está disponível fora de * .* seu escopo. $cor estará porque ela foi * .* declarada como global */ foo(); // Uma maçã verde echo "A $fruta $cor"; // Uma maçã ?>

(33)

Profº Alexandre Eugênio da Silva Página 32 A instrução require_once() incluí e avalia o arquivo especificado durante a execução do script. Seu comportamento é similar ao da instrução require(), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação novamente. Veja a documentação de require() para maiores informações sobre como essa instrução funciona.

require_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo incluído mais de uma vez durante a execução de um script em particular, quando na verdade ele só pode ser incluído apenas uma, para evitar problemas com redefinições de funções, alterações nos valores de variáveis, etc.

include_once

A instrução include_once() inclui e avalia o arquivo especificado durante a execução de um script. Seu comportamento é similar a instrução include(), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação novamente. Como o nome sugere, ele será incluído apenas uma vez.

include_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo incluído mais de uma vez durante a execução de um script em particular, quando na verdade ele só pode ser incluído apenas uma para evitar problemas com redefinições de funções, alterações nos valores de variáveis, etc.

2. Arrays

Um array é uma variável cujo objetivo é armazenar um conjunto de valores. Arrays indexados numericamente

Quando não inicializamos um array usando o par associativo (chave e valor), implícitamente será adicionado um índice númerico a cada valor adicionado a array.

Arrays indexados não numericamente

Quando inicializamos um array usando o par associativo (chave e valor), essa chave explícitamente adicionada será o índice do array.

Operadores de array

Exemplo Nome Resultado

$a + $b União União de $a e $b.

$a == $b Igualdade TRUE se $a e $b tem os mesmos pares de chave/valor.

$a === $b Identidade TRUE se $a e $b tem os mesmos pares de chave/valor na mesma ordem e do mesmo tipo.

$a != $b Desigualdade TRUE se $a não é igual a $b. $a <> $b Desigualdade TRUE se $a não é igual a $b. $a !== $b Não identidade TRUE se $a não é identico a $b. Array multidimensionais

Os arrays não têm de ser uma lista simples de chaves e valores – cada localização no array pode armazenar outro array.

(34)

Profº Alexandre Eugênio da Silva Página 33 <pre>

<?php

$escopo = range(2, 10, 2);

$mult = array ("cores" => array ( "a" => "amarelo", "b" => "azul", "c" => "verde" ), "Pares 1 a 10" => $escopo,

"espaços" => array ("primeiro", 5 => "segundo", "terceiro" ) ); var_dump($mult); ?> </pre> <?php print $mult["espaços"][5]; ?> Resultado: array(3) { ["cores"]=> array(3) { ["a"]=> string(7) "amarelo" ["b"]=> string(4) "azul" ["c"]=> string(5) "verde" } ["Pares 1 a 10"]=> array(5) { [0]=> int(2) [1]=> int(4) [2]=> int(6) [3]=> int(8) [4]=> int(10) } ["espaços"]=> array(3) { [0]=> string(8) "primeiro" [5]=> string(7) "segundo" [6]=> string(8) "terceiro" } } segundo Classificação de arrays

(35)

Profº Alexandre Eugênio da Silva Página 34 sort — Ordena um array

Descrição

bool sort ( array &$array [, int $sort_flags ] )

Essa função ordena um array. Os elementos serão ordenados do menor para o maior ao final da execução dessa função.

Nota: Esta função define novas chaves para os elementos em array . Ela irá remover qualquer chave que você tenha definido, ao invés de simplesmente reordenar as chaves.

Retorna TRUE em caso de sucesso ou FALSE em falhas. Exemplo de sort()

<?php

$frutas = array("limao", "laranja", "banana", "melancia"); sort($frutas);

foreach ($fruits as $key => $val) {

echo "frutas[".$chave."] = ".$valor."\n"; }

?>

O exemplo acima irá imprimir: fruits[0] = banana

fruits[1] = laranja fruits[2] = limao fruits[3] = melancia

(36)

Profº Alexandre Eugênio da Silva Página 35 asort — Ordena um array mantendo a associação entre índices e valores

Descrição

bool asort ( array &$array [, int $sort_flags ] )

Essa função ordena um array de forma que a correlação entre índices e valores é mantida. É usada principalmente para ordenar arrays associativos onde a ordem dos elementos é um fator importante. Retorna TRUE em caso de sucesso ou FALSE em falhas.

Exemplo de asort() <?php

$frutas = array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia"); asort($frutas);

foreach( $frutas as $chave => $valor ){ echo "$chave = $valor\n";

} ?>

O exemplo acima irá imprimir: b = banana

a = laranja d = limao c = melancia

ksort — Ordena um array pelas chaves Descrição

int ksort ( array $array [, int $sort_flags ] )

Ordena um array pelas chaves, mantendo a correlação entre as chaves e os valores. Essa função é bastante útil principalmente para arrays associativos.

Exemplo de ksort() <?php

$frutas = array("d"=>"limao", "a"=>"laranja", "b" =>"banana", "c"=>"maçã"); ksort($frutas);

reset($frutas);

while (list($chave, $valor) = each($frutas)) { echo "$chave = $valor\n";

} ?>

O programa acima mostraria: a = laranja

b = banana c = maçã d = limao

(37)

Profº Alexandre Eugênio da Silva Página 36 usort — Ordena um array pelos valores utilizando uma função de comparação definida pelo usuário Descrição

bool usort ( array &$array , string $cmp_function )

Essa função irá ordenar um array pelos valores usando uma função de classificação definida pelo usuário. Se o array precisar ser ordenado utilizando um critério não trivial, você deve usar essa função.

A função de comparação deve retornar um inteiro menor, igual ou maior que zero se o primeiro argumento for considerado respectivamente menor, igual, ou maior que o segundo.

Nota: Se dois elementos são considerados iguais, a ordem deles fica indefinida no array resultante. Até o PHP 4.0.6 as funções definidas pelo usuário manteriam a ordem original desses elementos, mas com o novo algoritmo de ordenação introduzido no 4.1.0 esse não é o caso, pois não existe solução para fazer isso de modo eficiente.

Nota: Esta função define novas chaves para os elementos em array . Ela irá remover qualquer chave que você tenha definido, ao invés de simplesmente reordenar as chaves.

Retorna TRUE em caso de sucesso ou FALSE em falhas. Exemplo de usort() <?php function cmp($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; } $a = array(3, 2, 5, 6, 1); usort($a, "cmp");

foreach ($a as $key => $value) { echo "$chave: $valor\n"; }

?>

O exemplo acima irá imprimir: 0: 1 1: 2 2: 3 3: 5 4: 6 Funções de arrays

shuffle — Mistura os elementos de um array Descrição

(38)

Profº Alexandre Eugênio da Silva Página 37 Essa função mistura de forma aleatória os elementos de um array.

Nota: Esta função define novas chaves para os elementos em array . Ela irá remover qualquer chave que você tenha definido, ao invés de simplesmente reordenar as chaves.

Exemplo de shuffle() <?php

$numbers = range(1,20);

srand((float)microtime()*1000000); shuffle($numbers);

foreach ($numbers as $number) { echo "$number ";

} ?>

count — Conta o número de elementos de uma variável, ou propriedades de um objeto Descrição

int count ( mixed $var [, int $mode ] )

Retorna o número de elementos de var , que normalmente é um array (uma vez que qualquer outra coisa terá apenas um elemento).

Para objetos, se você tem SPL instalada, você pode fazer um gancho na count() implementando a interface Countable. A interface tem exatamente um método, count(), que retorna o valor retornado para função count().

Se var não for um array ou um objeto, com a interface Countable implementada, 1 será retornado. Há uma exceção, se var é NULL, 0 é retornado.

Nota: O parâmetro opcional mode esta disponível apartir do PHP 4.2.0.

Se o parâmetro opcional mode for COUNT_RECURSIVE (ou 1), a função count() irá recursivamente contar a matriz. Isto é particularmente util para contar elementos em matriz multidimensional. O valor padrão para mode é 0. count() não detecta infinita recursão.

Cuidado

count() pode retornar 0 para uma variável que não existe, mas também pode retornar 0 para uma variável que tenha sido inicializada como um array vazio. Use isset() para checar se a variável existe.

Por favor, veja a sessão Array do manual para uma explicação mais detalhada sobre como os arrays são implementados e utilizados no PHP.

(39)

Profº Alexandre Eugênio da Silva Página 38 Exemplo de count() <?php $a[0] = 1; $a[1] = 3; $a[2] = 5; $result = count($a); // $result == 3 $b[0] = 7; $b[5] = 9; $b[10] = 11; $result = count($b); // $result == 3 $result = count(null); // $result == 0 $result = count(false); // $result == 1 ?> 3. Manipulação de strings Formatando strings

trim — Retira espaço no ínicio e final de uma string Descrição

string trim ( string $str [, string $charlist] )

Esta função retorna uma string com os espaçoes retirados do ínicio e do final de str. Sem o segundo parâmetro, trim() irá retirar estes caracteres

" " (ASCII 32 (0x20)), um espaço normal. "\t" (ASCII 9 (0x09)), uma tabulação.

"\n" (ASCII 10 (0x0A)), uma linha nova (line feed). "\r" (ASCII 13 (0x0D)), um retono de carro.

"\0" (ASCII 0 (0x00)), o byte NULL.

"\x0B" (ASCII 11 (0x0B)), uma tabulação vertical.

Você também pode especificar quais caracteres você quer retirar, através do parâmetro charlist. Simplesmente liste todos os caracteres que você quer retirar. Com .. você pode especificar um intervalo de caracteres.

Exemplo de uso de trim() <?php

$text = "\t\tThese are a few words :) ... "; $trimmed = trim($text);

// $trimmed = "These are a few words :) ..." $trimmed = trim($text," \t.");

// $trimmed = "These are a few words :)" $clean = trim($binary,"\0x00..\0x1F");

// trim the ASCII control characters at the beginning and end of $binary // (from 0 to 31 inclusive)

?>

(40)

Profº Alexandre Eugênio da Silva Página 39 rtrim — Retira espaço em branco do fim da string

nl2br — Insere quebras de linha HTML antes de todas novas linhas em uma string Descrição

string nl2br ( string $string )

Retorna string com '<br />' inserido antes de todas as novas linhas. Parâmetros

string

A string de entrada.

Valor Retornado

Retorna a string alterada. Exemplo

<?php

echo nl2br("foo isn't\n bar"); ?>

O exemplo acima irá imprimir: foo isn't<br />

bar

Unindo e dividindo strings

implode ou join — Junta elementos de uma matriz em uma string Descrição

string implode ( string $glue, array $pieces )

Retorna uma string contendo os elementos da matriz na mesma ordem com uma ligação entre cada elemento.

Exemplo <?php

$array = array('lastname', 'email', 'phone'); $comma_separated = implode(",", $array);

print $comma_separated; // lastname,email,phone ?>

explode — Divide uma string em strings Valor Retornado

array explode ( string $delimiter, string $string [, int $limit] )

Retorna uma matriz de strings, cada uma como substring de string formada pela divisão dela a partir do delimiter.

(41)

Profº Alexandre Eugênio da Silva Página 40 delimiter O delimitador. string A string de entrada. limit

Se limit é definido, o array retornado irá conter o máximo de elementos igual a limit com o último elemento contendo o resto da string.

Se o parâmetro limit é negativo, todos componentes são retornados exceto os (x) últimos. Valor Retornado

Se delimiter é uma string vazia (""), explode() irá retornar FALSE. Se delimiter contém um valor que não contém em string, então explode() irá retornar um array contendo string.

Exemplos

<?php

$pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza);

echo $pieces[0]; // piece1 echo $pieces[1]; // piece2 // Example 2

$data = "foo:*:1023:1000::/home/foo:/bin/sh";

list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); echo $user; // foo

echo $pass; // * ?>

Exemplos de parâmetro limit <?php $str = 'one|two|three|four'; // positive limit print_r(explode('|', $str, 2)); // negative limit print_r(explode('|', $str, -1)); ?>

O exemplo acima irá imprimir:

Array ( [0] => one [1] => two|three|four ) Array ( [0] => one [1] => two [2] => three )

Referências

Documentos relacionados

atuou como orientador do trabalho “Ladrilhos asfálticos reciclados: contribuição para o estudo de viabilidade técnica”, no Seminário de Discentes dos Programas

Realça-se a sistematização de dossiers/projetos estruturantes realizados, que contribui para a melhoria contínua do setor, consolidando ganhos, possibilitando uma projeção de

Dentro desta disputa destacam-se os signatários do pedido inicial e os “excluídos”, notadamente, o CEFLURIS, os neoayahuasqueiros e alguns indígenas ligados à

Nos peixes da família Parodontidae, Moreira-Filho, Bertollo e Galetti Junior (1993) analisaram vinte e seis exemplares de Parodon hilarii, coletados em pequenos tributários do rio

José Deocleciano de Siqueira Silva Júnior Prof.. Valdir

Rod. As propostas deverão obedecer às especificações deste instrumento convocatório e seus Anexos e serão encaminhadas por meio eletrônico, após o registro dos interessados

Com relação aos objetivos secundários desta dissertação, teve a caracterização a percepção e fronteira no contexto geopolítico da cidade, identificar as

Figura 4.31 – Perfis de resistência à compressão uniaxial obtidos com as Equações 4.25 e 4.26 e resultados dos ensaios de compressão em laboratório para o poço