PHP 函数错误和成功模式

2024-02-13

当函数正常执行时,从 PHP 函数返回错误的最佳方法是什么?

Example

public function login($user, $pw){
     if(!$this->verifyUser($user))
         // return error about invalid user
     }
     else if (!$this->verifyPw($pw)){
        // return error about invalid pw
     }
     else {
         // return OK
     }
}

调用者 - 以 JSON 形式返回 Web UI 的响应

public function doLogin($user,$pw){
    $res = $this->login($user, $pw);
    return json_encode($res);
}

一方面,我可以理解以数组形式返回结果,但我觉得这对于如此低级的函数没有意义。也许他们应该返回错误代码,然后调用者必须查找错误代码字符串?


假设你在一个对象中,你基本上有三个主要选择:

  • 将错误存储在类似的内容中$this->errors数组并返回false
  • 有某种错误收集器作为对象的依赖项,您可以在其中
    call $this->collector->addError('blah blah');并返回false
  • 抛出异常

对于前两种方法,您必须检查返回值,并基于此提取错误列表。但这两个选项的优点是能够收集多个错误。

异常方法在耦合上稍微轻一些,但你只能得到one error.

至于实际返回什么,我建议使用错误代码+描述字符串。但是您的班级不会返回该字符串。相反,您的错误应该使用一些“占位符”来注册,稍后将被翻译:

$this->errors[] = [
    'code' => 52, 
    'msg' => 'authentication.login.invalid-password',
];

当您从对象中提取错误时,它基本上会是这样的条目列表,然后您只需通过翻译服务运行它们即可。

在例外情况下,相同的信息将驻留在$e->getCode() and $e->getMessage(),当你的对象抛出InvalidPassword例外。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 函数错误和成功模式 的相关文章

  • Mysql 将 --secure-file-priv 选项设置为 NULL

    我在 Ubuntu 中运行 MySQL 我在运行特定的查询集时收到此错误 MySQL 服务器正在使用 secure file priv 选项运行 因此无法执行此语句 当我这样做的时候SELECT secure file priv 在我的 m
  • 将 #RRGGBB 十六进制值转换为 #AARRGGBB

    414141 与 AARRGGBB 的值是什么 52b531 又如何 我如何使用 PHP 转换它 Regards 奔腾10 AA 是 Alpha 通道 直接转换是将 AA 设置为 FF 以使其完全不透明 414141 becomes FF4
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • 禁用外部点击时关闭模式

    我正在制作一些使用模式的博客物质化 但我的模态 onclick 外部和错误数据有问题 这是我的代码 main js function changepassword var user userlog val var content conte
  • 使用 PHP 更新 XML 节点

    我有一个 XML 文件 test xml
  • 查明具有特定 ID 的会话是否已过期

    我正在创建一个上传功能 将用户上传的文件存储在服务器上 并以用户的会话 ID 作为名称 现在 我只想将此文件保留在服务器上 直到该会话处于活动状态 所以 我的问题是 如何根据会话 ID 确定会话是活动的还是过期的 以便在后一种情况下我可以安
  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • 在 mysqli 准备好的语句程序风格中获取最后插入的 id 的正确方法是什么?

    我正在使用 mysqli 准备好的语句在表中插入记录 如下所示 link mysqli connect localhost my user my password world check connection if link printf
  • localhost/live - 通过 HTTP_HOST 检测

    假设我在本地开发并在实时服务器上调试小东西 在我的代码中添加这样的内容是个好主意吗 is local strpos SERVER HTTP HOST localhost false define DEBUG is local 然后在设置内容
  • 在 PHP 中将整数转换为十六进制值

    如何将PHP中第一类中的数字转换为第二类中的数字 是否有内置函数来转换数字 也是我的标题 将整数转换为十六进制值 甚至正确 class Permission const READ 1 const UPDATE 2 const DELETE
  • ASP.NET MVC 3 中嵌入的 PHP 站点的 IgnoreRoute

    我有一个带有嵌入式 WordPress 博客的 MVC 3 网站 以下所有 url 均通过 MVC 定向 www mysite com www mysite com aboutus www mysite com contactus 我还有一
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • 2 使用我的代码在数组中查询

    我使用滑块来显示我的 WordPress 精选文章 它选择一个自定义类别并返回一定数量的帖子 如何将显示的第一篇帖子设为自定义帖子 我可以直接在滑块代码中添加特定帖子的 ID吗使该帖子首先出现 然后是原始查询返回的其他内容 例如 在页面上
  • 创建单个随机 Magento 优惠券

    我遇到了一些麻烦 我想要做的是每次有人订阅我们的时事通讯时 在 Magento 中自动生成一个随机优惠券代码 这张优惠券可减 10 美元 并且有exp 订阅后两周的日期 因此 我正在尝试编写一个简单的脚本 当提交 订阅我们的时事通讯 表单时
  • sqlite3和pdo_sqlite有什么区别

    我正在将我的 Web 应用程序从 MySQL 迁移到 SQLite 数据库 我发现有两个 PHP 扩展用于与 sqlite 通信 php sqlite3 dll and php pdo sqlite dll 什么扩展比较好 或者另一个问题
  • Mysql加密/存储敏感数据,

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht
  • 使用 Swift 邮件程序发送邮件时出现错误 501

  • Google Drive 服务帐户上传的位置

    我正在尝试使用服务帐户将文件上传到我的 Google 云端硬盘 当我部署此代码时 我不希望用户给予授权 我希望他们上传到我的帐户 我通过 PHP 使用它 下面是我到目前为止的情况 这段代码是基于官方文档给出的例子 当我运行 php 脚本时
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • asp.net mvc4 无法从 json 正确反序列化和绑定 Dictionary>

    JSON NET 反序列化它很好 但是无论 mvc 用于控制器参数绑定的是什么 都很难 我还可以做其他事情来完成这项工作吗 位 public partial class Question public Dictionary
  • enable_if 中的短路运算符

    我想编写一个模板化函数 它需要一个array
  • 使用 Tweepy 避免 Twitter API 限制

    我在 Stack Exchange 上的一些问题中看到 限制可能是每 15 分钟请求数量的函数 并且还取决于算法的复杂性 只不过这不是一个复杂的算法 所以我使用这段代码 import tweepy import sqlite3 import
  • 文档 [my_spreadsheet_id] 丢失(也许已被删除?)

    偶尔 实际上经常发生 我会收到 文档 tIbdnvK2ZBY 7SQ2skESDvg 丢失 也许它已被删除 错误 这显然不是真的 谁能解释一下这个问题吗 也许有一些好的解决方案 我有一些在计时器上运行的脚本 偶尔会出现此错误 当脚本尝试访问
  • 验证 Oracle 列名称

    在一种情况下 我们动态创建 sql 来create动态临时表 table name 没有问题 因为它是由我们决定的 但是列名是由不在我们控制范围内的源提供的 通常我们会使用以下查询检查列名称 select where NOT REGEXP
  • 在 Java 中解压包含多个文件和目录的 7zip 存档 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想用 Java 解压包含多个文件和目录的 7zip lzma 存档 我尝试使用官方的 7zip SDK 但失败了 因为
  • CSS 容器DIv 高度。浮动DIV问题

    你能强制一个容器 DIV 的高度来容纳两个浮动的 div 子元素吗 我可以用一个奇特的技巧来做到这一点吗 我正在尝试在父 div 内制作两个大小相等的 div 我希望它们并排出现 并且它们之间有一点空白 Child2 往往会弹出并低于 Ch
  • 需要在github actions中设置环境

    每次工作流程运行时 我都需要安装几个 cli 这会在安装 构建和发布包方面占用大量时间 有哪些好的替代方案可以摆脱每次安装 要扩展 joseph 的答案 请创建一个 Docker 映像 该映像使用您需要的 CLI 工具准备环境 然后将其发布
  • 为什么工厂女孩不排序独特的属性?

    我的控制器规范失败 因为 Factory Girl 似乎正在创建非唯一的用户 即使我对需要唯一的用户属性进行了排序 错误 1 TopicsController POST create when topic is invalid should
  • Google Play - 为现有用户更新未发布的应用程序,但不为新用户更新?

    我在 Google Play 上有一个未发布的应用程序 我想为现有用户更新该应用程序 但不允许新用户下载它 Google Play 文档似乎说这可以通过简单地上传更新的 apk 而不是重新发布应用程序 来完成 未发布的应用程序 即使您取消发
  • git 如何知道它在 git 存储库中

    我感兴趣的是如何git实际上知道它在 git 存储库中 我的第一个想法是它只是将文件夹结构爬到根目录 这可能涉及权限错误 它在任何地方都有记录吗 经验法则是 Git 只是查找文件路径来查找 git 目录 但事实并非如此 正如爱德华 汤姆森所
  • c#:如何将exe文件嵌入到资源中?

    我用 Costura Fody 有一个应用程序 Test exe 它以这种方式运行进程internalTest exe ProcessStartInfo prcInfo new ProcessStartInfo strpath Create
  • 与其他顶级类同名的 Java 内部类

    我有与 Java 内部类相关的问题 有没有办法从定义内部类 A 的顶级类 Main 访问顶级类 A 下面是演示该问题的示例代码 class A Outer Class A System out println A outer class B
  • 找到多个集合的交集的最佳方法?

    我有一个集合列表 setlist s1 s2 s3 我想要 s1 s2 s3 我可以编写一个函数来通过执行一系列成对的操作来完成此操作s1 intersection s2 etc 有推荐的 更好的或内置的方法吗 从 Python 2 6 版
  • Python 安装程序在初始化步骤被阻止

    我试图使用安装程序在我的计算机上安装Python3 6 但安装程序在初始化步骤被阻止 我想知道为什么会发生这种情况 我也尝试了Python2 7 但它也在同一个地方被阻止 它在这里被阻止 取消选中为所有用户安装的选项 这为我排序了
  • 在 Swift 中以编程方式返回到之前的 ViewController

    我通过单击按钮将用户发送到页面 该页面是一个UITableViewController 现在 如果用户点击某个单元格 我想将他推回到上一页 我想到了类似的事情self performSegue back 但这似乎是一个坏主意 正确的做法是什
  • CreateProcessAsUser 不绘制 GUI

    我有一个在 SYSTEM 帐户下运行的 Windows 服务 用于检查每个登录用户是否正在运行特定的应用程序 如果应用程序未运行 服务将启动它 在相应的用户名下 我正在尝试使用 CreateProcessAsUser 来实现我的目标 该服务
  • 在数据表中正确渲染迷你图

    在下面发布的示例中 我尝试将 jquery sparkline 库中的迷你图渲染为 jquery dataTables 表中的数据列 加载下面的示例效果很好 但仅限于第一页 如果我单击 下一步 而不是将数据呈现为迷你图 它只会呈现数字 如果
  • Apache 背后的代理 React 服务器

    我刚刚使用 create react app 创建了一个 React 应用程序 该应用程序从端口 3000 启动 很好 我想使用前缀访问应用程序 在我的例子中是 node 和端口 80 即http localhost 节点 http loc
  • PHP 函数错误和成功模式

    当函数正常执行时 从 PHP 函数返回错误的最佳方法是什么 Example public function login user pw if this gt verifyUser user return error about invali