提问人:Yokke 提问时间:7/12/2023 最后编辑:rozsazoltanYokke 更新时间:7/17/2023 访问量:62
为什么找不到子异常?
Why child exception is not found?
问:
我有一个子异常,它继承了他的父级,扩展到 Exception 类:
namespace Exceptions;
use Exception;
class InvalidFieldException extends Exception
{
}
class UsernameWrongFormatException extends InvalidFieldException
{
const USERNAME_MESSAGE_ERROR_WRONG_FORMAT = "Oops ! Merci de suivre le format ci-dessous pour votre nom d'utilisateur !";
}
namespace Controller;
use Model\User;
use Model\UserModel;
use Enumeration\UserType;
// use Exceptions\EmptyFieldException;
use Exceptions\FileTypeException;
use Exceptions\InvalidFieldException;
use Exceptions\UsernameWrongFormatException;
// use Exceptions\InvalidFieldException;
使用异常的控制器:
readonly class UserController
{
public function __construct(private User $user)
{
}
public function handleUsernameField(string $username)
{
$userRegex = "/^[A-Z][A-Za-z\d]{2,10}$/";
if (!empty($username)) {
if (preg_match($userRegex, $username)) {
return ["username" => $username];
}
header("HTTP/1.1 400");
throw new UsernameWrongFormatException();
}
header("HTTP/1.1 400");
// throw new
EmptyFieldException(
EmptyFieldException::USERNAME_MESSAGE_ERROR_EMPTY
);
}
}
我正在使用 index.php 文件中的一个条件来检查引发了哪个异常,但我仍然不明白为什么没有任何工作:
switch ($action) {
case "sign_up":
try {
$template = "sign_up.twig";
$paramaters["message"] = $userController->signUpValidator(
$_POST['username'],
// $_FILES['profile_image'],
// $_POST["mail"],
// $_POST["password"]
);
} catch (InvalidFieldException $e) {
if ($e instanceof UsernameWrongFormatException){
$paramaters["username_wrong_format_error"] = UsernameWrongFormatException::USERNAME_MESSAGE_ERROR_WRONG_FORMAT;
}
elseif ($e instanceof FileTypeException) {
$paramaters["file_type_error"] = FileTypeException::FILE_MESSAGE_ERROR_TYPE_FILE;
}
}
break;
我错过了什么吗?我从例外开始。
对不起,我在这里添加了更多细节,就像我说的,如果我使用父异常,一切正常,但这不是我的目标,因为我有许多继承父异常的异常,允许我检查哪些异常被抛出,这要归功于 instanceof 属性。index.php
PHP 似乎根本无法识别子类,我不明白为什么,因为当我单击命名空间时,它会将我带到正确的命名空间,让我认为 vscode 的作曲家知道类在哪里
答:
-1赞
Yokke
7/17/2023
#1
我没有找到比为每个异常创建一个文件并在它们自己的 catch 块中捕获它们更好的解决方案
评论
I thought perhaps its because I have too many class in one file
...不,没有限制。PHP不在乎你的文件有多大,我不知道你从哪里得到这个想法。即使 PSR 中有一些关于它的指导,PHP 也不会强制执行这些规则。PSR 只是一组建议,以帮助使您的代码更有条理和可读性,它不是 PHP 关心的规则。