Programação para Internet II 2.4. PHP – Funções Nuno Miguel Gil Fonseca [email protected] PHP – Hypertext Preprocessor Funções O recurso ao uso de funções permite obter código mais simples, mais legível e mais simples de codificar No PHP 5 estão disponível mais de 2500 funções Para manipular data/tempo, funções matemáticas, Strings, etc. Os programadores podem no entanto escrever as suas próprias funções <?php function a_minha_funcao_1($arg1){ $arg1++; return $arg1; } ?> Uma função é “chamada” da seguinte forma: <?php a_minha_funcao_1(1); ?> (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 Funções (cont.) Uma função recebe geralmente parâmetros. Este parâmetros podem ser o resultado da execução de uma outra função <?php a_minha_funcao_1(a_minha_funcao_2()); ?> Os parâmetros, são os valores que são passados entre “(“ e “)”. Estes valores podem ser passados “por cópia” ou “por referência”. <?php func_1($param); // parâmetros por cópia func_2(&$param); //parâmetros por referência ?> (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 Funções (cont.) Em PHP a uma função podem ser atribuídos valores por omissão. <?php function a_minha_funcao_2($x=1,$y=2){ print("$x $y"); } ?> <?php a_minha_funcao_2(); a_minha_funcao_2(3,5); ?> 1 2 3 5 Caso não sejam passados valores para os parâmetros aquando da chamada da função, são assumidos os valores por omissão. (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 Funções (cont.) O protótipo de uma função Permite ter uma ideia sobre os parâmetros que uma função recebe, assim como sobre o valor que a função retorna tipo_retorno nome_função (tipo_param_1 nome_param_1 [, tipo_param_2 nome_param_2]) Deve especificar o tipo dos dados a retornar (void caso não retorne nada) Seguido do nome da função (em nomes com varias palavras, usa-se geralmente o símbolo “_”, para as separar). Entre parênteses especifica-se a lista dos parâmetros a receber (que poderá não ser nenhum) Parâmetros opcionais, especificam-se entre parênteses rectos Quando os parâmetros a receber possam ser diversos tipos, usa-se o tipo especial “mixed”. bool isset ( mixed var [, mixed var [, mixed ...]]) (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 Funções (cont.) Algumas funções… bool isset ( mixed var [, mixed var [, mixed ...]]) Permite verificar se determinada variável (ou conjunto de variáveis) possuem algum valor associado void unset ( mixed var [, mixed var [, mixed ...]]) Permite desassociar os valores associados à variável (ou conjunto de variáveis) especificadas. <? $var = 1; if(isset($var)){ print($var); unset($var); } ?> (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 Funções (cont.) Algumas funções… (cont.) void exit ([mixed status]) Permite terminar a execução de um determinado script/função mixed eval ([string code_string]) Executa a string passada por parâmetro, como se de código PHP “normal” se tratasse <?php $str = "exit()"; eval($str); ?> (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 Funções (cont.) Algumas funções… (cont.) void die ( [mixed status]) Geralmente surge associada à execução de outra função. E permite especificar o que queremos que seja apresentado ao utilizador caso surjam problemas na execução de uma determinada função <?php $fp = fopen("xpto.txt", "r") || die("Ocorreu um erro!"); ?> (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 Funções (cont.) Funções de manipulação de tempo/data Em PHP o tempo é representado como o tempo que passou em relação à data “January 1st 1970 00:00:00 GMT” Obter a data/hora actual <?php print (time()); ?> Converter de String para data <?php $aminhadata = strtotime("1979/12/22"); $aminhadata1 = strtotime("22nd December 1979"); ?> (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 Funções (cont.) Funções de manipulação de tempo/data Converter de data para String É possível efectuar diversas formatação sobre uma determinada data: <?php print(date("H:i")); ?> 17:00 <?php $data = strtotime("2007/03/26"); print(date("l",$data)); ?> Segunda-feira Existe um grande número de formatações que podem ser aplicadas. A lista completa pode ser encontrada em: (http://pt.php.net/manual/pt_BR/function.date.php) (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 Funções (cont.) Funções de manipulação de tempo/data Construção de um “objecto” data a partir de diferentes componentes int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]]) <?php $unixtime = mktime(22, 30, 0, 6, 20, 2005, -1); ?> is_dst – indica se é horário de Verão (1), Inverno (0) ou desconhecido (-1). (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 Funções (cont.) Funções de manipulação de tempo/data Obter todas as componentes da data em separado <?php $today = getdate(); print_r($today); ?> Array ( [seconds] [minutes] [hours] [mday] [wday] [mon] [year] [yday] [weekday] [month] [0] ) => => => => => => => => => => => 40 58 21 17 2 6 2003 167 Tuesday June 1055901520 (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 Funções (cont.) Funções de manipulação de tempo/data Obter todas as componentes da data em separado <?php $today = getdate(); print($today["weekday"]); ?> Thursday (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 Funções (cont.) Funções matemáticas Arredondamentos simples float ceil (float value) Arredondamentos com precisão float round (float value [, int precision]) Truncagem float floor (float value) Geração de números aleatórios int rand ([int min, int max]) (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 Funções (cont.) Funções matemáticas (cont.) Devolver valores absolutos number abs (number value) Raízes quadradas float sqrt (float value) Potências number pow (number base, number exponent) (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 Funções (cont.) Funções matemáticas (cont.) Funções de conversão numérica int bindec (string string decbin (int string dechex (int string decoct (int int hexdec (string int octdec (string binary_string) number) number) number) hex_string) octal_string) (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 Funções (cont.) Funções matemáticas (cont.) Constantes matemáticas M_PI print (M_PI * (2 * 2)); Área de um circulo de raio 2 (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 Funções (cont.) Funções de manipulação de strings Obter parte de uma string string substr (string source, int start [, int length]) <?php $string = "abcdefghijklmnopqrstuvwxyz"; $d = substr($string, 5); $e = substr($string, 5, 4); ?> A primeira posição é 0!! (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 Funções (cont.) Funções de manipulação de strings (cont.) Substituição de parte de uma string mixed str_replace ( mixed search, mixed replace, mixed source [, int &count]) mixed str_ireplace ( mixed search, mixed replace, mixed source [, int &count]) <?php $string = "O benfica vai ser campeão!"; $newstring = str_replace("benfica", "sporting", $string); print($newstring); ?> O sporting vai ser campeão! (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 19 PHP – Hypertext Preprocessor Funções (cont.) Funções de manipulação de strings (cont.) Trabalhar com a tabela ASCII string chr ( int ascii) int ord ( string string) <?php print(ord("a")); print(chr(109)); ?> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 20 PHP – Hypertext Preprocessor Funções (cont.) Funções de manipulação de strings (cont.) Obter o tamanho de uma string int strlen (string source) <?php print(strlen("abc")); ?> 3 (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 21 PHP – Hypertext Preprocessor Funções (cont.) Funções de manipulação de strings (cont.) Separar uma string segundo um determinado separador. array explode ( string $delimiter, string $string [, int $limit] ) <?php $arr = explode(",", "1,2,3"); ?> [1,2,3] O resultado é um array, em que cada posição é um dos elementos separados (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 22 PHP – Hypertext Preprocessor Funções (cont.) Funções e scope das variáveis Em PHP, variáveis referenciadas dentro de uma função que não sejam passadas por parâmetro, assumem sempre scope local Exemplo: <?php $a = 1; function test() { echo $a; } Não imprimirá nada!!! test(); ?> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 23 PHP – Hypertext Preprocessor Funções (cont.) Funções e scope das variáveis Soluções <?php $a = 1; function test($a) { echo $a; } test($a); ?> Passar a variável por parâmetro <?php define (A,1); function test() { echo A; } test(); ?> Usar constantes (nem sempre possível!) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 24 PHP – Hypertext Preprocessor Funções (cont.) Funções e scope das variáveis Soluções <?php $a = 2; function test() { global $a; echo $a; } test(); ?> Recorrer à keyword global <?php $a = 2; function test() { print($GLOBALS['a']); } test(); ?> Recorrer à variável $GLOBALS (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 25 PHP – Hypertext Preprocessor Funções (cont.) Funções e scope das variáveis Qual será o resultado disto? <?php $a = 2; function test() { $a = 4; print($GLOBALS['a']); print("<br />"); print($a); } test(); ?> 2 4 (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 26 ç fun ão fatorial(n) { se (n <= 1) retorne 1; senão retorne n * fatorial(n-1); } PHP – Hypertext Preprocessor Funções (cont.) Recursividade Funções que se chamam a si próprias <?php function factorial(n) { if (n <= 1) return 1; else return n * factorial(n-1); } ?> Importante: tem que existir sempre pelo menos uma condição de paragem No exemplo: n<=1 (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 27