Uma function dentro de uma estrutura if

Posso colocar uma function em PHP dentro de uma estrutura if? como isso:

 

porque tentei e funciona, mas não sei se está correto ou não. obrigado

Isso é perfeitamente legal – ele simplesmente define a function dentro do bloco if statement. Dito isto, por que você quer fazer isso é um tanto misterioso.

Também vale a pena notar que esta function estará disponível no escopo global (ou seja: fora do bloco de declaração if), como …

Todas as funções e classs em PHP têm o escopo global – elas podem ser chamadas fora de uma function, mesmo que tenham sido definidas dentro e vice-versa.

Consulte a página do manual de funções definidas pelo usuário PHP para obter mais informações.

Como middaparka diz , isso é perfeitamente legal, mas em termos de uso, você pode querer verificar se existe uma function antes de declarar:

 if (!function_exists("foo")) { function foo() { return "bar"; } } 
  • documentação do function_exists

Parece um pouco estranho, mas sim é legal

A partir do PHP 5.3, se você precisar de uma function com um escopo limitado (digamos, para um retorno de chamada), você pode usar funções / fechamentos anônimos

Eu queria adicionar uma resposta aqui, porque há uma ressalva que não é abordada nas outras respostas.

Com base no meu teste em 5.3, parece que as funções que são definidas dentro if estruturas são definidas em tempo de execução, em vez de tempo de compilation como outras funções.

Por exemplo, fora de um bloco condicional, isto:

 foo(); function foo(){ echo 'foo!'; } 

funciona bem porque a function é definida no tempo de compilation e executada em tempo de execução. Mas chamando a function antes de defini-la dentro de um bloco de condição:

 if(1){ foo(); // Call to undefined function! function foo(){ echo 'foo!'; } } 

Produzirá uma call to undefined function erro de call to undefined function , pelo menos a partir da versão 5.3.

Mas a definição da function em um bloco if antes de chamá-lo é válida:

 if(1){ function foo(){ echo 'foo!'; } foo(); // No errors, since function is defined! } 

Portanto, há uma grande chance de estar ciente ao definir funções dentro de um condicional: a function deve ser definida no código antes de chamar a function, uma vez que as funções condicionais não parecem ser definidas no tempo de compilation.

O OP também perguntou sobre o desempenho. Se a function condicional é definida no tempo de execução em vez do tempo de compilation, como a maioria das outras funções, essa function não se beneficiará de impulsionadores de desempenho como o cache do OpCode, que dependendo das circunstâncias, pode diminuir a velocidade do seu aplicativo. Por exemplo, se o seu arquivo php mestre pareciam:

 if($IsLoggedIn){ // include files/functions and bootstrap here... } 

Então, o aplicativo inteiro pode não se beneficiar do cache do OpCode.

Basicamente sim, de acordo com o manual :

Qualquer código PHP válido pode aparecer dentro de uma function, mesmo outras funções e definições de class.

Pessoalmente, não tive uma situação em que eu realmente fizesse tal coisa. Na maioria das vezes, seria mais fácil agrupar suas funções em um lugar onde realmente pode ser encontrado! 😉