Check if method exists in the same class

So, method_exists() requires an object to see if a method exists. But I want to know if a method exists from within the same class.

I have a method that process some info and can receive an action, that runs a method to further process that info. I want to check if the method exists before calling it. How can I achieve it?


class Foo{
    public function bar($info, $action = null){
        //Process Info

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

You can do something like this:

class A{
    public function foo(){
        echo "foo";

    public function bar(){
        if(method_exists($this, 'foo')){
            echo "method exists";
            echo "method does not exist";

$obj = new A;

Solution 2

Using method_exists is correct. However if you want to conform to the “Interface Segregation Principle”, you will create an interface to perform introspection against, like so:

class A
    public function doA()
        if ($this instanceof X) {

        // statement

interface X
    public function doX();

class B extends A implements X
    public function doX()
        // statement

$a = new A();
// Does A::doA() only

$b = new B();
// Does B::doX(), then remainder of A::doA()

Solution 3

method_exists() accepts either a class name or object instance as a parameter. So you could check against $this


An object instance or a class name

The method name

Solution 4

The best way in my opinion is to use __call magic method.

public function __call($name, $arguments)
    throw new Exception("Method {$name} is not supported.");

Yes, you can use method_exists($this …) but this is the internal PHP way.

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply