Em Busca da “Zend PHP Yellow Pages”
Posts tagged funções
Funções – Parte VI – Passar argumentos por referência
Feb 10th
Argumentos da função também podem ser passados por referência, prefixando com o operador de referência &. Isto permite sua função visualizar e alterar variáveis externas:
<?
function contarTodos(&$count)
{
if (func_num_args() == 0) {
die(“Você precisa especificar pelo menos um argumento.”);
} else {
$args = func_get_args(); // Retorna um array de argumentos
array_shift($args); // Remove o argumento definido no inicio.
$count = strlen ($arg1);
foreach ($args as $arg) {
$count += strlen($arg);
}
}
}
$count = 0;
contarTodos($count, “um”, “dois”, “três”);
echo $count; // será impresso 10
?>
Observação:
Isso é muito importante para você ficar sabendo, que as funções só aceitam variáveis para serem passadas por referência, você não pode passar uma expressão.
Ao contrário do PHP 4, PHP 5 permite que o valor padrão possa ser especificado, mesmo para os parâmetros quando forem declarados por referência:
function cmdExiste($cmd, &$saida = null) {
$saida = ‘onde $cmd’;
if (strpos($saida, DIRECTORY_SEPARATOR) !== false) {
return true;
} else {
return false;
}
}
No exemplo acima, o parâmetro $saída é totalmente opcional, se uma variável não for passada, uma nova será criada no âmbito do cmdExiste() e destruída quando a função retornar.
Funções – Parte V – Comprimento variável da lista de argumentos
Feb 9th
Um erro comum quando declarar uma função é a de escrever o seguinte:
function f ($opcional = “null”, $requerido)
{}
Isto não vai provocar alerta de erros, mas também não faz qualquer sentido, porque você nunca será capaz de omitir o primeiro parâmetro ($opcional) se você deseja especificar o segundo, e você não pode omitir o segundo, porque o PHP irá emitir um aviso.
Neste caso, o que você realmente quer é comprimento variável da lista de argumentos, ou seja, a capacidade de criar uma função que aceita um número variável de argumentos, dependendo sobre a circunstância. Um exemplo típico deste comportamento é exibido pela família de funções printf().
PHP fornece três funções internas para lidar com comprimento variável da lista de argumentos:
func_num_args(), func_get_arg() e func_get_args(). Aqui está um exemplo de como elas são utilizadas:
function ola()
{
if (func_num_args() > 0) {
$arg = func_get_arg(0); // O primeiro argumento é a posição 0
echo “Olá $arg”;
} else {
echo “Olá Mundo”;
}
}
ola(“Leitor”); // Exibe “Olá Leitor”
ola(); // Exibe “Olá Mundo”
Você pode usar o comprimento variável da lista de argumentos mesmo se você especificar argumentos no cabeçalho da função. No entanto, isso não irá afetar a forma como o comprimento variável da lista de argumentos irá se comportar, por exemplo, func_num_args() ainda retornará o número total de argumentos passados para a função, ambos declarados e anônimos.
function contarTodos($arg1)
{
if (func_num_args() == 0) {
die(“Você precisa especificar pelo menos um argumento.”);
} else {
$args = func_get_args(); // Retorna um array de argumentos
array_shift($args); // Remove o argumento definido no inicio.
$count = strlen ($arg1);
foreach ($args as $arg) {
$count += strlen($arg);
}
}
return $count;
}
echo contarTodos(“um”, “dois”, “três”); // Exibe ’10’
Observação importante:
É muito importante ter em mente que o comprimento variável da lista de argumentos estão cheios de potenciais armadilhas, enquanto eles são muito poderosos, eles tendem a tornar o código confuso, porque é quase impossível de se prever casos de teste global se uma função que aceita um número variável de parâmetros não é construído adequadamente.
Funções – Parte III – O escopo da variável
Feb 3rd
PHP possui três tipos de escopo de variável:
- O global
- O interno na função
- O da classe
O global, como o próprio nome indica, disponível para todas as partes do script, se você declarar ou atribuir um valor a uma variável fora de uma função ou classe, essa variável será criada no âmbito global.
OBS: Irei falar sobre o escopo da classe mais a frente, quando estiver falando sobre orientação a objetos.
No entanto, cada vez que entra uma função, PHP cria um novo escopo, que, por padrão, não contém qualquer variável e que está completamente isolado da parte externa da função. Qualquer variável definida dentro de uma função já não está disponível após a função tiver terminado a execução. Isso permite a utilização de nomes que podem estar em uso em outro lugar sem ter que se preocupar com os conflitos.
<?
$a = “Olá mundo”;
function ola()
{
$a = “Olá leitor,”;
$b = “Como vai você?”;echo $a . ” ” . $b . “<br/>”;
}
ola(); // Irá imprimir Olá Leitor, Como vai você?
echo $a; // Irá imprimir olá mundo
echo $b; // Irá emitir um warning
?>
Há duas maneiras de acessar variáveis no escopo global dentro de uma função:
A primeira consiste em “importar” a variável dentro do escopo da função, utilizando a declaração global:
<?
$a = “Olá”;
$b = “Mundo”;
function ola()
{
global $a, $b;
echo “$a $b”;
}
ola(); // Exibe “Olá Mundo”
?>
Você vai perceber que tem uma lista global de variáveis separadas por vírgula para ser importado.
Naturalmente, você pode ter muitas declarações globais dentro de uma mesma função, com isso muitos desenvolvedores acham que o uso do global introduz um elemento de confusão no seu código, e que “junta” escopo de uma função com o escopo global podendo facilmente ser uma fonte de problemas. Eles preferem, em vez disso, para usar a matriz super global $GLOBALS, que contém todas as variáveis no escopo global:
<?
$a = “Olá”;
$b = “Mundo”;
function ola()
{
echo $GLOBALS["a"] .” “. $GLOBALS["b"];
}
ola(); // Exibe “Olá Mundo”
?>
Funções – Parte II – Retornando Valores
May 19th
Todas as funções em PHP retornam valores, mesmo se você não informar o retorno. O conceito de função “vazia” não se aplica no PHP. Você pode especificar o valor de retorno da sua função usando a palavra-chave return.
function ola()
{
return “Olá mundo”; // Retorna uma string “Olá mundo”
}
$txt = ola(); // Atribui o valor de retorno “Olá mundo” para a variável $txt
echo ola(); // exibe “Olá mundo”
A palavra-chave return, também permite que você interrompa a execução de uma função, mesmo se você não quiser devolver um valor:
function ola($quem)
{
echo “Olá $quem”;
if ($quem == “mundo”) {
return; // Nada mais na função será processado
}
echo “, como vai você”;
}
ola(“mundo”); // exibe “Olá mundo”
ola(“leitor”) // Displays “Olá leitor, como vai você?”
Note, no entanto, que mesmo se você não retornar um valor, PHP ainda irá retornar da sua função um valor NULL.
Funções também podem ser declaradas para que elas retornem por referência, o que permite a você o retorno de uma variável como o resultado da função, em vez de uma cópia (uma cópia está retornando o padrão para cada tipo de dados exceto objetos).
Normalmente, isto é usado para coisas como recursos (como conexões de dados) e quando se aplica o padrão de fábrica. No entanto, há uma ressalva: você deve retornar uma variável, você não pode retornar uma expressão por referência, ou utilizar uma declaração vazia para forçar um retorno de valor NULL:
function &query($sql)
{
$result = mysql_query($sql);
return $result;
}
// A função seguir é errada e vai o PHP irá emitir um aviso de erro quando chamado.
function &getHello()
{
return “Olá mundo”;
}
// Isto também irá fazer com que o alerta seja emitido quando chamado.
function &teste()
{
echo ‘Este é um teste’;
}
Funções – Parte I – Sintaxe Básica
Jan 17th
A sintaxe de uma função básica é muito simples. Para criar uma nova função, nós simplesmente usamos a palavra-chave function, seguido por um identificador ou nome de função, um par de parênteses e chavetas, vejam o exemplo abaixo:
function nome() { }
Nome de funções no PHP não são case-sensitive. Tal como acontece com todos os identificadores em PHP, o nome deve consistir de letras (a – z), números e o caractere sublinhado, e não pode iniciar por um número.
Para sua função fazer alguma coisa, basta colocar o código a ser executado entre as chaves, então chamá-lo.
function ola()
{
echo “Olá mundo!”;
}
ola(); // será impresso “Olá mundo!”
Funções
Jan 16th
Apartir de hoje estaremos falando de funções que é o coração da programação PHP. Tem a capacidade de sintetizar qualquer pedaço de código de uma forma que pode ser chamado novamente, e novamente é inestimável, que é a base da estrutura processual da programação orientada para objeto.
Iremos centrar nossa atenção sobre os diversos aspectos da criação e gestão das funções dentro de scripts PHP, portanto, falaremos sobre como escrever funções, em vez de usá-las.