Você está na página 1de 6

Funes

O corao da programao PHP , indiscutivelmente a funo. A habilidade para encapsular uma parte de cdigo de maneira que ele possa ser chamado de novo e de novo inestimvel - Essa pedra angular da programao procedural estruturada e orientada a objetos. Nessa captulo, focaremos nos vrios aspectos da criao e manipulao de funes de dentro dos scripts PHP por isso, esse captulo sobre escrever funes, antes de us-las.

Sintaxe Bsica
Sintxe de funo , no seu mais bsico, muito simples. Para criar uma nova funo, nos simplemente usamos a palavra-chave function, seguida por um identificador, um par de parnteses e colchetes: function name() { } Nomes de funes PHP no so case-sensitive. Como todos os identificadores no PHP, o nome consiste somente em letras ( a-z ), nmeros e o caractere underscore, e no deve comear com um nmero. Para fazer sua funao fazer algo, simplesmente coloque o codigo a ser executado entre os colchetes, ento chame-o. function hello() { echo Hello world!; } hello(); // Exibe Hello world!

Retornando valores
Todas as funes em PHP retornam um valor at se voc no cham-lo explicitamente. Assim, o conceito de funoes void no so realmente aplicveis em PHP. Voc pode especificar o valor de retorno da sua funo pelo uso da palava-chave return. function hello() { return Hello Word; //Nenhuma sada mostrada } $txt = hello(); // atribui o valor de retorno Hello World em $txt echo hello(); // Exibe Hello World Naturalmente, 'return' tmbm te permite interromper a execuo de uma funo e sair dela se voc no quiser um valor de retorno.

function hello($who) { echo Hello $who; if ( $who === World ) { return; //Nada mais na funo ser processado. } echo , how are you?; } hello( World ); //Exibe Hello World hello( Reader ); //Exibe Hello Reader, how are you? Contudo, note, que mesmo se voc no retornar um valor, PHP ainda faz que sua funo retorne NULL. Funes tambm podem ser declaradas para que ela retorne por referncia; Isso permite a voc que retorne uma varivel como resultado de uma funo, em vez de uma cpia ( retornando uma cpia o padro para todos is tipos de dados, exceto para objetos ).Tipicamente, isso usado para coisas como recursos ( como conexes de bancos de dados ) e quando implementado o pattern 'factory'. Contudo, h uma advertncia: voc pode retornar uma varivel voc no pode retornar uma expresso por referncia, ou usar um statement de valor de retorno vazio para forar um valor nulo de retorno: function &query( $sql ) { $result = mysql_query( $sql ); return $result; } //a seguir incorreto e faz com que o PHP emita um 'NOTICE' quando chamado. Function &getHello() { return Hello World; } //Isso ir tambm fazer com que o PHP emita um 'WARNING' quando chamado. Function &test() { echo 'This is a test'; }

Escopo de varivel
O PHP tem trs escopos de variveis: O escopo global, o escopo da funo e o escopo da classe. O escopo global , como seu nome diz, disponvel para todas as partes do script; Se voc declarar ou atribuir um valor para uma varivel fora da funo ou classe, essa varivel criada em um escopo global. Contudo, uma vez que entrar em uma funo, o PHP criar um novo escopo um quadro limpo. Isto, por padro, no contm uma varivel, e isto completamente isolado do escopo global. Qualquer varivel definida como uma funo no mais disponvel depois que a funo termina

de executar. Isso permite o uso de nomes que podem estar em uso em outro local que no tenha preocupao sobre conflitos. $a = Hello World; function hello() { $a = Hello Reader; $b = How are you; } hello(); echo $a; //Mostrar Hello World echo $b; //Mostrar um warning H dois caminhois para acessar variveis em um escopo global de dentro de uma funo; o primeiro consiste da importar a varivel dentro do escopo da funo pelo uso do statement 'global': $a = Hello; $b = Wordl; function hello() { global $a, $b; echo $a $b; } hello(); // Exibe Hello World; Voc ser notificado que 'global' pega uma lista de variveis separadas por vrgula para importar naturalmente, voc pode ter mltiplos statements globais dentro de funes parecidas.. Muitos desenvolvedores sentem que o uso de globais introduzem um elemento de confuso no seu cdigo, e que conectando o escopo de funes com o escopo globa pode facilmente ser uma fonte de problemas. Eles preferem, em vez disso, usar o array superglobal $GLOBALS, que contm todas as variveis do escopo global: $a = Hello; $b = World; function hello() { echo $GLOBALS['a'] . ' ' . $GLOBALS['b']; } hello(); // Exibir Hello World

Passando argumentos
Argumentos nos permitem injetar um nmero arbitrrio de valores em uma funo, em ordem para que influencie seu comportamento.

Function hello( $who ) { echo Hello $who; } hello(World); //Aqui ns passamos no valor, World, e a funo exibir Hello World Voc pode definir qualquer nmero de argumentos e, de fato, voc pode passar um nmero arbitrrio de argumentos para uma funo, independentemente de quantos voc especificou na sua declarao. O PHP no reclama a menos que voc fornea menos argumentos que tenha declarado. Adicionamente, voc pode criar argumentos opcionais dando a eles um valor padro. Argumentos opcionais devem ser mais direita na lista e podem somente ter valores simples expresses no so permitidas: function hello( $who = World ) { echo Hello $who; } hello(); // dessa vez, ns no passamos argumentos, a $who atribuido World por padro.

Listas de argumentos de tamanho varivel


Um erro comum enquanto declarando uma funo escrever o seguinte: function f( $option = 'null' , $required ) { } Isso no causa nenhum erro a ser emitido, porm no faz sentido algum porqu voc nunca ser capaz de omitir o primeiro parmetro ( $optional ) se voc quiser especificar o segundo, e voc no puder emitir o segundo o PHP emitir um warning. function hello() { if( func_num_args() > 0 ) { $arg = func_get_arg(0); // O primeiro argumento na posio 0 echo Hello $arg; } else { echo Hello World; } } hello(Reader); // Exibir Hello Reader hello(); // Exibir Hello World Voc pode usar listas de argumentos de tamanho varivel at se voc especificar argumentos no cabealho da funo. Contudo, isso no afeta o comportamento das funes de listas de argumentos de tamanho varivel por exemplo, func_num_args() ainda retornar o nmero total

de argumentos passado para sua funo, ambos declarados e annimos. function countAll( $arg1 ) { if( func_num_args() == 0 ) { die(You nedd to specify at least one argument); } else{ $args = func_get_args(); // Retorna um array de argumentos //Remove o argumento definido do comeo array_shift( $args ); $count = strlen( $arg1 ); foreach( $args as $arg ) { $count += strlen( $arg ); } } return $count; } echo countAll( 'foo' , 'bar' , 'baz' ); // Exibe 9 um tanto importante manter em mente que listas de argumentos de tamanho variveis, so cheias de armadilhas em potencial; enquanto elas so muito poderosas, elas tendem a fazer seu cdigo ficar confuso, porqu quase impossvel de prover casos de teste se uma funo que aceita um nmero de parmetros no construda corretamente.

Passando argumentos por referncia


Argumentos de funo podem tambm ser passados por referncia, como oposto do mtodo tradicional por valor, prefixando-lhe com o operador por-referncia '&'. Isso permite a sua funo afetar variveis externas: function countAll( &$count ) { if( func_num_args() ==0 ) { die( You nedd to specify at least one argument ); }else{ $args = func_get_args(); // retoorna um array de argumentos // Remove o argumento definido do comeo array_shift( $args ); foreach( $args as $arg ) { $count += strlen( $arg ); } } } $count = 0; countAll( $count, foo , bar , baz ); //$count agora igual a 9

Note - e isso muito importante que somente variveis podem ser passadas como argumentos por referncia; voc no pode passar uma expresso como parmetro por referncia. Diferente do PHP4, o PHP5 permite que o valor padro a ser especificado para parmetros mesmo quando eles so declarados por referncia. function cmdExists( $cmd, &$output = null ) { $output = 'whereis $cmd'; if ( strpos ( $output, DIRECTORY_SEPARATOR ) !== false ) { return true; } else{ return false; } } No exemplo acima, o parmetro $output completamente opcional se uma varivel no passada, uma nova ser criada dentro do contexto de cmdExists() e, do curso, destrudo quando a funo retorna.

Sumrio
Funes so os componentes frequentemente mais usados na linguagem PHP ( ou, alis, para qualquer linguagem). Sem elas, seria virtualmente impossvel escrever cdigo reusvel ou mesmo tcnicas de programao orientada a objetos. Por essa razo, voc no deveria conhecer somente o bsico da declaraao de funes, porm tambm nas poucas menos bvias implicaes de elementos como passar argumentos por referncia manipulao de lista de argumentos com tamanho varivel.O exame apresenta uma srie de questes centralizadas entorno de um slido entendimento de como as fune funcionam felizmente, esses conceitos so relativamente simples e fcil de assimilar, como ilustrado nesse captulo.

Você também pode gostar