Как обработать исключение вызов несуществующего метода класса в php?

Здравствуйте!

Есть простой класс Hello, я вызываю не существующий метод remember(), как можно обработать ошибки такого рода?
Хотя я и поставил try блок , ничего не получается все равно получаю предупреждение .
E_ERROR : type 1 -- Call to undefined method Hello::remember() -- at line 17

<?php
class Hello{
	private $word;
	function __construct($word = "World"){
		$this->word = $word;
	}
	
	public function say(){
		echo "Hello ".$this->word;
	}
}

$f = new Hello();
$f->say();

try{
	$f->remember('My Friend'); // method doest exist
	$f->say();
}catch(Exception $e){
	$f = new Hello('My Friend');
	$f->say();
}
?>


С Уважением,
Алмик
  • Вопрос задан
  • 3350 просмотров
Решения вопроса 1
это не исключение, а фатальная ошибка.
соответственно перехватить нельзя.
либо проверять на method_exists, либо запилить волшебный метод __call и обрабатывать то что надо в нем.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
miraage
@miraage
Старый прогер
Читайте про магические методы.

class Foo
{
	public function bar()
	{
		var_dump('Foo::bar()');
	}
	
	public function __call($method, $args)
	{
		var_dump($method, $args);
	}
}

$foo = new Foo();
$foo->bar();
$foo->baz();
$foo->baz(true, 1);


string(10) "Foo::bar()"

string(3) "baz"
array(0) {
}

string(3) "baz"
array(2) {
  [0]=>
  bool(true)
  [1]=>
  int(1)
}
Ответ написан
Комментировать
jimkakain
@jimkakain
PHP/Android developer
class Hello
{
// ...
    public function __call($name, $args)
    {
        $methods = get_class_methods($this);
        if (!in_array($name, $methods)) throw new BadMethodCallException("Method $name not found.");
    }
}

try {
    $f->remember('My Friend'); // method doest exist
    $f->say();
} catch(Exception $e) {
    die($e->getMessage());
}


php.net/BadMethodCallException
И лучше использовать Reflection.
Ответ написан
@IceJOKER
Web/Android developer
ClassNotFoundException?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы