Ir para conteúdo
Leonardo Fernandes_51639

Parâmetro opcional no meio da lista de parâmetros de uma função ou método

Recommended Posts

Considere a seguinte função  em PHP:

 

function myf($ent1=0,$ent2=0,$ent3=0){

return $ent1 + $ent2 + $ent3;

}

 

Se eu quiser omitir o último parâmetro, chamo por myf(3,4) e automaticamente o valor de $ent3=0.

 

E se eu quiser omitir o segundo parâmetro ?    O php não aceita que eu a chame por myf(3,,4). Então como chamar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso não é permitido, já houveram propostas para que isso fosse possível(como https://wiki.php.net/rfc/skipparams) mas foram rejeitadas.

 

E na minha opinião situações que exigem isso normalmente são facilmente contornadas, por exemplo:

 

Passando os parâmetros com arrays.

function f($args) {
    $def = [
        'arg2' => 'default',
        'arg3' => 1
    ];
    $args = array_merge($def, $args);
    //....
}

 

Utilizando algum outro valor como coringa para indicar que o parâmetro não foi informado.

function($arg1, $arg2 = null, $arg3 = null) {
    if($arg2 === null)
        $arg2 = 'default';
    if($arg3 === null)
        $arg3 = 1;

    //....
}

Mas eu acho que o ideal é simplesmente informar o parâmetro afinal o valor padrão só pode ser de um tipo básico e uma vez definido ele não deve ser alterado pois pode causar efeitos colaterais em outros locais em que ele é utilizado.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por LucasOficial
      Me foi passado um trabalho de faculdade que consiste em:
      imagine um vetor inicialmente vazio com capacidade CAP.
      cria um programa que através de um menu permita o usuário
      inserir um novo numero
      remover um valor
      remover o elemento de uma determinada posição
      alteração de um valor por outro
      buscar determinado valor e dizer sua posição (caso exista)
      exibição de todos os elementos do vetor
       
      quero algumas ideias de como começar, quais funções, variáveis usar. sou bastante leigo nesse assunto.
    • Por dayenne
      Galera então é o seguinte, tenho um trabalho da faculdade para fazer porém ainda não entendo quase nada de java, to meio perdida no trabalho.
      o trabalho propoe que eu faça uma agenda de contatos, onde eu possa armazenar contatos, excluir contatos, pesquisa-los, edita-los, tudo isso usando 
      arquivos txt, porém não consigo de jeito nenhum sair da estaca 0, queria que você me orientasse melhor para que eu consiga flluir melhor os codigos.
       
    • Por flima58
      Segue o código abaixo
      <?php     class LerConteudo{     public $arquivo;     private $linha;          public function getArquivo()     {         $this ->arquivo['arquivo'];      }          public function carregarArquivo()     {               $abrir = fopen($this->arquivo,'r');               if(file_exists($this->$arquivo))          {//Ver se arquivo Existe                       while(!feof($abrir))              {//Ver se chegou fim do arquivo.                          $this->$linha = fgets($abrir);//LINHA recebe o conteudo do arquivo                                         }                        fclose($abrir); // Quando sair do loop, ele irá fechar o arquivo.            }else{                 echo "O arquivo não existe.";//Caso o arquivo não exista.               }              } public function Visualizar() {          echo  $this->$linha;// printando o arquivo atribuido a variavel LINHA          return $this->linha; }            }      $visualizar = Visualizar(); echo $visualizar; ?>  
    • Por Charles Ramos
      Bom dia, estou com uma dificuldade em um algoritmo para um jogo da forca em VisuALG, o algoritmo foi solicitado para um trabalho e um dos requisitos é que ele tenha uma função, como vocês podem ver foi colocado uma função, porém a professora disse que aquela função não retorna nenhum valor, e por isso ela se encaixa como procedimento, pesquisei, tentei e não conseguir encaixar uma função nesse algorítimo, queria acrescentar também a cada final de rodada a opção de jogar ou não novamente.
      desde já agradeço a ajuda. 
       
      abaixo segue o Algorítimo - obs o visuALG utilizado foi o 2.0
       
      algoritmo "Jogo da forca"
      var
      op,frutas,ne,na:inteiro //op: opçao, ne: numero erro, na:numero de acertos
      l1,l2,l3,l4,l5,l6,l7,ld1,ld2,ld3,ld4,ld5,ld6,ld7,dig,verifica:caracter //linhas(l1,l2,l3...) serão usadas para o aleatorio, já as ld (ld1, ld2, ld3) serão usadas para verificar o acerto
      V,D:Caracter
      funcao Derrota () :caracter
      inicio
                        Escreval("============================================================")
                        escreval("============================================================")
                        escreval
                        escreval(" --------- FIM  DE JOGO! ------- ")
                        ESCREVAL
                        ESCREVAL(" --------- GAME OVER =( ------- ")
                        ESCREVAL
                        Escreval("============================================================")
                        escreval("============================================================")
      fimfuncao
      funcao   vitoria () : caracter
      inicio

                        limpatela
                        Escreval("============================================================")
                        escreval("============================================================")
                        escreval
                        escreval(" PARABÊNS VOCE VENCEU!  ")
                        ESCREVAL
                        Escreval("============================================================")
                        escreval("============================================================")
                        fimfuncao
      inicio
      aleatorio on  // ativa o modo aleatorio fonte, palavra on é opcional
      aleatorio 1,7 // seleciona o ranger do aleatorio, é preciso definir para o comando ter as opção para escolha
      leia (frutas) // todo leia vai ser lançado um numero aleatorio nesse caso de 1 a 3
      aleatorio off  // desativa o modo aleatorio, assim ele escolher uma das opções das palavras.
      limpatela  // limpa tela
      repita // (repita 1) repitir o comando ate achar o comando interrompa
      escreval("---SEJA BEM VINDO---")
      escreval
      escreval(" ---JOGO DA FORCA--- ")
      escreval("Autores: Charles Ramos, Pedro Duca, Richard Vepo")
      escreval
      escreval
      escreval("Digite 1 para jogar e 0 para sair")
      leia(op)
      escolha op // verificar qual opção foi selecionada
             caso 0 //sair
                  escreva("você escolheu a opção 0 para sair")
                  escreval
                  escreval
                  fimalgoritmo  // encerrar o algoritmo
             caso 1
                  interrompa  // para o loop de escolher opção
             outrocaso   // caso digite algo diferente de 0 ou 1 ele vai limpar a tela
             limpatela   // limpa a tela, e vai voltar para o loop de opção.
      fimescolha
      fimrepita// fim repita 1
      escolha frutas // palava que vai ser escolhida automaticamente pelo aleatorio no inicio do código em aleatorio on
              caso 1
                   l1 <- "d"
                   l2 <- "a"
                   l3 <- "m"
                   l4 <- "a"
                   l5 <- "s"
                   l6 <- "c"
                   l7 <- "o"
              caso 2
                   l1 <- "a"
                   l2 <- "b"
                   l3 <- "a"
                   l4 <- "c"
                   l5 <- "a"
                   l6 <- "x"
                   l7 <- "i"
              caso 3
                   l1 <- "a"
                   l2 <- "b"
                   l3 <- "a"
                   l4 <- "c"
                   l5 <- "a"
                   l6 <- "t"
                   l7 <- "e"
              caso 4
                   l1 <- "a"
                   l2 <- "c"
                   l3 <- "e"
                   l4 <- "r"
                   l5 <- "o"
                   l6 <- "l"
                   l7 <- "a"
              caso 5
                   l1 <- "l"
                   l2 <- "a"
                   l3 <- "r"
                   l4 <- "a"
                   l5 <- "n"
                   l6 <- "j"
                   l7 <- "a"
              caso 6
                   l1 <- "p"
                   l2 <- "e"
                   l3 <- "s"
                   l4 <- "s"
                   l5 <- "e"
                   l6 <- "g"
                   l7 <- "o"
              caso 7
                   l1 <- "g"
                   l2 <- "u"
                   l3 <- "a"
                   l4 <- "r"
                   l5 <- "a"
                   l6 <- "n"
                   l7 <- "a"
      fimescolha

      ld1 <- "_"           // LINHAS USADAS PARA ESCREVER
      ld2 <- "_"
      ld3 <- "_"
      ld4 <- "_"
      ld5 <- "_"
      ld6 <- "_"
      ld7 <- "_"

               // inicio do jogo
                repita //repita2
                       se (ne > 7) entao  // Se número de erros for maior que 6 que é o tamanho das palavras logo, jogador perde, ou seja, jogador possui 6 chances apenas.
                         D<- Derrota
                        FIMALGORITMO
                       fimse

                       se (ld1 <> "_") e (ld2 <> "_") e (ld3 <> "_") e (ld4 <> "_") e (ld5 <> "_") e (ld6 <> "_") e (ld7 <> "_") entao // Se as linhas forem diferentes de _ significa que existe letra no local,
                         V<- Vitoria
                        FIMALGORITMO
                        fimse

                limpatela
                Escreval("============================================================")
                escreval("============================================================")
                escreval("")
                escreval("    /-----|")
                escreval("   /      |")
                se (ne > 0 ) entao
                   escreval("  /     (x.x)")
                senao
                   escreval("  /")
                fimse
                se (ne > 1 ) entao
                     escreval(" |      __||__  ")
                senao
                     escreval(" |   ")
                fimse
                se (ne > 2 ) entao
                   escreval(" |     /|     |\\")
                senao
                   escreval(" |   ")
                fimse
                se (ne > 3) entao
                   escreval(" |   /  |_____| \\")
                senao
                     escreval(" |   ")
                fimse
                se (ne > 4) entao
                   escreval(" |       ||  ||")
                senao
                     escreval(" |      ")
                fimse
                se (ne > 5) entao
                   escreval(" |      _|| _||")
                senao
                   escreval(" |     ")
                fimse
                se (ne > 6) entao
                   escreval(" |     |__||__|")
                   escreval("=====                ULTIMA CHANCE! ")
                senao
                     escreval(" |    ")
                   escreval("=====               ")
                fimse
      escreval("")
      escreval("Acertos: ",na)
      escreval("Erros: ",ne)
      escreval("")
      escreva("Palavra com 7 letras:     ",ld1," ",ld2," ",ld3," ",ld4," ",ld5," ",ld6," ",ld7)
      Escreval("")
      escreval("Dica da palavra: FRUTA ")
      escreval
      escreva("digite uma letra: ")
      leia(dig)

      verifica <- "0"
      se (l1 = dig) e (ld1 = "_") entao
           ld1 <- dig
           na <- na + 1
           verifica <- "1"
      fimse

      se (l2 = dig) e (ld2 = "_") entao
               ld2 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (l3 = dig) e (ld3 = "_") entao
               ld3 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (l4 = dig) e (ld4 = "_") entao
               ld4 <- dig
               na <- na + 1
               verifica <-  "1"
      fimse
      se (l5 = dig) e (ld5 = "_") entao
               ld5 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (l6 = dig) e (ld6 = "_") entao
               ld6 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (l7 = dig) e (ld7 = "_") entao
               ld7 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (verifica = "0") entao
      ne <- ne + 1
      fimse
      escreval("==============================================================")
      escreval("==============================================================")
                fimrepita

      fimalgoritmo
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.