首页 后端开发 php教程 PHP5 OOP编程之代理与定制异常_PHP教程

PHP5 OOP编程之代理与定制异常_PHP教程

Jul 13, 2016 pm 05:33 PM
oop php5 代理 定制 对象 异常 我们 模仿 现在 简单 编程

  一、 DBQuery对象

  现在,我们的DBQuery对象简单地模仿一个存储过程—一旦被执行,即返回一个必须进行保存的结果资源;并且如果你想使用该结果集上的函数(例如num_rows()或fetch_row())的话,你必须传递MySQL(和PHP搭配之最佳组合)DB对象。那么,如果由DBQuery对象来实现MySQL(和PHP搭配之最佳组合)DB对象(其设计目的是对一个执行查询的结果进行操作)实现的函数,效果如何呢?让我们继续使用上一篇示例中的代码;并且让我们假定,现在由DBQuery对象管理我们的结果资源。DBQuery类的源码如列表1所示。

  列表1.使用DBQuery类。

require MySQL(和PHP搭配之最佳组合)_db.php(做为现在的主流开发语言);
require_once query.php(做为现在的主流开发语言);
$db = new MySQL(和PHP搭配之最佳组合)Db;
$db->connect(host, username, pass);
$db->query(use content_management_system);
$query = new DBQuery($db);
$query->prepare(SELECT fname,sname FROM users WHERE username=:1S AND pword=:2S AND expire_time<:3i>try {
 if($query->execute("visualad", "apron", time()))->num_rows() == 1) {
  echo(Correct Credentials);
 } else {
  echo(Incorrect Credentials / Session Expired);
 }
} catch (QueryException $e) {
 echo(Error executing query: . $e);

  上面修改后的代码中我们最感兴趣的是,catch语句和execute语句。

  · execute语句不再返回一个结果资源,现在它返回DBQuery对象本身。

  · DBQuery对象现在实现num_rows()函数—我们从DB接口中已经熟悉。

  · 如果查询执行失败,它抛出一个QueryException类型的异常。当被转换成一个字符串时,它将返回发生的错误的细节信息。

  为此,你需要使用代理。事实上,你在我们的DBQuery对象中已经使用代理了,但是现在将更为深入地使用它来把它与MySQL(和PHP搭配之最佳组合)DB对象紧密绑定。该DBQuery对象已经被使用一个实现DB接口的对象初始化,并且它已经包含一个成员函数execute—由它调用DB对象的query()方法来执行该查询。这个DBQuery对象本身并不实际地查询数据库,它把这项任务交由DB对象来完成。这就是代理,其实是一个进程—借助于这个进程,通过把消息发送给另一个实现相同的或类似行为的对象,一个对象可以实现一个特别的行为。

  为此,你需要修改DBQuery对象以便包括所有的函数—它们操作一个来自DB对象的结果资源。当执行查询以调用DB对象的相应函数并且返回它的结果时,你需要使用存储的结果。下列函数将被添加:

  列表2:使用代理扩展DBQuery类。

class DBQuery
{
 .....

 public function fetch_array()
 {
  if (! is_resource($this->result)) {
   throw new Exception(Query not executed.);
  }
  return $this->db->fetch_array($this->result);
 }

 public function fetch_row()
 {
  if (! is_resource($this->result)) {
   throw new Exception(Query not executed.);
  }
  return $this->db->fetch_row($this->result);
 }

 public function fetch_assoc()
 {
  if (! is_resource($this->result)) {
   throw new Exception(Query not executed.);
  }
  return $this->db->fetch_assoc($this->result);
 }

 public function fetch_object()
 {
  if (! is_resource($this->result)) {
   throw new Exception(Query not executed.);
  }
  return $this->db->fetch_object($this->result);
 }

 public function num_rows()
 {
  if (! is_resource($this->result)) {
   throw new Exception(Query not executed.);
  }
  return $this->db->num_rows($this->result);
 }

  每个函数的实现相当简单。它首先进行检查,以确保已经执行查询,然后把任务代理到DB对象,返回它的结果就好象它是查询对象本身(称作是基本数据库函数)一样。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/508643.htmlTechArticle一、 DBQuery对象 现在,我们的DBQuery对象简单地模仿一个存储过程—一旦被执行,即返回一个必须进行保存的结果资源;并且如果你想使用该...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1276
29
C# 教程
1256
24
MIT最新力作:用GPT-3.5解决时间序列异常检测问题 MIT最新力作:用GPT-3.5解决时间序列异常检测问题 Jun 08, 2024 pm 06:09 PM

今天给大家介绍一篇MIT上周发表的文章,使用GPT-3.5-turbo解决时间序列异常检测问题,初步验证了LLM在时间序列异常检测中的有效性。整个过程没有进行finetune,直接使用GPT-3.5-turbo进行异常检测,文中的核心是如何将时间序列转换成GPT-3.5-turbo可识别的输入,以及如何设计prompt或者pipeline让LLM解决异常检测任务。下面给大家详细介绍一下这篇工作。图片论文标题:Largelanguagemodelscanbezero-shotanomalydete

C++ 函数异常与单测:确保代码健全性 C++ 函数异常与单测:确保代码健全性 May 03, 2024 am 09:18 AM

异常处理和单测是确保C++代码健全性的重要实践。异常通过try-catch块处理,当代码引发异常时会跳转到catch块。单元测试可隔离代码测试,以验证异常处理在不同情况下是否按预期工作。实战案例:sumArray函数计算数组元素总和,并抛出异常以处理空输入数组。单元测试可验证函数在异常情况下的预期行为,如当数组为空时抛出std::invalid_argument异常。结论:通过利用异常处理和单测,我们可以处理异常情况、防止代码崩溃,并确保代码在异常情况下按预期运行。

C++ 函数异常进阶:定制错误处理 C++ 函数异常进阶:定制错误处理 May 01, 2024 pm 06:39 PM

C++中的异常处理可通过定制异常类增强,提供特定错误消息、上下文信息以及根据错误类型执行自定义操作。定义继承自std::exception的异常类,提供特定的错误信息。使用throw关键字抛出定制异常。在try-catch块中使用dynamic_cast将捕获到的异常转换为定制异常类型。实战案例中,open_file函数抛出FileNotFoundException异常,捕捉并处理该异常可提供更具体的错误消息。

如何在C++中实现嵌套异常处理? 如何在C++中实现嵌套异常处理? Jun 05, 2024 pm 09:15 PM

嵌套异常处理在C++中通过嵌套的try-catch块实现,允许在异常处理程序中引发新异常。嵌套的try-catch步骤如下:1.外部try-catch块处理所有异常,包括内部异常处理程序抛出的异常。2.内部try-catch块处理特定类型的异常,如果发生超出范围的异常,则将控制权交给外部异常处理程序。

释放你内心的程序员:C 绝对初学者 释放你内心的程序员:C 绝对初学者 Oct 11, 2024 pm 03:50 PM

C语言是初学者学习编程的理想选择,其优势包括效率、多功能性和可移植性。学习C语言需要:安装C编译器(如MinGW或Cygwin)了解变量、数据类型、条件语句和循环语句编写包含主函数和printf()函数的第一个程序通过实战案例(如计算平均数)练习C语言知识

使用 Python 解决问题:作为初学者,解锁强大的解决方案 使用 Python 解决问题:作为初学者,解锁强大的解决方案 Oct 11, 2024 pm 08:58 PM

Python 使初学者能够解决问题。其用户友好的语法、广泛的库以及变量、条件语句和循环等功能可实现高效的代码开发。从管理数据到控制程序流程和执行重复任务,Python 提供了

Python 的力量,简单:一种适合初学者的编程方法 Python 的力量,简单:一种适合初学者的编程方法 Oct 11, 2024 pm 04:53 PM

Python编程入门安装Python:从官方网站下载并安装。HelloWorld!:使用print("HelloWorld!")打印第一行代码。实战案例:计算圆面积:使用π(3.14159)和半径计算圆面积。变量和数据类型:使用变量存储数据,Python中的数据类型包括整数、浮点数、字符串和布尔值。表达式和赋值:使用操作符将变量、常量和函数连接起来,并使用赋值运算符(=)将值赋给变量。控制流:if-else语句:根据条件执行不同的代码块,确定奇

C++ 编程谜题集锦:激发思维,提升编程水平 C++ 编程谜题集锦:激发思维,提升编程水平 Jun 01, 2024 pm 10:26 PM

C++编程谜题涵盖斐波那契数列、阶乘、汉明距离、数组最大值和最小值等算法和数据结构概念,通过解决这些谜题,可以巩固C++知识,提升算法理解和编程技巧。

See all articles