У меня есть вопрос: как бросить новое исключение типа 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), оно работает правильно.
Как я могу сделать?
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();
}
Других решений пока нет …