PDO::FETCH_CLASS 具有多个类

2024-01-20

我正在尝试将查询结果转换为类。

$result->setFetchMode(PDO::FETCH_CLASS, 'myclass', array());

这工作得很好,但是类名myclass取决于列值。

是否可以获取每一行并根据行值将其转换为不同的类?


用户示例:

ID # name # age
1  # jon  # 12
2  # sue  # 23
3  # tom  # 24

我想让所有年龄小于 21 岁的用户成为该类的实例child。 年龄为 21 岁及以上的行应该是该类的实例adult.

所以“乔恩”应该是一个实例child。 “sue”和“tom”应该是实例adult.


由于在执行查询之前您不知道返回对象的类型(类名),因此无法指定它。

但是,您可以将该逻辑封装在用作返回类型的另一种类型中,然后该类型可以返回特定的返回类型:

/**
 * Should not have any private, public or protected members in it's definition.
 * 
 * Does only work for public properties.
 */
class ReturnObject {
    public function getConcrete()
    {
        /* decide here which class */
       $classname = 'Child'; // or 'Adult'

       return $this->selfAs($classname);
    }

    private function selfAs($classname)
    {
        $l = strlen(__CLASS__);
        $s = sprintf('O:%d:"%s"', strlen($classname), $classname).substr(serialize($this), 5+strlen($l)+$l);
        $instance = unserialize($s);
        $instance->__construct();
        return $instance;
    }
}

然后您可以使用getConcrete()函数对每个返回的对象返回您的特定类型,将您的决策逻辑绑定到数据库返回。

Edit:我将其更改为首先通过反序列化初始化对象属性的版本(请测试这是否有效,它基于我们仅讨论公共属性的假设,我不知道 PDO 是否只执行设置器或更多操作通过您正在使用的模式中的反射),然后调用构造函数。构造函数需要是公共的(并且它必须存在)才能起作用。

从技术上讲,也可以将其提供给私有成员和受保护成员,但这需要真正的反思,并且还需要解析序列化数据。该类仅重命名类名,但不会重命名私有属性内部。

然而,这只是这样做的一种方法。你可能只需要一个->isChild() or ->isAdult()功能在你的Person class.

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

PDO::FETCH_CLASS 具有多个类 的相关文章

  • 根据选择值显示/隐藏字段

    我试图根据我选择的字段之一的值显示和隐藏一些表单字段 我希望使用数组来保存每个选择值应该显示的内容和不应该显示的内容 以将我从大量的 switch 语句中拯救出来 但无法弄清楚如何做到这一点 我正在使用 PHP 和 jQuery 任何帮助都
  • 如何发布数组多维角度js

    我在 angularjs 中有一个数组 示例如下 scope order qty 20 scope order adress Bekasi scope order city Bekasi 这个数组可以用这个代码发布 http method
  • 将变量设置为函数调用以在 PHP 中的 if 语句中使用

    好的 我正在做一些 Wordpress 编辑 并且编写了一个 if 语句 正如您所看到的 这使用函数调用作为变量 这是因为函数调用会调用当前页面的名称 这很好 然而 当我这样做时 它也往往会与页面上的标题相呼应 这是有道理的 我可能正在尝试
  • 在 Laravel 中将自定义/新类文件放在哪里?

    我有关于如何使用 Yelp Fusion API 的 PHP 示例 它用OAuth php file https github com Yelp yelp api blob master v2 php lib OAuth php有几个班级
  • 在 woocommerce 管理订单页面中单击自定义按钮运行函数

    基于 在 woocommerce 中的管理订单列表顶部添加一个按钮 https stackoverflow com questions 49437781 add a button on top of admin orders list in
  • 在 Windows 中使用 PHP 创建受密码保护的 Zip 文件

    我正在 PHP 中创建给定文件的 zip 文件 下面是函数 function create zip file file name zip new ZipArchive zip name file name zip Zip name zip
  • 在 PHP 中重新定义常量

    是否可以在 php 中重新定义由define功能 我有一个包含多个常量的类 其中包含用户数据 我正在尝试为多个用户使用该类 define ALLEGRO ID id define ALLEGRO LOGIN login define ALL
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 简单搜索:使用 CodeIgniter 将表单变量传递到 URI

    我的每个页面上都有一个搜索表单 如果我使用表单助手 它默认为 POST 我希望搜索词显示在 URI 中 http example com search KEYWORD 我已经在谷歌上搜索了大约一个小时 但没有结果 我只找到了有关如何进行的文
  • 在我的 php 网络服务器内副本中启用 mysqli

    正如这里所讨论的 mysqli 直接运行时有效 但通过 js ajax 运行时无效 https stackoverflow com questions 31523601 mysqli works when run directly but
  • 使用 OpenSSL 在 PHP 中进行 AES 加密/在 Node.js 中进行解密

    我正在使用 PHP 和 Nodejs 使用 OpenSSL 进行对称加密 PHP 使用 OpenSSL 库 Node js 解密基于实现的加密 问题是 Node js 中的解密文本只是部分正确 PHP 加密函数 function encry
  • Laravel nova diffForHumans 日期时间

    我对用户有字段last active 我想用 diffForHumans 或显示时间time from now来自 Moment js 我怎样才能做到呢 现在我只使用 DateTime make Activiy last active gt
  • Jquery UI 日期选择器 设置默认日期

    我使用 jQuery UI 作为日期选择器 我想在字段中显示当前日期作为默认值 以下是我的代码 请帮助 From Date
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • NetBeans 代码模板 ${date}?

    我在 Eclipse 中有这个代码模板 自 日期 起 当输入时我得到这样的东西 自2009年8月4日起 但是当我添加相同的模板时 自 日期 起 到 NetBeans 它输出 自日期以来 有人可以帮忙吗 还没有答案吗 这在 Netbeans
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • 递归获取数组的键并创建下划线分隔的字符串

    现在我得到了一个包含某种信息的数组 我需要从中创建一个表 例如 Student Address StreetAddress gt Some Street StreetName gt Some Name Marks1 gt 100 Marks
  • 如何使用 PHP 正确添加跨站请求伪造 (CSRF) 令牌

    我正在尝试为我网站上的表单添加一些安全性 其中一个表单使用 AJAX 另一个表单是简单的 联系我们 表单 我正在尝试添加 CSRF 令牌 我遇到的问题是令牌有时只显示在 HTML 值 中 其余时间 该值为空 这是我在 AJAX 表单上使用的
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • 检查php中位字段是否打开的正确方法是什么

    检查位字段是否打开的正确方法是什么 在 php 中 我想检查来自 db mysql 的位字段是否打开 这是正确的方法吗 if bit 1 还有其他方法吗 我看到有人使用代码ord http jameslow com 2008 08 12 m

随机推荐

  • djangorest框架列表查询由于日期格式而自定义json数组结果响应

    我有这个 Django REST API 我想自定义 json 响应的列表查询结果 原因是日期格式和可能的其他格式 这是 Rest API 问题是 create at 我希望它的格式如下 Y m d H M 以下代码没有任何格式 它只是列出
  • 遛树,父母先行

    访问链接树的所有节点 所有节点都有对父节点和所有子节点的引用 根节点将 null 作为父节点 的最佳方法是什么 以便在其任何祖先之前不会访问任何节点 非递归的布朗尼点 伪代码 NodesToVisit some stack or some
  • 使用 Android Studio 0.4.0 的渲染问题

    在使用 Eclipse 一段时间后 我最近决定尝试一下 Android Studio 我的主要活动 xml 在 Eclipse 上渲染正常 但 Studio 似乎有问题 它在预览窗口中报告此情况 渲染问题 java lang StackOv
  • scala泛型函数返回类型

    我尝试编写一个具有通用返回类型的函数 但除非我强制转换返回类型 否则它不起作用 请看函数getSomething 下面我预计它无需铸造即可工作 我在这里可能做错了什么 trait Sup class Sub extends Sup def
  • 如何使用 jQuery 触发自定义事件?

    我将自定义事件处理程序附加到body在 jQuery 中ready method 随后我立即trigger自定义事件 但似乎什么也没有发生 function body on test function alert test triggere
  • 如何将外部JS文件加载到moodle中?

    如何将外部JS文件加载到moodle中 使用moodle api 即moodle库 在Moodle 2 0中我一直使用 PAGE gt requires gt js 首先 使 PAGE通过执行以下操作可用于您的代码 require once
  • Chisel 中的 <> 运算符是什么?

    Chisel 教程使用了看似 lt gt 运算符 对我来说完全陌生 它有什么作用 还有 它从哪里来 该运算符在其他 Scala 库甚至其他语言中是否有约定的含义 以下是 Chisel Generator Bootcamp 练习第 3 2 节
  • 注册时创建子域

    我正在建立一个网站 企业可以在其中注册自己的帐户 该帐户应位于http businessname example com http businessname example com 企业名称 每次都在变化 我想在 Windows 服务器 I
  • 身份验证模式=“表单”导致 WCF 端点出现错误

    我的 NET 4 0 Web 应用程序项目中有一个 WCF 端点 使用VS2010 WCF测试客户端 我可以正确连接到该服务 但是 当我使用该服务时 我收到一条通用错误消息 内容类型text html 响应消息的 charset UTF 8
  • 在 XDebug 会话中 cURL 到 self

    我正在使用 XDebug 在 Eclipse 中调试 PHP 应用程序 应用程序通过 cURL 调用自身内部的 HTTP API Current protocol server port URL http SERVER SERVER NAM
  • 为 Firefox 签署基于 XUL 的附加组件

    是否可以对基于 XUL 的 Firefox 附加组件进行签名 或者只能使用新的 SDK 进行签名 所有扩展 无论是Overlay https developer mozilla org en US Add ons Overlay Exten
  • Pylint 错误检查可以定制吗?

    我正在使用 pydev 我已经设置了 pylint 问题是 即使在评论中 pylint 也会报告警告 我希望禁用任何行或块注释内的任何类型的检查 另外 我希望遵循驼峰命名约定 而不是代码中变量和参数的下划线 有没有办法指定这样的规则 而不用
  • 使用转义引号解析 JSON 时出错

    当我从浏览器调用 URL 时 我收到以下 json 对象 我希望其中没有数据 data SkipToken top 然而 当我尝试用 javascript 调用它时 它给了我error Parsing Json message dspser
  • Oracle 中的观察者模式

    我可以设置更改或添加表中某些行的钩子 并在发生此类事件时以某种方式收到通知吗 我发现了网络 但只被管道困住了 但是没有办法在发送管道消息时立即获取它 只有期刊尝试接收 通常应该避免从数据库实现观察者模式 为什么 它依赖于供应商专有 非标准
  • 提高 data.table 日期+时间粘贴的性能?

    我不确定我是否可以在这里问这个问题 请告诉我是否应该在其他地方这样做 我有一个包含 1e6 行的 data table 具有以下结构 V1 V2 V3 1 03 09 2011 08 05 40 1145 0 2 03 09 2011 08
  • 未找到命令 - bash:sqlplus:

    我正在尝试在 Oracle 数据库 docker 容器中使用 sqlplus 用于Windows 10 给出的命令 docker run d p 8080 8080 p 1521 1521 name OracleDB store oracl
  • 是否可以只用一名协调员启动一些 oozie 工作流程?

    我不确定是否可以使用这个好工具来实现我想要的目的 我有很多工作流程 这些工作流程可以是依赖的 也可以是非依赖的 示例 workflow1 工作流程 xml job properties workflow2 工作流程 xml job prop
  • 在适用于 Android 的 Visual Studio 模拟器中使用代理

    以下是模拟器公告的链接 包含在 Visual Studio 15 CTP 中 https www visualstudio com en us msft android emulator vs aspx https www visualst
  • 什么是 XLSHTML?

    什么是 XLSHTML 我想尽可能简单地生成一个文件 当用户双击该文件时 该文件将在 Excel 中打开 并且具有一些最小的样式 XLS满足我的用户要求 但生成起来并不容易 CSV 很容易生成 但没有样式 HTML 很容易生成并具有样式 但
  • PDO::FETCH_CLASS 具有多个类

    我正在尝试将查询结果转换为类 result gt setFetchMode PDO FETCH CLASS myclass array 这工作得很好 但是类名myclass取决于列值 是否可以获取每一行并根据行值将其转换为不同的类 用户示例