Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Class/Object Functions : method_exists

method_exists

Checks if the class method exists (PHP 4, PHP 5)
bool method_exists ( object object, string method_name )

Example 386. method_exists() example

<?php
$directory
= new Directory('.');
var_dump(method_exists($directory,'read'));
?>

The above example will output:

bool(true)

Example 387. Static method_exists() example

<?php
$directory
= new Directory('.');
var_dump(method_exists('Directory','read'));
?>

The above example will output:

bool(true)

Related Examples ( Source code ) » method_exists






Code Examples / Notes » method_exists

thomas@thbeckmann

Though, as Bejamin noted, it's not possible to use the class name in method_exists within the class definition, get_class_methods delivers the method names for a given class name even inside the class. Thus another workaround for the mentioned problem is to use in_array(<method_name>, get_class_methods(<class_name>))

daniel

Note that in PHP5, method_exists() will sucessfully find *private* methods. This has some OO/data-hiding ramifications.

04-dec-2006 10:14

Not (yet) mentioned in the docs: since PHP 5 the first argument may also be a string with the class name:
class foo {
function bar () {}
}
var_dump(method_exists('foo','bar'));
Will output bool(true) - however note that this won't work in PHP 4. When running PHP 4 this will output bool(false).
Tested with PHP 5.1 / PHP 4.3


seufert

Just a note that the behaviour of this function changed between version 5.0.x and 5.1.x when using static member functions
Using this code:
<?php
class a {
static function test() {return "A";}
}
if(method_exists('a','test'))
print call_user_func(array('a','test'));
else
print "Nothing";
?>
PHP 5.1.x returns "A"
PHP 5.0.x returns "Nothing"
Im not sure of a workaround for PHP 5.0.x yet.


benjamin_ansbach

if you want to check for a method "inside" of a class use:
method_exists($this, 'function_name')
i was a bit confused 'cause i thought i'm only able to check for a method when i got an object like $object_name = new class_name() with:
method_exists($object_name, 'method_name')
small example for those who didn't understood what i mean ( maybe caused by bad english :) ):
<?php
class a {
   function a() {

       if(method_exists($this, 'test'))
           echo 'a::test() exists!';
       else
           echo 'a::test() doesn\'t exists';
   }

   function test() {

       return true;

   }
}
$b = new a();
?>
the output will be: a::test() exists!
maybe this will help someone


j dot metzger

call_user_method uses the same mechanism as a normal method call. So you can get the returned values as well in this way.
$pagetext=call_user_method($method,$object_call);
All information is then in $pagetext.


spam

Both method_exists() and is_callable() return private and protected functions, which, as mentioned below, causes problems for PHP5/OO programming.  You can use get_class_methods() with either an $instance of a class or the 'ClassName' to get only public functions.

jp

As mentioned before, is_callable and method_exists report all methods callable even if they are private/protected and thus actually not callable. So instead of those functions you may use following work-around which reports methods as supposed to.
<?php
class Foo1 {
 public function bar() {
   echo "I'm private Foo1::bar()";
 }
}
class Foo2 {
 private function bar() {
   echo "I'm public Foo2::bar()";
 }
}
$f1=new Foo1;
$f2=new Foo2;
if(is_callable(array($f1,"bar"))) {
echo "Foo1::bar() is callable";
} else {
echo "Foo1::bar() isn't callable";
}
if(is_callable(array($f2,"bar"))) {
echo "Foo2::bar() is callable";
} else {
echo "Foo2::bar() isn't callable";
}
if(in_array("bar",get_class_methods($f1))) {
echo "Foo1::bar() is callable";
} else {
echo "Foo1::bar() isn't callable";
}
if(in_array("bar",get_class_methods($f2))) {
echo "Foo2::bar() is callable";
} else {
echo "Foo2::bar() isn't callable";
}
?>
output
Foo1::bar() is callable (correct)
Foo2::bar() is callable (incorrect)
Foo1::bar() is callable (correct)
Foo2::bar() isn't callable (correct)
?>


jpgiot

a little difference :
to find a method of an object (instance of a class)
<?php
if (method_exists($myinstance,'themethod'))
   echo 'ok';
?>
to find a method of a class (using the class name, not the instance of the class!)
<?php
if (is_callable(array('theclassname','themethod')))
   echo 'ok';
?>


Change Language


Follow Navioo On Twitter
call_user_method_array
call_user_method
class_exists
get_class_methods
get_class_vars
get_class
get_declared_classes
get_declared_interfaces
get_object_vars
get_parent_class
interface_exists
is_a
is_subclass_of
method_exists
property_exists
eXTReMe Tracker