Проверьте, существует ли метод в том же классе

Так, method_exists() требует объекта, чтобы увидеть, существует ли метод. Но я хочу знать, существует ли метод из того же класса.

У меня есть метод, который обрабатывает некоторую информацию и может получить действие, которое запускает метод для дальнейшей обработки этой информации. Я хочу проверить, существует ли метод перед его вызовом. Как мне этого добиться?

Пример:

class Foo{
public function bar($info, $action = null){
//Process Info
$this->$action();
}
}

14

Решение

Вы можете сделать что-то вроде этого:

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

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

$obj = new A;
$obj->bar();
36

Другие решения

С помощью method_exists верно. Однако, если вы хотите соответствовать «Принципу разделения интерфейса», вы создадите интерфейс для выполнения самоанализа, например:

class A
{
public function doA()
{
if ($this instanceof X) {
$this->doX();
}

// statement
}
}

interface X
{
public function doX();
}

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

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

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

На мой взгляд, лучший способ — использовать магию __call.

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

Да, вы можете использовать method_exists ($ this …), но это внутренний путь PHP.

4

method_exists() принимает имя класса или экземпляр объекта в качестве параметра. Так что вы можете проверить $this

http://php.net/manual/en/function.method-exists.php

параметры

объект
Экземпляр объекта или имя класса

method_name
Название метода

3
По вопросам рекламы [email protected]