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: