Задать вопрос

Как обработать исключение вызов несуществующего метода класса в 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();
}
?>


С Уважением,
Алмик
  • Вопрос задан
  • 3402 просмотра
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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?
Ответ написан
Ваш ответ на вопрос

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

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