Função com argumento facultativo

1. Função com argumento facultativo

Marcelo Fischborn
fischborn

(usa Slackware)

Enviado em 06/01/2006 - 14:30h

ola pessoal, estou como uma duvida que acredido ser de simples solucao, mas como nunca tinha me deparado com uma situação semelhante, a mantive até hoje...

Tenho uma funcao:

function nome_dela($arg1, $arg2, $arg3){
$arg1 += 3;
if(isset($arg2)) echo $arg2;
if(isset($arg3)) echo $arg3;
return $arg1;
}

bom, acontece que os agumentos arg2 e arg3 só vão ser usados em algumas áreas do site e pra não ter que declará-los ao chamar a funcao mesmo sem isto ser necessario naquela area do site, gostaria de declara-los na funcao como facultativos, mas nao tenho a minima ideia de como se faz isso...

desde ja obrigado...


  


2. hum...

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/01/2006 - 17:06h

Amigo,

Até onde sei o PHP obriga que todos os parâmetros sejam passados para a função, diferente do JavaScript.
Não sei te dizer com certeza se o que vocÊ quer é possível, acredito que não, mas como nunca precisei usar um função sem passar todos os parâmetros para ela então não sei lhe responder com clareza.

Abraços,
Willian


3. Re: Função com argumento facultativo

Everton da Silva
reimassupilami

(usa Slackware)

Enviado em 06/01/2006 - 17:22h

olha, se eu estiver enganado sobre o que vou dizer realmente será uma grande surpresa pra mim, mas por favor me digam... :0)

seguinte, no php vc não pode fazer isso... se vc declarou 3 argumentos na construção da função então vai ter que usar 3 argumentos obrigatoriamente para chamá-la... eu tenho muitos casos assim como o seu, então quando vou chamar a função usando apenas um argumento, por exemplo, faço assim:

nome_da_funcao($var1,NULL,NULL)

ou seja, vc usa quantos argumentos quiser na chamada, e deixa os restantes como NULL, para não precisar mandar um valor a toa... ou pode colocar algum valor qualquer tambem, tipo 0, sei la, vai da sua implementação...

se fosse possivel fazer o que vc quer então tambem seria possivel o polimorfismo, que é algo muito importante pra mim, e que infelizmente o php ainda não implementa...

mas é isso ae, se acharem outra solução, por favor, postem aki, gostaria muito de saber...


4. Re: Função com argumento facultativo

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/01/2006 - 19:58h

Meus conhecimentos em PHP tb dizem que não é possível, mas, dizem que tudo nessa vida é possível, então vai saber, neh?

hehehehehe

Abraços!!!


5. Valeu pessoal!!

Marcelo Fischborn
fischborn

(usa Slackware)

Enviado em 09/01/2006 - 09:32h

Valeu, tive que usar a alternativa funcao($var, NULL, NULL), na verdade isso nao foi um problema, mas como não sou nenhum expert em php fui tirar minhas duvidas... VALEU!!


6. Re: Função com argumento facultativo

Thiago
covoes

(usa Kurumin)

Enviado em 09/01/2006 - 21:16h

No PHP tem um recurso, de parametros com valores padrões por ex:

function fun(arg1, arg2 = "valor", arg3 = "valor2");

Essa função pode ser chamada com 1, 2 ou 3 argumentos, o que acontece é o seguinte, argumentos sem valores padrões são obrigatórios, e os outros, caso sejam utilizados, os valores declaradas na chamada da função sobrescrevem o valor padrão da declaração da função.

Mais informações
http://www.php.net/manual/pt_BR/functions.arguments.php


7. Existe uma possiblidade

Eduardo Lima
dudufl

(usa Kurumin)

Enviado em 08/01/2008 - 10:26h

Olá,

Eu encontrei algo que pode ser últil espero ter ajudado,

Existe uma função no php chamada de func_num_args() que retorn a quantidade de parâmentros existente na função, isso tira a necessidade de declarar as variáveis na função. Ex:


<?php
function foo() {
$numargs = func_num_args();
echo "Number of arguments: $numargs\n";
}

foo (1, 2, 3); // Numero de argumentos impressos: 3
?>

mais exemplos em: http://www.php.net/manual/pt_BR/function.func-num-args.php



8. Re: Função com argumento facultativo

José Roberto
jragomes

(usa Ubuntu)

Enviado em 08/01/2008 - 10:31h

Acho eu que a maneira mais correta é fazer da seguinte maneira

funcao(param1, param2 = null, param3 = null){
}

Assim, você não precisa passar todos os valores na chamada da função. Ou seja, você poderá fazer:
$x = funcao(123); ou
$x = funcao (123, 34); ou
$x = funcao(1,2,3);