|
method_exists
Checks if the class method exists
(PHP 4, PHP 5)
Example 386. method_exists() example<?php The above example will output: bool(true) Example 387. Static method_exists() example<?php The above example will output: bool(true) Related Examples ( Source code ) » method_exists Examples ( Source code ) » Define class as constructor parameter Examples ( Source code ) » Properties get Demo Examples ( Source code ) » method_exists Examples ( Source code ) » Define class helper class to check the method existance Examples ( Source code ) » __call Code Examples / Notes » method_existsthomas@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'; ?> |