Programação para Internet II 2.3. PHP Tipos de dados e operadores Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt
Tipos de dados Embora não seja necessário declarar os tipos de dados das variáveis, estas estão associadas a um determinado tipo. Existem em PHP os seguintes tipos: Strings ola, o, bom dia como estás Integers Números inteiros de -2147483647 a 2147483647 Floats Números que possuam parte decimal: 2.58, 5.956546865 Booleans true ou false Arrays Objects Resources - Imagens, resultado de uma query de SQL, etc. (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 2
Tipos de dados (cont.) Uma mesma variável pode assumir diferentes tipos, consoante o tipo dos dados que lhe estão associados $var = "teste"; print $var; $var = 2; print ($var+2); (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 3
Tipos de dados (cont.) As Strings em PHP têm a característica especial de se poder aceder directamente a um determinado caracter da String. (a posição inicial é 0.) $mystr = "ola?"; $mystr{0} = "O"; // ou $mystr[0] = "O"; print $mystr; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 4
Tipos de dados (cont.) Conversão automática de tipo Como já foi referido, as variáveis em PHP não estão sempre associadas a um tipo de dados único. Deste modo, o PHP tentará converter o tipo das variáveis sempre que necessário e possível... Por vezes ocorrem erros, como por exemplo, converter de Array para String dentro de um print... Embora o PHP trate de fazer as devidas conversões de tipos, é possível fazer conversões explicitas de tipo de dados $str = "bomdia"; $int = (integer) $str; Outras opções de conversão: (bool), (string), (float) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 5
Tipos de dados (cont.) Scope das variáveis Cada variável em PHP é valida numa determinada área. É possível ter variáveis diferentes com o mesmo nome, desde que em áreas disjuntas Todas as variáveis que não são colocadas dentro de uma função ou objecto, são consideradas globais Superglobals Existem determinadas variáveis que estão disponíveis em qualquer ponto dos nosso scripts Estas variáveis são Arrays que contêm determinados conjuntos especiais de informação (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 6
Tipos de dados (cont.) Superglobals (cont.) $GLOBALS Contém informação sobre todas as variáveis globais em uso no nosso script $_GET Contém informação sobre todas as variáveis enviadas por GET $_POST Contém informação sobre todas as variáveis enviadas por POST $_FILES Contém informação sobre todas as variáveis enviadas por POST relacionadas com upload de ficheiros $_COOKIE Contém informação sobre todas as variáveis com o comportamento de Cookies (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 7
Tipos de dados (cont.) Superglobals (cont.) $_REQUEST Contém a mesma informação que $_GET, $_POST e $_COOKIES todas juntas $_SESSION Contém informação sobre todas as variáveis armazenadas na sessão do utilizador $_SERVER Contém informação sobre algumas variáveis do servidor $_ENV Contém informação sobre as variáveis de ambiente (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 8
Tipos de dados (cont.) Superglobals (cont.) Alguns exemplos das variáveis de servidor HTTP_REFERER HTTP_USER_AGENT REQUEST_METHOD QUERY_STRING Estas variáveis podem ser acedidas da seguinte forma: print($_server["http_referer"]); Importa referir que as variáveis disponíveis variam em função do browser usado pelo utilizador e do software de servidor em que o PHP está a correr (Apache!= IIS) Em http://koivi.com/apache-iis-php-server-array.php pode consultar a lista completa de variáveis. (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 9
Referências Quando se usa o operador = em PHP é criada uma cópia do valor a ser atribuído à variável... $a = 1; $b = $a; Caso queiramos copiar a referência para o valor em vez do valor em si, deve ser usado o operador =& $a = 1; $b = &$a; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 10
Em determinadas situações, podemos ter a necessidade de verificar se determinada variável tem algum valor atribuído, para tal, recorre-se à função isset() $var; if (!isset($var)) { echo "Var não tem valor\n"; } (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 11
Por vezes é necessário verificar se determinada variável possui algum valor atribuído, para além de alguns valores por defeito (,0, 0,NULL,FALSE, arrays vazios, variáveis criadas mas sem valor atribuído). Nestas situações pode recorrer-se à função empty(). $var=""; if (empty($var)) { echo "Var não tem valor\n"; } (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 12
A função empty poderá ser muito útil, por exemplo para verificar se foi ou não escrito algo num campo de formulário, por exemplo. Tenha atenção que apesar da semelhança, a função isset não permite fazer o mesmo que a função empty e vice-versa. (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 13
Constantes Para definir uma constante recorre-se à função define() Para aceder ao valor de uma constante, basta referenciar o nome da constante Contrariamente do que acontece com as variáveis, o nome das constantes não começam por $ define("current_time", time()); print CURRENT_TIME; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 14
Constantes (cont.) Para saber se já foi atribuído um valor a uma constante, recorre-se ao método defined() if (defined("current_time")) { /// código a ser executado } (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 15
Operadores Os operadores permitem alterar o valor de um determinado input + soma - subtracção / divisão * multiplicação. concatenação de Strings! negação ++,-- incremento, decremento = atribuição && E lógico OU lógico (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 16
Operadores (cont.) Por vezes queremos que uma variável fique com o valor da aplicação de um operador sobre essa variável += o mesmo que : $var = $var + x; $var += x; -= o mesmo que : $var = $var x; $var -= x; *= o mesmo que : $var = $var * x; $var *= x; /= o mesmo que : $var = $var / x; $var /= x;.= o mesmo que : $var = $var. "uma string"; $var.= " "; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 17
Operadores (cont.) Para fazer comparações, podemos recorrer aos operadores: == igual > maior >= maior ou igual < menor <= menor ou igual!= diferente === idêntico (para além de ser igual, tem que ser do mesmo tipo)!== não idêntico (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 18
Operadores (cont.) O operador ternário $fase = ($idade < 16)? "criança" : "adulto";...é o mesmo que: if ($idade < 16) { $fase = "criança"; } else { $fase = "adulto"; } (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 19