Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Josuel S.H

[Resolvido] if e function

Recommended Posts

olá a todos do forum...

Bom eu estou tendo duvidas de como usar uma function que esta dentro do if fora do if

por exemplo, dentro do meu if tenho uma função que restorna tal valor e preciso pegar esse valor de fora do if

 

alguém pode me ajudar?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você poderia atribuir o retorno da function a uma variavel.....

 

<?php
if(algumacoisa){
function retorna(){
   return 'maciel';
}
$maciel = retorna();
}


function mostrar($maciel){
   return "Este veio da  function dentro do IF: ".$maciel;
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja pensei nisso... Até daria certo se o meu echo estivesse pra baixo pra variavel

 

no meu caso esta assim

 

<?php
echo retorna();

if(algumacoisa){
function retorna(){
   return 'maciel';
}
}
?>

alguém consegue me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pra q a função dentro do if??

ela só vai ser utilizada se for chamada

ex

function nome($nome){
    return 'Nome da pessoa';
}
if (alguma_condicao)
   echo nome();//chama a função

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leandro não é impossivel, pois o php não trabalha dessa maneira, pois eu posso declarar uma função antes ou depois do "echo"

 

Em tempo de compilação é assim, mas em execução, ou seja, dentro de um IF, a coisa é diferente.

 

Não vejo muito sentido no que você tá fazendo, mas vamos lá. Você pode fazer assim:

<?php
if ($alguma_coisa) {
	function retorna() {
		return 'maciel';
	}
}

if (function_exists('retorna')) {
	echo retorna();
}
?>

Ou, como o Victor Cometti colocou, se quiser chamar antes:

<?php
if ($alguma_coisa) {
	echo retorna();
}

function retorna() {
	return 'maciel';
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado a todos que tentanram me ajudar, mas tem que ser do jeito que eu disse, meu sistema ja esta formado e por isso o echo vem antes do function dentro do if...

Acho que vou ter que fazer o sistema de novo, ah não ser que alguém consiga uma solução tipo colocar function como "global" sei lá.., na minha opnião deve existir uma maneira de se fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que vou ter que fazer o sistema de novo, ah não ser que alguém consiga uma solução tipo colocar function como "global" sei lá.., na minha opnião deve existir uma maneira de se fazer

 

Amigo,

 

Se vale minha opinião, apague isso e faça de conta que nunca existiu.

 

O que você está tentando fazer beira o ridículo e deve ser evitado ao extremo, mesmo que para isso você tenha que jogar o código no lixo.

 

Lamento falar dessa forma, mas vou tentar me explicar utilizando a forma que o interpretador trabalha:

 

<?php
function teste(){
return 1;
}
echo teste();

 

Quando o PHP lê esse código, começa um processo de análise:

 

1. <?php

Nesse ponto o interpretador sabe que, tudo o que estiver além desse ponto trata-se de código PHP

 

2. function teste(){

Nesse ponto o interpretador identifica a palavra-chave function e espera que a próxima palavra seja um identificador, no caso, um nome de função.

Quando o interpretador encontra o nome da função, ele procura pelo parêntese de abertura e por possíveis parâmetros até o fechamento dos parênteses.

Encontrado todos os possíveis parâmetros, ele procura pela abertura do bloco de código que é a chave { e inicia uma nova instância do interpretador.

 

3. return 1;

Da mesma forma que ocorreu no passo 2, o interpretador vai lendo token por token, verifica se é uma palavra chave ou um identificador, se existem operadores....

 

4. }

Quando o interpretador identifica o fechamento do bloco de código, ele armazena todo o bloco da função em um contexto local, com o nome do identificador para execução posterior

 

5. echo teste();

Como, nesse instante, o código está fora de um bloco de código, o interpretador vai começar a execução, primeiro ele identifica o echo (que não é uma função) e vai para o próximo token, ao ler o identificador teste seguido de parênteses, ele vai ver se esse identificador foi declarado como função previamente e, se tiver sido, ele vai executar todo o bloco de código, chamando uma nova instância do interpretador.

 

 

O problema maior do seu código é que a função está encapsulada em um bloco condicional ou seja, ela não existirá a não ser que o bloco seja executado e verificado a veracidade da condição.

 

Ou seja, mesmo que, na pré-análise do código, o interpretador consiga saber que existe uma função, essa função não existe pois a condição não foi testada ainda.

 

Você pode até escrever um código POG como o abaixo, utilizando um estrutura de controle chamada goto:

<?php
goto condicional;
executa:
echo retorna();

goto continua;

condicional:
if( true ){
function retorna(){
	return 'maciel';
}
}

goto executa;

continua:
echo 'Continuando';
?>

 

Cuja saída será exatamente aquela que você espera, contudo é um código feio, ilegível e propenso a bugs muito difíceis de serem localizados.

 

Imagem Postada

 

De forma geral, a função não existe até que ela seja declarada e, no seu código, ela só será depois da verificação da condicional, ou seja, seu echo retorna() não funcionará.

 

Esse problema que você está enfrentando é um exemplo claro de falta de modelagem e planejamento da aplicação, um dos pilares do desenvolvimento de software e que foi simplesmente ignorado.

 

Então, repetindo a mim mesmo no início desse post: Se vale minha opinião, jogue esse código no lixo e refaça totalmente e, se ainda sobrar algum tempo, estude sobre analisador sintático recursivo descendente

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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