search for in the  
<func_num_argsget_defined_functions>
Last updated: Thu, 19 May 2005

function_exists

(PHP 3 >= 3.0.7, PHP 4, PHP 5)

function_exists --  Return TRUE if the given function has been defined

Description

bool function_exists ( string function_name )

Checks the list of defined functions, both built-in (internal) and user-defined, for function_name. Returns TRUE on success or FALSE on failure.

<?php
if (function_exists('imap_open')) {
   echo
"IMAP functions are available.<br />\n";
} else {
   echo
"IMAP functions are not available.<br />\n";
}
?>

Note that a function name may exist even if the function itself is unusable due to configuration or compiling options (with the image functions being an example). Also note that function_exists() will return FALSE for constructs, such as include_once() and echo().

See also method_exists() and get_defined_functions().



User Contributed Notes
function_exists
codeslinger at compsalot dot com
02-Feb-2005 08:11
case-insensitive is by design
see  http://www.php.net/manual/en/language.functions.php

"Function names are case-insensitive, though it is usually good form to call functions as they appear in their declaration."

PHP is not C, though the similarities can be confusing.
dark dot ryder at gmail dot com
06-Oct-2004 06:49
A note of caution: function_exists() appears to be case-insensitive (at least as of PHP 4.3.8).  e.g.:

<?php
  
function MyCasedFunction() {
       return
true;
   }

  
// Will return true, even though casing is "wrong"
  
if (function_exists("mYcAsEdFuNcTiOn"))
       echo
"I see it!";
?>
bob at thethirdshift dot net
23-Jun-2004 11:55
I, too, was wondering whether is_callable or function exists is faster when checking class methods.  So, I setup the following test:

<?php
function doTimes($start, $end)
  {
  
$start_time = explode (" ", $start);
  
$start_time = $start_time[1] + $start_time[0];
  
$end_time = explode (" ", $end);
  
$end_time = $end_time[1] + $end_time[0];
  
$time = $end_time - $start_time;
   return
$time;
  }

class
test
 
{
     function
test()
     {
         return
true;
     }
  }
 
$callableIsTrue = false;
$startIsCallable = microtime();
for(
$i = 0; $i < 10000; $i++)
  {
     if(
is_callable(array('test', 'test'))) { $callableIsTrue = true; }
  }
$endIsCallable = microtime();

$existsIsTrue = false;
$startExists = microtime();
for(
$i = 0; $i < 10000; $i++)
  {
     if(
function_exists('test::test')) { $existsIsTrue = true; }
  }
$endExists = microtime();

$timeIsCallable = doTimes($startIsCallable, $endIsCallable);
$timeExists    = doTimes($startExists, $endExists);

echo
"<b>is_callable = ".($callableIsTrue ? "TRUE" : "FALSE")."</b>, \n";
echo
"<b>function_exists = ".($existsIsTrue ? "TRUE" : "FALSE")."</b><br>\n";

echo
"<br>Did 10000 is_callables in ".$timeIsCallable." seconds";
echo
"<br>Did 10000 function_exists in ".$timeExists." seconds";
?>

This gives the output :

is_callable = TRUE, function_exists = FALSE

Did 10000 is_callables in 0.0640790462494 seconds
Did 10000 function_exists in 0.0304429531097 seconds

So the fact that function_exists is twice as fast is slightly over shadowed by the fact that it doesn't work on class methods, at least not as far as I can tell.
ckrack at i-z dot de
09-Mar-2004 02:22
i was wondering whether is_callable or function exists is faster when checking class methods.

is_callable(array('foo', 'bar'));
function_exists('foo::bar');

my results when doing each operation 10000 times with a simple test class were the following:

is_callable: 0.28671383857727 seconds
function_exists: 0.14569997787476 seconds

(following tests have proved this to be true).

thus you can see, function_exists is twice as fast as is_callable.
breadman
29-Jul-2003 07:17
Functions within a function are better off as anonymous returns from create_function(), unless you want to be able to call it elsewhere.

However, I have used this in skinning:  I use alert_box() to display certain errors, like a faulty SQL query.  This simply calls display_alert(), which is defined in my skin scripts.  However, alert_box() is sometimes called before I know which skin to load, so it has its own functionality which it uses if function_exists('display_alert') returns false.
dshearin at excite dot com
08-Jul-2003 05:15
This can be used to conditionally define a user function. In this sense, it can act as a sort of inline include_once().

For example, suppose you have a function A that calls function B. B is only used inside function A and is never called from anywhere else in the script. It's logical (and perfectly legal in PHP) to define B inside of A's definition, like so:

function A($inputArray)
{
   if (!function_exists('B'))
   {
     function B($item)
     {
           // Do something with $item
         // and return result
         return $result;
     }
   }
   foreach ($inputArray as $nextItem) $outputArray[] = B($nextItem);
   return $outputArray;   
}

Without the function_exists test, you would get a fatal error the second time you called A, as PHP would think you were trying to redefine B (not legal in PHP). The placement of the test is also important. Since the if block is executed sequentially, like any other block of code, it must come before any call to the function defined within.
@flop at escapesoft dot net@
06-Dec-2002 10:16
var_dump(function_exists(create_function('$a','return $a;')));
-> True :))) kweul

<func_num_argsget_defined_functions>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT