Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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?Josuel,
Isso se torna impossível. Pois você tem que declarar a função antes de usar.
Leandro não é impossivel, pois o php não trabalha dessa maneira, pois eu posso declarar uma função antes ou depois do "echo"
cara então mstre seu proposito mesmo ...
fica mais facil de ajudar....
acho que ja esta claro o que pretendo fazer
echo nome();
if(cidade){
...
function nome(){
return('Nome da pessoa');
}
}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>
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';
}
?>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
>
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.
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.php.net/manual/en/images/0baa1b9fae6aec55bbb73037f3016001-xkcd-goto.png&key=81d4bbf0bcaa91981308574401d8cc1daa6ef368bcab72234e92e275ce05c969" alt="Imagem Postada" class="bbc_img">
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
obrigado João Batista, vou refazer mesmo o sistema.
Problema resolvido.
você poderia atribuir o retorno da function a uma variavel.....