исключение — генерировать новое исключение NullPointerException в переполнении стека

У меня есть вопрос: как бросить новое исключение типа NullPointer в PHP?

Я хочу сделать что-то вроде этого (в моем файле TryException.php):

public function getValue($stringKey) {
if($this->result[$yellow] !== NULL)
{
return $this->result[$yellow];
}
else
{
throw new NullPointerException("The \"$yellow\" does not exist");
}
}

Но когда я ловлю исключение NullPointerException (в файле main.php), я не могу этого сделать (он не идет в операторе catch):

try
{
$config->getValue('arcshive')
echo 'ok';
}
catch (NullPointerException $e)
{
echo $e->getMessage();
}

Если я выбрасываю новое Исключение (и ловлю его) (не NullPointer), оно работает правильно.

Как я могу сделать?

0

Решение

NullPointerException — это ваш собственный класс, расширяющий класс PHP Exception? Если это так, это должно работать.

$var = null;

try {
if ($var !== NULL) {
echo 'return $this->result[$yellow]';
}
else {
throw new NullPointerException('The $var does not exist');
}
} catch (NullPointerException $e) {
echo $e->getMessage();
}

Я сделал некоторые исправления в вашем коде (имена переменных, ограничители кода), с использованием стандартного исключения он работает как положено:

<?php

class Config
{
private $result;

public function getValue($stringKey)
{
if (isset($this->result[$stringKey])) {
return $this->result[$stringKey];
}
else {
throw new Exception("The \"$stringKey\" does not exist");
}
}
}

$config = new Config();
try {
$config->getValue('arcshive');
echo 'ok';
}
catch (Exception $e) {
echo $e->getMessage();
}

Или вы добавляете недостающее NullPointerException учебный класс:

<?php

class NullPointerException extends Exception
{
public function __construct(string $message = "", int $code = 0, \Throwable $previous = null) {
parent::__construct('NullPointerException: '.$message, $code, $previous);
}
}

class Config
{
private $result;

public function getValue($stringKey)
{
if (isset($this->result[$stringKey])) {
return $this->result[$stringKey];
}
else {
throw new NullPointerException("The \"$stringKey\" does not exist");
}
}
}

$config = new Config();
try {
$config->getValue('arcshive');
echo 'ok';
}
catch (NullPointerException $e) {
echo $e->getMessage();
}
1

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

Других решений пока нет …

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