Programação para Internet II 2.3. PHP – Tipos de dados e operadores Nuno Miguel Gil Fonseca [email protected] PHP – Hypertext Preprocessor 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 PHP – Hypertext Preprocessor Tipos de dados (cont.) Uma mesma variável pode assumir diferentes tipos, consoante o tipo dos dados que lhe estão associados <?php $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 PHP – Hypertext Preprocessor 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.) <?php $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 PHP – Hypertext Preprocessor 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 <?php 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 PHP – Hypertext Preprocessor 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 PHP – Hypertext Preprocessor 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 PHP – Hypertext Preprocessor 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 PHP – Hypertext Preprocessor 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: <?php 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 PHP – Hypertext Preprocessor Referências Quando se usa o operador “=” em PHP é criada uma cópia do valor a ser atribuído à variável... <?php $a = 1; $b = $a; ?> Caso queiramos copiar a referência para o valor em vez do valor em si, deve ser usado o operador “=&” <?php $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 PHP – Hypertext Preprocessor 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() <?php $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 PHP – Hypertext Preprocessor 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(). <?php $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 PHP – Hypertext Preprocessor 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 PHP – Hypertext Preprocessor 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 “$” <?php 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 PHP – Hypertext Preprocessor Constantes (cont.) Para saber se já foi atribuído um valor a uma constante, recorre-se ao método defined() <?php 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 PHP – Hypertext Preprocessor 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 PHP – Hypertext Preprocessor 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 -= o mesmo que : $var *= o mesmo que : $var /= o mesmo que : $var .= o mesmo que : $var .= "…"; = = = = = $var $var $var $var $var + – * / . x; x; x; x; "uma $var += x; $var -= x; $var *= x; $var /= x; 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 PHP – Hypertext Preprocessor 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 PHP – Hypertext Preprocessor Operadores (cont.) O operador ternário <?php $fase = ($idade < 16) ? "criança" : "adulto"; ?> ...é o mesmo que: <?php 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