Como Evitar Redeclarar Funções já Existentes com function_exists no PHP


Quando você pega algum código PHP grande, que envolve vários arquivos, e principalmente quando foi criado por outro programador, talvez não tão organizado quanto você, é comum cometer o erro de redeclarar uma função já existente. Por exemplo, se uma página inclui várias outras páginas com require ou include, e em qualquer uma delas existir uma função chamada faz_algo(), caso você crie (defina) uma outra função com o mesmo nome, um erro de redeclaração ocorrerá: “Cannot redeclare function”. Este erro é importante, pois o script precisa ser exato, e havendo duas funções com o mesmo nome, como o PHP vai saber qual delas executar quando você invocá-la pelo nome? Então por isto é que um erro ocorre, pois não se pode ter ambiguidade em programação.

Como Evitar Redeclarar Funções já Existentes com function_exists no PHP

Para evitar cometer o erro de nomear uma função já existente, você pode optar por utilizar o código function_exists desta forma:

1
2
3
4
5
if ( !function_exists('faz_algo') ) {
   function faz_algo($params) {
       
   }
}
if ( !function_exists('faz_algo') ) {
   function faz_algo($params) {
       
   }
}

A verificação if(!function_exists(‘faz_algo’)) faz o PHP só considerar a função faz_algo que você definiu se já não houver alguma função com este mesmo nome. Com este controle, você fica salvo de estar redeclarando funções importantes do sistema web que você está desenvolvendo.

Agora, se você estiver trabalhando com Classes, use o código abaixo:

1
2
3
4
5
if(!method_exists(__NOME_DA_CLASSE__, 'faz_algo')){
    function faz_algo(){
 
    }
}
if(!method_exists(__NOME_DA_CLASSE__, 'faz_algo')){
    function faz_algo(){

    }
}

A função method_exists permite você ferificar se uma função (conhecido como método) existe dentro de uma dada classe. O primeiro parâmetro da função method_exists é exatamente o nome da classe, e o segundo parâmetro é o nome da função a ser verificada.

Ideias

Você pode utilizar o function_exists ou method_exists para definir o nome da sua função conforme a existência ou não de outra função já declarada com o mesmo nome. Por que assim, às vezes, mesmo não havendo outra função com o mesmo nome quando você cria ela, talvez futuramente outro programador cometa o erro de criar uma função com o mesmo nome da sua, gerando aí o erro fatal. Então veja a ideia abaixo:

1
2
3
4
5
6
7
8
9
if ( !function_exists('faz_algo') ) {
   function faz_algo($params) {
       
   }
}else{
   function faz_algo2($params) {
       
   }
}
if ( !function_exists('faz_algo') ) {
   function faz_algo($params) {
       
   }
}else{
   function faz_algo2($params) {
       
   }
}

Neste código acima, caso já exista a função faz_algo, você declara a função faz_algo2 em vez de faz_algo. Só que na hora de utilizar a função, você deve primeiro verificar a faz_algo2 e caso ela não exista (não foi declarada), aí sim utilizar a faz_algo. Um exemplo básico para entender:

1
2
3
4
5
if ( function_exists('faz_algo2') ) {
   $retorno = faz_algo2();
}else{
   $retorno = faz_algo();
}
if ( function_exists('faz_algo2') ) {
   $retorno = faz_algo2();
}else{
   $retorno = faz_algo();
}

Leave a Reply