web-dev-qa-db-fra.com

En PHP, comment vérifier si une fonction existe?

Comment puis-je vérifier si la fonction my_function existe déjà en PHP?

46
bradg

En utilisant function_exists :

if(function_exists('my_function')){
    // my_function is defined
}
90
Mark Elliot

http://php.net/manual/en/function.function-exists.php

<?php
  if (!function_exists('myfunction')) {

     function myfunction()
     {
       //write function statements
     }

}
 ?>
15
Avinash Saini
var_dump( get_defined_functions() );

AFFICHE toutes les fonctions existantes

7
T.Todua

Je veux souligner ce que kitchin a souligné sur php.net:

<?php
// This will print "foo defined"
if (function_exists('foo')) {
  print "foo defined";
} else {
  print "foo not defined";
}
//note even though the function is defined here, it previously was told to have already existed
function foo() {}

Si vous souhaitez éviter une erreur fatale et définir une fonction uniquement si elle n'a pas été définie, vous devez procéder comme suit:

<?php
// This will print "defining bar" and will define the function bar
if (function_exists('bar')) {
  print "bar defined";
} else {
  print "defining bar";
  function bar() {}
} 
3
SeanDowney

Vérification de plusieurs function_exists

$arrFun = array('fun1','fun2','fun3');
if(is_array($arrFun)){
  $arrMsg = array();
  foreach ($arrFun as $key => $value) {
    if(!function_exists($value)){
      $arrMsg[] = $value;
    }
  }
  foreach ($arrMsg as $key => $value) {
    echo "{$value} function does not exist <br/>";
  }
}
function fun1(){
}

Output

fun2 function does not exist 
fun3 function does not exist 
1
Ram Pukar

Et si my_function est dans l'espace de noms:

namespace MyProject;

function my_function() {
    return 123;
}

Vous pouvez vérifier s'il existe

function_exists( __NAMESPACE__ . '\my_function' );

dans le même espace de noms ou

function_exists( '\MyProject\my_function' );

en dehors de l'espace de noms.

P.S. Je sais que c'est une très vieille question et PHP s'est beaucoup améliorée depuis lors, mais je crois que les gens continuent de jeter un œil ici, et cela pourrait être utile.

0
Avag Sargsyan