Hi,
Here is a useful function that you can use to check classes methods access e.g whether it is public, private or static or both..
here it goes:
<?php
// Example class
class myClass {
private $private1;
static $static1;
public $public1;
public function publ() {
}
private function priv() {
}
private static function privstatic() {
}
public static function publstatic() {
}
static function mytest() {
}
}
// The function uses the reflection class that is built into PHP!!!
// The purpose is to determine the type of a certain method that exi
function is_class_method($type="public", $method, $class) {
// $type = mb_strtolower($type);
$refl = new ReflectionMethod($class, $method);
switch($type) {
case "static":
return $refl->isStatic();
break;
case "public":
return $refl->isPublic();
break;
case "private":
return $refl->isPrivate();
break;
}
}
var_dump(is_class_method("static", "privstatic", "myClass")); // true - the method is private and also static..
var_dump(is_class_method("private", "privstatic", "myClass")); // true - the method is private and also static..
var_dump(is_class_method("private", "publstatic", "myClass")); // False the methos is public and also static not private
// you get the idea.. I hope this helps someone..
?>
method_exists
(PHP 4, PHP 5)
method_exists — Checks if the class method exists
Description
Checks if the class method exists in the given object .
Parameters
- object
-
An object instance or a class name
- method_name
-
The method name
Return Values
Returns TRUE if the method given by method_name has been defined for the given object , FALSE otherwise.
Examples
Example #1 method_exists() example
<?php
$directory = new Directory('.');
var_dump(method_exists($directory,'read'));
?>
The above example will output:
bool(true)
Example #2 Static method_exists() example
<?php
var_dump(method_exists('Directory','read'));
?>
The above example will output:
bool(true)
See Also
- function_exists() - Return TRUE if the given function has been defined
- is_callable() - Verify that the contents of a variable can be called as a function
method_exists
admin ( at ) djokodonev dot com
17-Oct-2009 08:30
17-Oct-2009 08:30
florin from syneto net
07-Oct-2009 11:34
07-Oct-2009 11:34
This function is case-insensitive (as is PHP) and here is the proof:
<?php
class A {
public function FUNC() { echo '*****'; }
}
$a = new A();
$a->func(); // *****
var_dump(method_exists($a, 'func')); // bool(true)
?>
jp at function dot fi
30-Apr-2006 06:29
30-Apr-2006 06:29
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)
?>
seufert at gmail dot com
27-Apr-2006 10:27
27-Apr-2006 10:27
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.
spam at majiclab dot com
01-Feb-2006 01:33
01-Feb-2006 01:33
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.
daniel at softel dot jp
10-Jan-2006 12:34
10-Jan-2006 12:34
Note that in PHP5, method_exists() will sucessfully find *private* methods. This has some OO/data-hiding ramifications.
jpgiot at nospam ifrance.com
06-May-2004 11:42
06-May-2004 11:42
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';
?>
Thomas@ThBeckmann
01-Feb-2003 06:47
01-Feb-2003 06:47
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>))
benjamin_ansbach at web dot de
28-Dec-2002 05:49
28-Dec-2002 05:49
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 at steptown dot com
16-Jan-2002 08:42
16-Jan-2002 08:42
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.
