JackShcherbakov
@JackShcherbakov

Почему не получается перехватить ошибку в PHP?

Здравствуйте! Изучаю php 4-й день по книге Дэвида Скляра. Дошел до классов и индикации ошибок и решил написать вот такой код:
$usersCount= 0;
class User{

	public $name;
	public $age;
	public function __construct($name, $age){
		if($age>=100){
			throw new Exception('$age must be <100');
		}
		$this->age = $age;
		$this->name = $name;
		$GLOBALS[usersCount]+=1;
	}
	public function showAge(){
		print "Возвраст пользователя $this->name - $this->age<br>";
		
	}

	public static function showUsersCount(){
		print "Количество пользователей - $GLOBALS[usersCount]<br>";
	}

}
try{
	$bob = new User("Боб", 34);
	$bob->showAge();

	$jack = new User("Джек", 42);
	$jack->showAge();

	$maria = new User("Мария", 23);
	$maria->showAge();

	$mikle = new User("Майкл", 1312);
	$mikle->showAge();
}catch(Exeption $e){
	print "Error: " . $e->getMessage();
}
User::showUsersCount();

Если возвраст пользователся больше 100, то выбрасываем ошибку, которая будет прехвачена на уровне выше. Но почему-то ошибка прилетает сразу интрепретатору, а catch ничего не делает, хотя по плану, он должен выводить через print только сообщение об ошибке.
Вот, что выводится в браузере:
Возвраст пользователя Боб - 34
Возвраст пользователя Джек - 42
Возвраст пользователя Мария - 23

Fatal error: Uncaught Exception: $age must be <100 in C:\OpenServer\domains\asd\Untitled_1.php:45 Stack trace: #0 C:\OpenServer\domains\asd\Untitled_1.php(71): User->__construct('\xD0\x9C\xD0\xB0\xD0\xB9\xD0\xBA\xD0\xBB', 1312) #1 {main} thrown in C:\OpenServer\domains\asd\Untitled_1.php on line 45

А должно быть что-то вроде этого:

Возвраст пользователя Боб - 34
Возвраст пользователя Джек - 42
Возвраст пользователя Мария - 23
Error: $age must be <100
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
JackShcherbakov
@JackShcherbakov Автор вопроса
Решение найдено! Ошибка тут
/*...*/catch(Exeption $e)/*...*/
Должно быть:
<code>
/*...*/catch(Exception $e)/*...*/
</code>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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