downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

get_class_vars> <get_called_class
Last updated: Fri, 13 Nov 2009

view this page in

get_class_methods

(PHP 4, PHP 5)

get_class_methodsクラスメソッドの名前を取得する

説明

array get_class_methods ( mixed $class_name )

クラスメソッドの名前を取得します。

パラメータ

class_name

オブジェクトのインスタンスのクラス名。

返り値

この関数は、指定したクラス class_name についてメソッドの名前を配列として返します。 エラー時には NULL を返します。

変更履歴

バージョン 説明
5.0.0 PHP 5 以降、この関数は宣言されているままのメソッド名 (大文字小文字を区別) を返します。PHP 4 では、小文字で返されます。
4.0.6 オブジェクト自身を指定することが可能となりました。

例1 get_class_methods() の例

<?php

class myclass {
    
// コンストラクタ
    
function myclass()
    {
        return(
true);
    }

    
// メソッド1
    
function myfunc1()
    {
        return(
true);
    }

    
// メソッド2
    
function myfunc2()
    {
        return(
true);
    }
}

$class_methods get_class_methods('myclass');
// あるいは
$class_methods get_class_methods(new myclass());

foreach (
$class_methods as $method_name) {
    echo 
"$method_name\n";
}

?>

上の例の出力は以下となります。

myclass
myfunc1
myfunc2

参考



get_class_vars> <get_called_class
Last updated: Fri, 13 Nov 2009
 
add a note add a note User Contributed Notes
get_class_methods
James Laver
15-Dec-2007 12:39
I have a situation with a superclass using get_class_methods() on a child and it's returning protected methods of the parent.

I thought people should be aware of this since it's forcing me to go use the reflection system instead.
php at stock-consulting dot com
06-Feb-2007 07:40
Note that this function will answer both class AND instance methods ("class methods" are called "static" in PHP). Sort of a little "trap" for people who have in-depth experience with the OO terminology :-)
BoD
16-Mar-2006 12:09
!Concerning PHP5 Only!

If you want to get all methods/functions from a class you can do this with the get_class_methods function.
<?php
    $arrMethodNames
= get_class_methods ( $ClassNameOrObject);
?>
However the drawback on this function in PHP5 is that you will NOT receive protected and private methods of a class/object if you are calling the method from another class/object context.

If you want to receive all methods of a given Class in another Class you should use the PHP5 Reflection API. The following source allows to retrieve all methods from a derived class in its (abstract) Base Class.

In the example you need to call the base constructor from the derived classes constructor in order to let the base class know the name of the derived class. Use the "__CLASS__" definition for passing the classname of current class to its base class.

<?php

   
// Base Class - Abstract
   
abstract class A {
       
       
// Array of ReflectionMethod Objects
        // is being set upon instanciation
        // derived Classes don't need to know about this array
       
private $arrMethods;
               
       
// Constructor which MUST be called from derived Class Constructor
       
protected function __construct ( $strDerivedClassName ) {
           
$oRefl = new ReflectionClass ( $strDerivedClassName );
            if (
is_object($oRefl) ) {
               
$this->arrMethods = $oRefl->getMethods();
            }
        }
       
       
// Some abstract function
       
abstract protected function D ();
       
       
// Some private function
       
private function E() {
        }
       
       
// method to print all class/object methods
        // must be callable from derived classes
        // can be protected if only for internal class use
       
public function PrintAllMethods () {
            foreach (
$this->arrMethods as $curReflectionMethod ) {
                echo
$curReflectionMethod->getName()."<br>";
            }
        }
    }
   
   
   
// Derived Class
   
class B extends A {
       
       
// Constructor for this class
        // MUST call Base Constructor
       
public function __construct () {
           
// Call Base Constructor
           
parent::__construct(__CLASS__);
        }
       
       
       
// Some public function
       
public function A () {
        }
       
       
// some protected function
       
protected function B () {
        }
       
       
// some private function
       
private function C() {
        }
       
       
// some abstract method from base class implemented
       
protected function D () {
        }
    }
   
   
   
// Create new B Object
   
$b = new B();
   
// Print all Methods of this Object/Class
   
$b->PrintAllMethods();
?>

In this example output will be:

__construct
A
B
C
D
E
PrintAllMethods

As you can see these are all methods from class B and also all methods from Class A respectivly in order of their declaration. Note that only one method "__construct" and only one method "D" are being shown. This is due to overloading (__construct) and implementing (D) in PHP.

In this example any further method-handling methods should be implemented in the base class as these will be available in derived classes as well. Just make sure that you use the right access specifiers for these additional methods ( private, protected, public )

BoD
jazepstein at greenash dot net dot au
16-Oct-2005 10:37
In PHP4, this function converts its return values to lowercase; but in PHP5, it leaves the return values in their original case. This can cause serious problems when trying to write code that dynamically calls a class method, and that works in both PHP4 and PHP5. This code snippet shows one way of achieving compatibility with both versions:

<?php
// Example variables - these would be dynamic in a real application.
$className = 'SomeClass';
$methodName= 'someMethod';
$args = array('arg1', 'arg2');

// Use array_map() and strtolower() to make all values returned by get_class_methods() lowercase. PHP4 does this anyway - now it will happen regardless of the PHP version being used.
$classMethods = array_map(strtolower, get_class_methods($className));

// in_array() can only handle being given an array.
if (!$classMethods) {
 
$classMethods = array();
}

if (
in_array(strtolower($methodName), $classMethods)) {
 
// call some method
 
return call_user_func_array(array($className, $methodName), $args);
}
?>
Bill Kuker
20-Jul-2005 11:26
Contrary to a note below this method seems to exclude private and protected functions.
Oli Filth
12-Apr-2005 12:21
As an extension to onesimus's code below for finding inherited methods, in PHP 5 you can use the Reflection API to find which of these are overriden.

e.g.

<?php
function get_overriden_methods($class)
{
   
$rClass = new ReflectionClass($class);
   
$array = NULL;
       
    foreach (
$rClass->getMethods() as $rMethod)
    {
        try
        {
           
// attempt to find method in parent class
           
new ReflectionMethod($rClass->getParentClass()->getName(),
                               
$rMethod->getName());
           
// check whether method is explicitly defined in this class
           
if ($rMethod->getDeclaringClass()->getName()
                ==
$rClass->getName())
            {
               
// if so, then it is overriden, so add to array
               
$array[] .=  $rMethod->getName();
            }
        }
        catch (
exception $e)
        {   
/* was not in parent class! */    }
    }
   
    return
$array;
}
?>
kabatak
20-Feb-2005 10:11
In PHP4, if you need to get_class_methods in their original case. You can use this simple function I created.

// Note: this function assumes that you only have 1 class in 1 file

$file = "path/to/myclass.php"

function file_get_class_methods ($file)
{
    $arr = file($file);
    foreach ($arr as $line)
    {
        if (ereg ('function ([_A-Za-z0-9]+)', $line, $regs))
            $arr_methods[] = $regs[1];
    }
    return $arr_methods;
}
epowell at removethis dot visi dot com
12-Oct-2004 12:47
I've figured out how to get around my issue described below, using the Reflection API.

<?
/* Pass the name of the class, not a declared handler */
function get_public_methods($className) {
   
/* Init the return array */
   
$returnArray = array();

   
/* Iterate through each method in the class */
   
foreach (get_class_methods($className) as $method) {

       
/* Get a reflection object for the class method */
       
$reflect = new ReflectionMethod($className, $method);

       
/* For private, use isPrivate().  For protected, use isProtected() */
        /* See the Reflection API documentation for more definitions */
       
if($reflect->isPublic()) {
           
/* The method is one we're looking for, push it onto the return array */
           
array_push($returnArray,$method);
        }
    }

   
/* return the array to the caller */
   
return $returnArray;
}
?>
onesimus at cox dot net
19-Jun-2004 06:32
This function will return only the methods for the object you indicate. It will strip out the inherited methods.

function get_this_class_methods($class){
    $array1 = get_class_methods($class);
    if($parent_class = get_parent_class($class)){
        $array2 = get_class_methods($parent_class);
        $array3 = array_diff($array1, $array2);
    }else{
        $array3 = $array1;
    }
    return($array3);
}
gk at proliberty dot com
02-Jun-2003 08:16
It is important to note that get_class_methods($class) returns not only methods defined by $class but also the inherited methods.

There does not appear to be any PHP function to determine which methods are inherited and which are defined explicitly by a class.
aldo at cerca dot com
22-Apr-2002 02:18
If you use "get_class_methods" to check if a Method is in a Class remember that the function return lowered name of class methods:

class classPippo
{
        function DummyFunct()
        {
                // Do nothing...
        }
}

$aClassMethods = get_class_methods(classPippo);

$sMethodName = 'DummyFunct';

// This not work...

        if (in_array($sMethodName, $aClassMethods))
        classPippo::DummyFunct();

// This work...

        if (in_array(strtolower($sMethodName), $aClassMethods))
        classPippo::DummyFunct();
matt at zevi dot net
22-Mar-2002 09:46
Win32 only:

It's probably worth noting here that you can't get the methods of an object created by the built-in 'COM' class. ie - this won't work:

$word = new COM('Word.Application');
$methods = get_class_methods(get_class($word));
print_r($methods);

Matt

get_class_vars> <get_called_class
Last updated: Fri, 13 Nov 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites