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 函数错误和成功模式 的相关文章

  • 我在全局数组上设置的字段不会持续存在

    在我的 PHP 网页上 我有一个全局数组 test array 然后我调用这个函数 function f global test init test test foo Error undefined index foo 这又调用这个函数 f
  • PHP中用静态调用非静态方法

    我的代码如下所示 abstract class Object public static function callStatic name parameters object get called class object new obje
  • 如何从 AES 加密字符串添加/删除 PKCS7 填充?

    我正在尝试使用 128 位 AES 加密 ECB 来加密 解密字符串 我想知道如何添加 删除 PKCS7 填充 看起来 Mcrypt 扩展可以处理加密 解密 但必须手动添加 删除填充 有任何想法吗 让我们来看看 RFC 5652 加密消息语
  • Blade 中无法访问请求错误(Laravel 5.2)

    我已经使用 Laravel 好几个月了 但从未遇到过这样的问题 我创建了一个简单的 Request 类来验证更新用户请求 如果遵循验证规则 该请求可以正常工作 如果验证规则失败 我们应该返回上一页并在 html 中显示所有错误 根据我的说法
  • PHP SNMP - 找不到模块

    我已启用 SNMP 模块并尝试使用该模块中的功能 我已将 MIBDIRS 环境变量设置为我的 mib 所在的位置 但我仍然收到这些 找不到模块 警告 Cannot find module IP MIB At line 0 in none C
  • 重置密码 电子邮件

    我是 Laravel 开发新手 目前正在从事小型项目 我想自定义重置密码的电子邮件模板 甚至将其链接到完全不同的模板 对于身份验证脚手架 我使用了php artisan make auth命令 但是 默认重置密码功能使用默认的 Larave
  • 在 TinyMCE 中使用新的 iframe 嵌入代码嵌入 YouTube 视频

    我尝试使用旧的嵌入代码将 YouTube 视频添加到 TinyMCE 中 效果很好 一些用户可能没有意识到他们必须点击 YouTube 嵌入代码链接中的旧嵌入代码选项才能添加它 我想让用户变得更容易 并允许他们直接复制新的嵌入代码并将其粘贴
  • 如何在变量中存储包含哈希标记的完整 url?

    我正在尝试存储一个网址 例如 http localhost pro print index php page home http localhost pro print index php page home 在变量中 但我找不到执行此操作
  • 强制 nginx 立即关闭连接

    如何让nginx在请求完成后立即关闭tcp连接 我刚刚找到了解决方案 location ip keepalive timeout 0
  • JSON 为 foreach() 提供的参数无效

    我在从 JSON 检索数据时遇到一些问题 它总是说为 foreach 提供的参数无效 这是 url php 中的 JSON nama IT SERVICE SOLUTION nilai 0 periode 11 tahun 2014 nam
  • Blade @if 中的 Laravel 会话变量

    当我尝试使用 Laravel Session 在刀片中设置 JS 变量来刷新一些数据时 我在 Laravel 4 2 中遇到了一些奇怪的情况 这很简单 我不知道我错过了什么 目标 在用户注册后立即触发 Javascript 网站浏览 方法
  • array_udiff_assoc() 和 array_diff_uassoc() 有什么区别?

    有什么区别array udiff assoc and array diff uassoc For array udiff assoc 我有这个代码 function myfunction v1 v2 if v1 v2 return 0 re
  • 如何使用 PHP SDK 在 AWS SES 发送的电子邮件中实现 List-Unsubscribe 标头

    我尝试使用 AWS PHP SDK 添加自定义标头 以便可以实现 List unsubscribe 标头 问题是我找不到任何地方如何实现它 我已阅读文档但什么也没有 http docs aws amazon com aws sdk php
  • 覆盖默认标识符生成策略对关联没有影响

    交响乐 2 7 2 学说 ORM 2 4 7 MySQL 5 6 12 PHP 5 5 0 我有一个具有自定义 ID 生成器策略的实体 它工作完美 在某些情况下 我必须使用 手工制作 的 ID 来覆盖此策略 当主实体在没有关联的情况下被刷新
  • PHP 检查字符串是否只包含任何语言的字母、数字和空格

    我如何检查字符串是否只包含任何语言中的字母 数字和空格 我已经尝试过 但它不检查像 这样的特殊字符 preg match p L u string preg match p N u string 您可以使用 preg match p L p
  • 运行没有扩展名的 PHP 页面

    我想在 apache Web 服务器上运行我的 PHP 网页 而不需要 php扩大 所以我添加了以下代码 RewriteEngine on RewriteBase Rewritecond REQUEST URI NC RewriteRule
  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • 按通用值对值进行分组:userid 和 ipaddress

    我正在解决数据库中的一个问题 我正在尝试查找使用多个帐户的用户 我有一个用户 ID 和使用的 IP 地址的列表 如下所示 用户 ID IP 地址 1 IP 地址 13 2 IP 地址 23 1 IP 地址 12 4 IP地址56 9 IP
  • Smarty输出空白页

    已解决 模板文件错误 我有这样的 Smarty 设置 require once smarty Smarty class php smarty new Smarty smarty gt compile dir compile dir smar
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w

随机推荐

  • 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