2.4. PHP – Funções - elearning@estgoh

Propaganda
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
Download