Ato 3 - Estrutura de Controle e Funções

Artigo de nível básico para aqueles que estão iniciando no PHP, talvez um pouco resumido, mas acredito que seja elucidativo.

[ Hits: 23.128 ]

Por: woshington rodrigues em 13/08/2010


Funções



Functions

Funções são muito úteis para conseguir reusabilidade em programação, uma função é um conjunto de códigos que se destina a resolver um problema específico e que pode ser sempre chamada em uma única linha quando necessário, evitando o problema de ter que reescreve-la, a criação de uma função é caracterizada pela utilização da palavra chave function seguida pelo nome da função mais abertura de parênteses, onde deverão figurar os parâmetros ou argumentos. Posterior a isso são abertas chaves que irão conter os blocos de comando. Dentro dos blocos de comando pode existir qualquer código válido php, inclusive classes.

<?php

   function nome_da_funcao ($param1, $param2) {
   //parâmetros quando mais de um são separados por vírgula
      /* comandos */      
}

?>

O nome das funções não são case-sensitive, mas por uma questão de organização procure utilizar os nomes como se fossem, uma função não precisa ser declarada antes de ser chamada, sua chamada pode ser feita antes de sua declaração, a menos que seja uma condicional, aí a função deverá existir para poder ser chamada.

Note que a nomenclatura das funções segue uma regra diferente da nomenclatura de classes, para funções que têm nomes compostos é aconselhável o uso de underlines, dessa forma: nome_da_função.

Uma função pode conter outras funções, elas tem escopo global e podem ser chamadas de qualquer lugar do código.

Funções recursivas

Basicamente funções recursivas são funções que chamam a si mesmas. Mas possuem o inconveniente de se tornarem demasiado lentas no processamento e exigir muito da memória RAM quando possuem muitos laços de iteração.

<?php

function recursiva($param) {
   if($param<=20) {
      recursiva($param+1);
      echo $param;  
   }
}
recursiva(5);

?>

Uma função pode retornar algo ou uma array, um inteiro, um objeto ou até mesmo nada no caso o retorno de nada é void, a palavra chave return é que irá determinar o retorno e assim que ela for declarada a função automaticamente é finalizada. O uso de return não é obrigatório!

Observe o exemplo abaixo: a função teste2 só pode ser chamada depois que for chamada a função teste( ), ela só passa a existir a partir da chamada de teste( ), se tentar chama-la antes o php irá gerar um erro dizendo que a função teste2 não foi definida.

<?php

function teste() {
   echo 'funcao teste foi chamada!';
   function teste2() {
      echo 'funcao teste2 chamada!';
   }
}
teste();
teste2();

?>

A passagem de parâmetros para funções pode ser feita de 3 maneiras distintas no php.

By value: esta é sem dúvidas a forma mais comum de passagem de parâmetros, são passados os identificadores das variáveis locais, separados por vírgula (no caso de serem mais de um). Os argumentos neste caso não podem ser alterados externamente.

By reference: Neste caso o parâmetro é referenciado e associado a qualquer variável interna a função e podem ser alterados no contexto externo a função.

<?php

function te(&$param) { //parâmetro passado por referência "&"
   $param+=8;
   return $param;
}
$pa=5; // vale 5
print te($pa);
echo $pa; /*após passar pela função seu valor foi alterado para 13, o valor do parâmetro foi alterado e isso se refletiu externamente a função */

?>

By default: os parâmetros podem conter valores padrões que serão mantidos caso não seja informado um novo valor.

Funções integradas da linguagem

Além das funções que podemos criar no PHP, existem também as funções nativas da linguagem, que diga-se de passagem são muitas e suprem boa parte das necessidades dos programadores.

Ocorre de muitos usuários reinventarem a roda e acabarem por fazer algo que já estava pronto, talvez por falta de pesquisa, então vale a pena dar uma boa olhada no manual do php e na biblioteca PEAR antes de tentar criar uma função que talvez já exista.

São tantas estas funções que tratam desde arquivos de texto, imagens, strings até objetos e banco de dados que renderiam vários artigos, então me limitarei apenas a menciona-las em pequena parte, o uso destas funções deve ser feito de maneira atenta observando sempre o que é pedido como parâmetro, qual o retorno da função, como trabalhar com este retorno, em qual escopo utiliza-la, se há suporte para as mesmas, não é possível por exemplo usar uma função que trabalha com redimensionamento de imagens da biblioteca GD se não houver a biblioteca inclusa na engine PHP, um método SQL não irá funcionar sem a biblioteca MySQLi (biblioteca mysql que trata orientado a objetos).

Contudo não é este um bicho de sete cabeças. Atente-se à documentação oficial no php.net, onde consta uma relação geral das funções e seus respectivos retornos e o que é pedido como parâmetro.

Uma alternativa mais prática seria o uso de uma IDE (Integrated Development Enviroment) existe no mercado uma série de IDEs, por uma questão de conveniência ;) (grátis) fica a recomendação do PHP-Eclipse que possui recursos interessantes como depuração de código, coloração diferente para estruturas distintas, suporte a vários formatos como arquivos da classe de templates smarty (.tpl) e o mais interessante no contexto, possui auto-complete e informações sobre o retorno das funções, o que é pedido em seus parâmetros, e isso ajuda muito.

Um exemplo com a função nativa func_num_args( ), que irá retornar o número de parâmetros da função que a contém.

<?php

function exemplo($param1, $param2, $param3) {
   $num=func_num_args( ); //irá retornar 3
   return $num;
}

?>

A função func_num_args( ) é descrita desta maneira no php.net.

int func_num_args( void )
ela irá retornar um valor inteiro, que no caso é o número de argumentos da função, o parâmetro passado será vazio.

bool function_exists (string $function_name)
irá retornar um valor booleano (true or false), irá pedir como parâmetro uma string contendo o nome da função a ser testada.

Referências:
  • http://www.php.net
  • Livro: PHP programando com orientação a Objetos de Pablo dall'Oglio

Página anterior    

Páginas do artigo
   1. Estruturas de Controle - Condicionais
   2. Estruturas de Controle - Iterações
   3. Estruturas de Controle - Comandos básicos de sequenciação
   4. Funções
Outros artigos deste autor

Snort - Gerenciamento de redes

Nessus Portscanner

PHP e suas variáveis (básico)

Ato 2 - comandos de saída, constantes e operadores em PHP (básico)

Leitura recomendada

If inline para PHP

Instalando e configurando o PHP 7.1 no CentOS 7

Ato 2 - comandos de saída, constantes e operadores em PHP (básico)

PHP e suas variáveis (básico)

Introdução a Orientação a Objetos no PHP4

  
Comentários
[1] Comentário enviado por everton_fuzz em 13/08/2010 - 13:07h

só faltou o operador ternário.

Se(<condição>) ? <instruções para verdadeiro> : <instruções para falso>;

de resto esta ótimo!. parabens!

[2] Comentário enviado por wos- em 13/08/2010 - 13:42h

valeu irmão,
eu pensei em colocá-lo, mas é que eu já tinha falado sobre ele no artigo anterior.

[3] Comentário enviado por metalpunkpointer em 18/08/2010 - 11:49h

olá wos, fica um adendo que a sintaxe alternativa tbm se aplica aos laços...

while(condicao):
instruções;
endwhile;

[4] Comentário enviado por walkerjosh em 20/08/2010 - 23:06h

Amigo WOS, ficou bacana sua explicação! Poste mais coisas de PHP pra gente! Valeu!

[5] Comentário enviado por marcelo linus em 22/08/2010 - 00:35h

manero msm, vlw, coloca mais coisa ai pra gente,!!


Contribuir com comentário