仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 942|回复: 18
打印 上一主题 下一主题

[学习教程] PHP网页编程之PHP5 OOP编程中的代办署理与异常定制

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
让好朋友来看看,嘿,看咱写的多棒,然后再在网上宣传一下。php5|编程   之前没学过PHP,比来恰好一个项目需求用到,我就决意一边学一边做PHP.
  1 在SQL语句中可经由过程添加限制前提:left(text,20)只取text文本的前20个字;
  2 可以用limit fromRecord, RecordNum 来作为分页利用,好比limit 0,30暗示从第一个纪录入手下手遍历30个记载;
  3 两个表的毗连可所以:table1 join table2 using x(x为两个表的公共字段),或是table1 join table2 on table1.x = table2.x
  4 php获得querystring可以用$page = $_GET['page'];
  或
  $page = $_REQUEST['page'];
  个中Request可获得post,get,QueryString等字符;
  在这之前 我看到了一个较笨的举措:
  parse_str($_SERVER['QUERY_STRING'],$output); // 先将查询字符串存到一个数组$output中
  $page = $output['page']; //然后依据变量名索引
  5 php中日期函数的对照实践上就是字符串的对照;
  6 mysql中date类型的数据可所以:2000-02-03,2002.02.03,2002.2.3,02.02.03,02.2.3,就是说必需有月和日,并且必需以'-'或'.'分离隔来。
  7 data()来获得工夫会有时区的成绩,我发明工夫都少了8个小时,是由于php.ini外面默许设置装备摆设是GTM美国时区;
  处理举措:可以修正php.ini:
  [Date]
  ; Defines the default timezone used by the date functions
  date.timezone = "Asia/Shanghai"
  或在利用date()函数是加上date_Default_TimeZone_set("PRC");
  8 一段工夫,调试时在body处老是说我短少")",费了半天是intval($_POST['consumeType'])的成绩,在数据库中该字段是varchar(50),在zengsong表中我没用intval函数,是由于它的ID就是1,2...整数跟char型的可以相互转换,但在别的两个表中是A5A,SP07-01之类的,但它怎样转换成int型了呢?
  让咱们来看看intval函数的声明:
  intval函数用来获得变量的整数值:int intval ( mixed var [, int base] )
  经由过程利用特定的进制转换(默许是十进制),前往变量 var 的 integer 数值。
  var 可所以任何标量类型。intval() 不克不及用于 array 或 object。
  9 别的一个莫名的成绩,以用户名1上岸就能够,换个'bo'上岸,体系就在处失足:说我运转工夫毛病:短少")",nnd。反省了一下,本来是sql语句中的变量类型跟数据库中的纷歧致,
  10 php中当从浮点数转换成整数时,数字将被取整(抛弃小数位)。
  11 在mysql拔出语句中,假如是自增字段要用(NULL)来取代。
  12 php的中文乱码???成绩处理:
  在mysql_connect后到场mysql_query("set names 'gb2312'");
  或全用utf8编码,就不必到场上述语句了。
  还有函数iconv("GBK","UTF8","字符串");可完成各类字符编码的转换。
 4、 利用承继抛出定制异常
  在PHP中,你可以抛出任何对象作为一个异常;然而,起首该异常应当承继自PHP的内置异常类。经由过程创立你本人的定制异常,你可以纪录其它有关于该毛病的信息,例如在一个日记文件中创立一个进口,或做你喜好做的任何工作。你的定制异常将要做以下几件工作:
  ・ 纪录由查询发生的来自DB对象的毛病动静。
  ・ 给出查询毛病产生地点行代码的正确细节―经由过程反省挪用栈。
  ・ 显示毛病动静和查询文本―当被转换成一个字符串时。
  为了失掉毛病信息和查询文本,需求对DBQuery对象作多处更改。
  1. 一个新的protected属性―compiledQuery―需求被添加到类中。
  2. compile()函数利用查询文本更新查询compiledQuery属性。
  3. 应当到场一个检索编译的查询文本的函数。
  4. 还应当到场一个函数―它失掉以后的与DBQuery对象相干联的DB对象。
  列表4.抛出一个异常。
class DBQuery
{
 /**
 *在挪用compile()或execute()以后存储查询的编译版本
 *  
 * @var string $compiledQuery
 */
 protected $compiledQuery;
 /**
 * 前往编译的查询而不履行它。
 * @参数:mixed $params,...查询参数
 * @前往:字符串―编译的查询
 */
 public function compile($params='')
 {
  if (! $this->stored_procedure) {
   throw new Exception("存储进程没被初始化.");
  }
  /*取代参数*/
  $params = func_get_args(); //失掉函数参数
  $query = preg_replace("/(?compile_callback($params, 1, "2")', $this->query);
  return ($this->compiledQuery = $this->add_strings($query)); //把字符串放回查询中
 }
 public function getDB()
 {
  return $this->db;
 }
 public function getCompiledQuery()
 {
  return $this->compiledQuery;
 }
}  
 如今,你可以完成QueryException类。注重你是若何遍历挪用栈以在剧本中查找实践招致毛病的地位的。这正好合用于当抛出异常的DBQuery对象是一个承继自DBQuery对象的子类的情形。

  列表5:QueryException类。
/**
*查询异常
*
*当试图履行一个查询时,假如一个毛病产生,将由{@link DBQuery}对象抛失足误
*/
class QueryException extends Exception
{
/**
* 查询文本
*
* @var字符串$QueryText;
*/
protected $QueryText;
/**
*来自数据库的毛病号/代码
*
* @var字符串$ErrorCode
*/
protected $ErrorNumber;
/**
*来自数据库的毛病动静
*
* @var字符串$ErrorMessage
*/
protected $ErrorMessage;
/**
*类机关器
*
* @参数:DBQuery $db,是抛出异常的查询对象
*/
public function __construct(DBQuery $query)
{
 /*失掉挪用栈*/
 $backtrace = $this->GetTrace();
 /*把行和文件设置到毛病实践产生的地位*/
 if (count($backtrace) > 0) {
  $x = 1;
  /*假如查询类被承继,那末咱们需求疏忽由子类所停止的挪用*/
  while((! isset($backtrace[$x]['line'])) ||
(isset($backtrace[$x]['class']) && is_subclass_of($backtrace[$x]['class'], 'DBQuery')) ||
(strpos(strtolower(@$backtrace[$x]['function']), 'call_user_func')) !== false ) {
   /*轮回履行,只需没有行号或挪用的函数是DBQuery类的一个子类*/
   ++$x;
   /*假如咱们抵达栈底,那末咱们利用第一个挪用者*/
   if (($x) >= count($backtrace)) {
    $x = count($backtrace);
    break;
   }
 }
 /*假如下面的轮回最少履行一次,那末咱们可以把它减1以查找实践的引发毛病的代码行
 */
 if ($x != 1) {
  $x -= 1;
 }
 /*最初,咱们可以设置文件和行号,这应当可以反应出引发毛病的SQL语句*/
 $this->line = $backtrace[$x]['line'];
 $this->file = $backtrace[$x]['file'];
}
$this->QueryText = $query->getCompiledQuery();
$this->ErrorNumber = $query->getDB()->errno();
$this->ErrorMessage = $query->getDB()->error();
/*挪用超类的异常机关器*/
parent::__construct('Query Error', 0);
}
/**
*失掉查询文本
*
* @前往字符串查询文本
*/
public function GetQueryText()
{
 return $this->QueryText;
}
/**
*失掉毛病号
*
* @前往字符串毛病号
*/
public function GetErrorNumber()
{
 return $this->ErrorNumber;
}
/**
*失掉毛病动静
*
* @前往字符串毛病动静
*/
public function GetErrorMessage()
{
 return $this->ErrorMessage;
}
/**
*当对象被转换为一个字符串时挪用。
* @前往字符串
*/
public function __toString()
{
 $output = "Query Error in {$this->file} on line {$this->line}nn";
 $output .= "Query: {$this->QueryText}n";
 $output .= "Error: {$this->ErrorMessage} ({$this->ErrorNumber})nn";

 return $output;
}
}  

  至此,在本节入手下手看到的代码可以任务了。
  5、 结论
  在本文中,你看到了代办署理是如何把与查询相接洽的DB接口映照到针对一个特定的查询了局上的操作。DBQuery对象表露不异的函数,例如fetch_assoc(),作为DB对象。但是,这些都是针对单个查询起感化。你还进修了若何利用定制异常来给出具体信息―一个毛病产生在什么时候何地,和它们如何更好地掌握毛病的处置
我的这套线路可能跟许多学习PHP的爱好者不谋而合,这也算是一个循序渐进的学习过程,不过新手不要看到上面的概括就以为学习蛮简单的,默默在此不得不对您稍微泼一下冷水,任何东西其实都不简单。
admin 该用户已被删除
沙发
发表于 2015-2-4 10:03:42 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
兰色精灵 该用户已被删除
板凳
发表于 2015-2-12 11:01:49 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
不帅 该用户已被删除
地板
发表于 2015-2-14 17:29:24 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
乐观 该用户已被删除
5#
发表于 2015-2-25 03:37:32 | 只看该作者
当然这种网站的会员费就几十块钱。
第二个灵魂 该用户已被删除
6#
发表于 2015-3-7 16:21:49 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
小魔女 该用户已被删除
7#
发表于 2015-3-11 13:21:01 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
若天明 该用户已被删除
8#
发表于 2015-3-13 00:09:44 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-13 04:10:53 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
精灵巫婆 该用户已被删除
10#
发表于 2015-3-19 20:52:21 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
愤怒的大鸟 该用户已被删除
11#
发表于 2015-3-28 06:44:23 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
只想知道 该用户已被删除
12#
发表于 2015-3-30 15:55:52 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
小女巫 该用户已被删除
13#
发表于 2015-4-4 09:59:13 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
再见西城 该用户已被删除
14#
发表于 2015-4-11 02:11:12 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
莫相离 该用户已被删除
15#
发表于 2015-4-17 05:03:17 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
简单生活 该用户已被删除
16#
发表于 2015-4-26 15:10:25 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
活着的死人 该用户已被删除
17#
发表于 2015-5-1 05:10:29 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
金色的骷髅 该用户已被删除
18#
发表于 2015-7-3 18:19:18 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
19#
发表于 2015-7-11 21:21:12 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 01:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表