Escolar Documentos
Profissional Documentos
Cultura Documentos
Funes
Uma funo (ou subrotina, procedimento...) um pedao de cdigo reutilizvel. A funo definida apenas uma vez, e pode ser utilizada um nmero indefinido de vezes. Em PHP, no necessrio fazer declarao de funes. Uma funo definida com o uso da palavra function.
http://marx.vanderlinden.com.br/ 2
Exemplo
Definio:
function exibeMensagem(){ echo "Ol!"; }
Uso:
exibeMensagem();
http://marx.vanderlinden.com.br/
Argumentos
Uma funo pode receber argumentos (parmetros). Na definio da funo especifica-se um nome de varivel que ser associado a cada argumento, na ordem especificada.
http://marx.vanderlinden.com.br/
Exemplo
function exibeMensagem($nome, $cor){ echo "Ol, <span style=\"color: $cor\">$nome</span>!"; } exibeMensagem('Fulano de Tal', 'blue');
Sada:
Escopo de Variveis
As variveis definidas como parmetros tm escopo local, isto , s so vlidas dentro da funo, e no colidem com variveis definidas externamente. Por padro, uma funo no tem acesso a variveis definidas fora de seu escopo.
http://marx.vanderlinden.com.br/
Escopo de Variveis
$nome = 'Beltrano Segundo'; echo "Saudaes, $nome!<br>\n"; function exibeMensagem($nome){ echo "Ol $nome!<br>\n"; } exibeMensagem('Fulano de Tal'); echo "Saudaes, $nome!<br>\n";
http://marx.vanderlinden.com.br/
Escopo de Variveis
http://marx.vanderlinden.com.br/
Escopo de Variveis
$nome = 'Beltrano Segundo'; $mensagem = 'Boa tarde!'; function exibeMensagem($nome){ echo "Ol $nome!<br>\n"; echo "$mensagem<br>\n"; } exibeMensagem('Fulano de Tal');
http://marx.vanderlinden.com.br/
Escopo de Variveis
Sada:
http://marx.vanderlinden.com.br/
10
Escopo de Variveis
Para usar uma varivel externa dentro de uma funo, deve-se declar-la como global.
$nome = 'Beltrano Segundo'; $mensagem = 'Boa tarde!'; function exibeMensagem($nome){ global $mensagem; echo "Ol $nome!<br>\n"; echo "$mensagem<br>\n"; } exibeMensagem('Fulano de Tal'); http://marx.vanderlinden.com.br/
11
Escopo de Variveis
Sada:
http://marx.vanderlinden.com.br/
12
Quando um valor passado como um parmetro para uma funo, o interpretador PHP cria uma cpia desse valor no escopo interno da funo A modificao desse valor dentro da funo no interfere no valor original
http://marx.vanderlinden.com.br/
13
http://marx.vanderlinden.com.br/
14
http://marx.vanderlinden.com.br/
15
possvel especificar que um ou mais argumentos de uma funo devem ser passados por referncia. Quando o argumento passado por referncia, PHP no cria uma cpia da varivel; ambos os nomes passam a se referir ao mesmo valor na memria. Para especificar um argumento por referncia, basta prefix-lo por &
http://marx.vanderlinden.com.br/ 16
Retornando um valor
Uma funo pode retornar um valor expresso que a chamou. Para retornar um valor dentro da funo, basta usar a estrutura return. Ao se atingir a instruo return, a funo finaliza a execuo e retorna o valor ao programa principal. No necessrio fazer qualquer alterao no cabealho da funo, ou fazer qualquer especificao de tipo de dados. http://marx.vanderlinden.com.br/
18
Retornando um valor
function media3($a, $b, $c){ return ($a + $b +$c) / 3; } $x = media3(480,720,1080); echo "A mdia $x<br>\n"; A mdia 760<br>
http://marx.vanderlinden.com.br/
19
20
Sada:
12 menor que 100<br> 345 est entre 100 e 1000<br> 6789 maior que 1000<br>
http://marx.vanderlinden.com.br/
21
A instruo return s retorna um valor. Para escrever uma funo que retorne dois ou mais valores, h dois mtodos: 1) Utilizar referncias 2) Retornar um array
http://marx.vanderlinden.com.br/
22
Retornando um array
function dados3($a, $b, $c){ $valor['somatorio'] = $a + $b + $c; $valor['media'] = $valor['somatorio'] / 3; $valor['modulo'] = sqrt($a*$a + $b*$b + $c*$c); return $valor; } $res echo echo echo = dados3(480, 720, 1080); "Mdulo: $res[modulo]<br>\n"; "Mdia: $res[media]<br>\n"; "Somatrio: http://marx.vanderlinden.com.br/ $res[somatorio]<br>\n";
23
Retornando um array
Sada:
http://marx.vanderlinden.com.br/
24
Funes que retornam valores booleanos podem ser facilmente incorporadas a expresses e instrues de controle de fluxo (if, while, for ...)
http://marx.vanderlinden.com.br/ 26
Sada:
http://marx.vanderlinden.com.br/
28
Recursividade
Uma funo pode chamar a si mesma. Esta caracterstica chamada recursividade e a maneira mais prtica de se solucionarem vrios problemas.
http://marx.vanderlinden.com.br/
29
Recursividade
function fatorial($n){ if ($n == 0 or $n== 1) return 1; else return $n * fatorial($n-1); } echo fatorial(5); 120
http://marx.vanderlinden.com.br/ 30
PHP permite que uma funo seja declarada dentro de outra funo. Todas as funes tm escopo global, mas funes internas s passam a existir quando a funo externa chamada.
http://marx.vanderlinden.com.br/
31
Sada:
http://marx.vanderlinden.com.br/
33
Argumentos Opcionais
http://marx.vanderlinden.com.br/
34
Argumentos Opcionais
function exibeMensagem($nome, $cor='black') { echo "Ol, <span style=\"color: $cor\">$nome</span>!"; } exibeMensagem('Fulano de Tal');
Sada:
Argumentos Opcionais
function exibeMensagem($nome, $sobrenome, $cor='black', $nvisitas=0) { echo "Ol, <span style=\"color: $cor\">$nome $sobrenome</span>!<br>\n"; echo "Essa sua visita n. $nvisitas"; } exibeMensagem('Fulano', 'de Tal', 'red'); Ol, <span style="color:red">Fulano de Tal</span>!<br> Essa sua visita n. 0
http://marx.vanderlinden.com.br/
36
http://marx.vanderlinden.com.br/
37
Utiliza-se:
func_num_args() Obtm o nmero de argumentos func_get_arg($n) Obtm um argumento especfico func_get_args() Obtm um array contendo todos os argumentos
http://marx.vanderlinden.com.br/
38
func_num_args()
function nvar(){ echo "Essa funo tem ", func_num_args(), " argumentos.<br>\n"; } nvar(); nvar(480,720,1080); nvar('a', 'b', 'c', 'd'); Essa funo tem 0 argumentos.<br> Essa funo tem 3 argumentos.<br> Essa funo tem 4 argumentos.<br>
http://marx.vanderlinden.com.br/ 39
func_get_arg($n)
function nvar(){ $numargs = func_num_args(); echo "<h4>Essa funo tem $numargs argumentos.</h4>\n"; if($numargs >= 3) echo "Terceiro: ", func_get_arg(2), "<br>\n"; if($numargs >= 4) echo "Quarto: ", func_get_arg(3), "<br>\n"; } nvar(); nvar(480,720,1080); http://marx.vanderlinden.com.br/ nvar('a', 'b', 'c', 'd');
40
func_get_arg($n) - Sada
http://marx.vanderlinden.com.br/
41
func_get_args()
function media(){ $total = 0; foreach( func_get_args() as $arg ){ $total += $arg; } return $total / func_num_args(); } echo media(320, 480, 720, 1080); 650
http://marx.vanderlinden.com.br/ 42
Funes variveis
possvel armazenar o nome de uma funo em uma varivel, e usar essa varivel para chamar a funo correspondente. Conceito semelhante aos ponteiros para funes de C.
http://marx.vanderlinden.com.br/
43
Funes variveis
function mensagem() { echo "Ol!<br>\n"; } function saudacao(){ echo "Bom dia!<br>\n"; } $acao = 'mensagem'; $acao(); $acao = 'saudacao'; $acao(); Ol!<br> Bom dia!<br>
http://marx.vanderlinden.com.br/
44
Funes variveis
function soma2($a, $b) { return $a + b; } function multi2($a, $b) { return $a * $b; } function exp2($a, $b){ return pow($a, $b);} function operacao($tipo, $a, $b){ switch($tipo){ case 'soma': return soma2($a,$b); case 'multi': return multi2($a,$b); case 'exp': return exp2($a,$b); } } http://marx.vanderlinden.com.br/
45
Funes variveis
function soma2($a, $b) { return $a + b; } function multi2($a, $b) { return $a * $b; } function exp2($a, $b){ return pow($a, $b);} function operacao($tipo, $a, $b){ $func = $tipo . 2; return $func($a,$b); } echo operacao('multi', 3, 4); 12
http://marx.vanderlinden.com.br/ 46
Incluindo arquivos
Em qualquer projeto no-trivial, comum que se tenha um grande conjunto de funes que vai ser utilizado em diferentes lugares do cdigo. Nesses casos, recomendvel agrupar as funes em arquivos especificos e incluir esses arquivos em todas as pginas do site em que se faam necessrio.
http://marx.vanderlinden.com.br/
47
Incluindo arquivos
PHP define 4 funes para lidar com a incluso de arquivos: include require include_once require_once O arquivo a ser includo precisa ser local
http://marx.vanderlinden.com.br/
48
funcoes.php
<?php function media(){ $total = 0; foreach( func_get_args() as $arg ){ $total += $arg; } return $total / func_num_args(); } function mensagem(){ echo "Hello, World!"; } ?> http://marx.vanderlinden.com.br/
49
Resultado
http://marx.vanderlinden.com.br/
51
As funes include e require tm exatamente o mesmo comportamento, quando executam com sucesso. Entretanto, quando o arquivo a ser includo no encontrado:
include Emite um warning (aviso), e a execuo continua require Emite um erro, e a execuo pra
http://marx.vanderlinden.com.br/ 52
include_once, require_once
comum, em projetos de pequeno e mdio porte, que se armazenem vrios arquivos de funes, os quais fazem referncia uns aos outros. A estrutura de referncias pode rapidamente ficar complexa. A definio da mesma funo vrias vezes resulta em erro, no interpretador PHP.
http://marx.vanderlinden.com.br/
53
include_once, require_once
As funes include_once e require_once funcionam exatamente como suas anlogas, mas ignoram a segunda chamada para o mesmo arquivo na mesma estrutura de cdigos. Devem sempre ser usadas para incluir arquivos que pode chamar outros arquivos, contendo funes.
http://marx.vanderlinden.com.br/
54
desejvel que seja mantido um layout consistente entre as vrias pginas que compem um site. As funes include/require podem ser usadas para se atingir essa consistncia de duas maneiras.
http://marx.vanderlinden.com.br/
55
Mtodo 1
http://marx.vanderlinden.com.br/
56
cabecalho.php
<html> <head> <title><?php echo $titulo; ?></title> <link href="layout.css" rel="stylesheet" type="text/css"> <link href="format.css" rel="stylesheet" type="text/css"> </head> <body> <div id="wrapper"><div id="bloco"> <div id="barratopo"> <img id="logo" src="img/logo.png" alt="Marx Gomes Van der Linden"/> http://marx.vanderlinden.com.br/ 57 (...)
rodape.php
</div></div> <div id="footer"> Texto do rodap </div></div> </div> </body> </html>
http://marx.vanderlinden.com.br/
58
Pginas do site
<?php $titulo = 'Pgina inicial'; require('cabecalho.php'); ?> <h1>Bem-vindo ao site!</h2> <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas aliquam. Nam ut sapien. Suspendisse tempor adipiscing neque. </p> <?php require('rodape.php'); http://marx.vanderlinden.com.br/ ?>
59
Caractersticas do Mtodo 1
necessrio repetir algum cdigo, ainda que pequeno, no incio e no fim de cada pgina. Pode no ser suficientemente flexvel para todas as variaes de sites. Cada pgina ter sua URL no formato:
Mtodo 2
Criar uma pgina-mestre contendo todo o layout da pgina. Cada pgina individual criada separadamente, sem qualquer referncia ao layout. Na seo varivel, incluir a pgina apropriada, de acordo com a varivel recebida por GET.
http://marx.vanderlinden.com.br/
61
Mtodo 2
(...) <div id="wrapper"><div id="bloco"> <div id="barratopo"> <?php switch($_GET['pag']){ case 'ini': require('inicial.php'); break; case 'contato': require('contato.php'); break; } ?> </div></div> (...)
http://marx.vanderlinden.com.br/ 62
Caractersticas do Mtodo 2
No nenhuma repetio de cdigo em cada pgina individual. mais fcil manusear o layout da pginamestre. O cdigo da pgina-mestre pode se tornar complexo, principalmente quando se usam formulrios. Cada pgina tem a URL no seguinte formato:
63