PHP5OOP编程中的代理与异常定制(三)

 更新时间:2016年11月25日 17:13  点击:1369

现在,你可以实现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;

四、 使用继续抛出定制异常

  在PHP中,你可以抛出任何对象作为一个异常;但是,首先该异常应该继续自PHP的内置异常类。通过创建你自己的定制异常,你可以记录其它有关于该错误的信息,例如在一个日志文件中创建一个入口,或做你喜欢做的任何事情。你的定制异常将要做如下几件事情:

一. 10句话
1.不要依靠register_global=ON的环境,从你刚懂得配置php运行环境甚至尚不明白register_global的ON/OFF会对自己有什么影响的那天起,就应该勇敢地把它设为OFF.
2.写程序前看看怎么用error_reporting.
3.不懂就问本身没错,但你需要在那之前查查手册。
4.当然,你需要懂得使用手册。手册上找不到答案的时候,应该考虑下网络上的搜索引擎。
5.刚学会php mysql之后,不要叫嚷着要写论坛,要写XXX。要明白,刚学会写汉字并不表示你有能力写诗。
6.在学web编程的时候,你应该先去熟悉html这个朋友。
7.有点能力后,试着回答新手的问题,不要看到自己懂的而别人不懂就沾沾自喜,扔下一名“简单,那是基本的东西”就走更要不得。
8.思考是一个好习惯,不动手去写就等于空想,什么也没有。
9.写好一段程序,假如觉得很满足,一周后再看一遍,也许你会认为它应该有所改变
10.有空多看看别人的程序,找出他人的不足或优点,自己掂量。

二. 各取所需

1.善于使用“引用”,它能直接影响到程序的效率。

2.善于用三元运算子,可以让程式较精简有效率。
比如:

PHP代码:

if ($data[$i]['nickname']){
$nickname = $data[$i]['nickname'];
}
else{
$nickname = $data[$i]['ip'];
}
可以写成:

PHP代码:

$nickname = $data[$i]['nickname'] ? $data[$i]['nickname'] : $data[$i]['ip'];
3.善于组织if...else...回圈
比如:

PHP代码:

$ext_name = strtolower(str_replace(".", "", strrchr($upfilename, ".")));
if (!empty($type))
{
if (!strpos($type, $ext_name))
{
echo "Please upload the file of $type form.";
exit();
}
}
上面的代码你应该写成这样:

PHP代码:

综述
  Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
  一般来说,在网站上某一个页面中的变量(指服务器端变量,下同)是不能在下一页中用的,有了session就好办了。session中注册的变量可以作为全局变量使用。这样我们就可以将session用于用户身份认证,程序状态记录,页面之间参数传递。
  在PHP3版本中是如何实现session的?
  php3本身是没有实现session功能的,我们只有用其他的方法来实现,这其中最有名的要算phplib了。phplib最基本的功能包括用户认证、Session管理、权限及数据库的抽象化。下面我们就讲述一下如何用phplib实现session。
  1、首先安装phplib(环境为win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 for win32)
  首先将phplib解开,里面有一个"php"目录,将这个目录拷贝到Apache的安装目录下。例如:Apache安装在d:Apache 目录下,那么就将"php"目录拷贝到d:Apache,并将phplib目录的pages目录下(不包括目录本身)的文件和目录一起拷贝到d:Apachehtdocs下。
  phplib的类库需要根据系统进行初始化,可能需要修改local.inc文件,其中包含着一些基本参数,可以根据自己机器的实际情况来进行修改。
  将d:Apachephpprepend.php文件中的一段程序改为如下样子:
    if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
      $_PHPLIB["libdir"] = "d:/Apache/php/"; //放phplib下php目录的路径
    }
  修改d:Apachephplocal.inc文件:
    class DB_Example extends DB_Sql {
      var $Host = "localhost"; //mysql数据库所在主机名
      var $Database = "test"; //数据库名
      var $User = "root"; //数据库用户名
      var $Password = "1234567"; //数据库用户密码
    }
  最后根据phplib目录下的stuff子目录中的create_database.mysql文件生成初始表。
  由于每一个使用phplib的页面首先必须可以找到运行phplib所必需的类库文件,我们可以在php.ini中设置auto_prepend变量来支持,phplib中包含一个prepend.php文件,并将auto_prepend指定为"d:/Apache/php/prepend.php"(带引号)后,各页面就会自动包含phplib类库,我们还可以将phplib类库所在目录加进include变量中,以便可以找到这些文件。
PHP的面向对象编程:开发大型PHP项目的方法(一)
作者:Luis Argerich 译者:limodou
  这篇文章介绍了在PHP中的面向对象编程(OOP,Object Oriented Programming)。我将向你演示如何通
过使用一些OOP的概念和PHP的技巧来减少编码和提高质量。祝你好运!
  面向对象编程的概念:
  不同的作者之间说法可能不一样,但是一个OOP语言必须有以下几方面:
抽象数据类型和信息封装
继承
多态
  在PHP中是通过类来完成封装的:
--------------------------------------------------------------------------------<?php
class Something {
// 在OOP类中,通常第一个字符为大写
var $x;
function setX($v) {
// 方法开始为小写单词,然后使用大写字母来分隔单词,例如getValueOfArea()
$this->x=$v;
}
function getX() {
return $this->x;
}
}
?>--------------------------------------------------------------------------------
  当然你可以按自已的喜好进行定义,但最好保持一种标准,这样会更有效。
  数据成员在类中使用"var"声明来定义,在给数据成员赋值之前,它们是没有类型的。一个数据成员可
以是一个整数,一个数组,一个相关数组(associative array)或者是一个对象。
  方法在类中被定义成函数形式,在方法中访问类成员变量时,你应该使用$this->name,否则对一个方
法来说,它只能是局部变量。
  使用new操作符来创建一个对象:
  $obj=new Something;
  然后你可以使用成员函数通过:
  $obj->setX(5);
  $see=$obj->getX();
  在这个例子中,setX成员函数将5赋值给对象的成员变量x(不是类的),然后getX返回它的值5。
  你可以象:$obj->x=6那样通过类引用方式来存取数据成员,这不是一个很好的OOP习惯。我强烈建议通
过方法来存取成员变量。如果你把成员变量看成是不可处理的,并且只通过对象句柄来使用方法,你将是一
个好的OOP程序员。不幸的是,PHP不支持声明私有成员变量,所以不良代码在PHP中也是允许的。
  继承在PHP中很容易实现,只要使用extend关键字。
--------------------------------------------------------------------------------
<?php
class Another extends Something {
var $y;
function setY($v) {
$this->y=$v;
}
function getY() {
return $this->y;
}
}
?>--------------------------------------------------------------------------------
转自PHPBuilder.com

[!--infotagslink--]

相关文章

  • c# socket网络编程接收发送数据示例代码

    这篇文章主要介绍了c# socket网络编程,server端接收,client端发送数据,大家参考使用吧...2020-06-25
  • 浅谈node.js中async异步编程

    1.什么是异步编程? 异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数、ajax请求等等。示例: for (var i = 1; i <= 3; i++) {setTimeout(functi...2015-10-23
  • Python同时处理多个异常的方法

    这篇文章主要介绍了Python同时处理多个异常的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-29
  • 自动设置安卓手机wifi代理的PowerShell脚本

    这篇文章主要介绍了自动设置安卓手机wifi代理的PowerShell脚本,帮助大家进行抓包测试,感兴趣的朋友可以了解下...2020-10-17
  • Angular处理未可知异常错误的方法详解

    这篇文章主要给大家介绍了关于Angular如何处理未可知异常错误的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-17
  • C#编程总结(六)详解异步编程

    本篇文章主要介绍了C#异步编程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。...2020-06-25
  • java中的空指针异常情况以及解决方案

    这篇文章主要介绍了java中的空指针异常情况以及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-02
  • vue配置多代理服务接口地址操作

    这篇文章主要介绍了vue配置多代理服务接口地址操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-08
  • 理解javascript异步编程

    这篇文章主要为大家介绍了javascript异步编程,从浅入深的学习javascript异步编程,对javascript异步编程感兴趣的小伙伴们可以参考一下...2016-01-29
  • 详解C#编程中异常的创建和引发以及异常处理

    这篇文章主要介绍了C#编程中异常的创建和引发以及异常处理,文中介绍了Catch块和Finally块等基本的异常处理要点,需要的朋友可以参考下...2020-06-25
  • 基于RequireJS和JQuery的模块化编程——常见问题全面解析

    下面小编就为大家带来一篇基于RequireJS和JQuery的模块化编程——常见问题全面解析。小编觉得挺不错的,现在分享给大家,也给大家做个参考...2016-04-17
  • 再谈JavaScript异步编程

    再谈JavaScript异步编程,简单描述了几种JavaScript异步编程模式,感兴趣的小伙伴们可以参考一下...2016-01-29
  • 读Javascript高性能编程重点笔记

    这篇文章主要介绍了读Javascript高性能编程重点笔记,需要的朋友可以参考下...2016-12-31
  • 探究JavaScript函数式编程的乐趣

    本文是函数式编程系列的第一篇文章,这里我会简要介绍一下编程范式,然后会直接介绍使用Javascript进行函数式编程的概念,需要的朋友可以参考下...2015-12-16
  • Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer异常

    这篇文章主要介绍了Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-10
  • Spring异常捕获且回滚事务解决方案

    这篇文章主要介绍了Spring异常捕获且回滚事务解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-03
  • Nginx反向代理proxy_cache_path directive is not allowed错误解决方法

    这篇文章主要介绍了Nginx反向代理proxy_cache_path directive is not allowed错误解决方法,需要的朋友可以参考下...2016-01-27
  • 通过实例了解Python异常处理机制底层实现

    这篇文章主要介绍了通过实例了解Python异常处理机制底层实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-24
  • 用PHP与XML联手进行网站编程

    一、小序 HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的。但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了。XML的出现,弥补了这些不足,它提供...2016-11-25
  • PHP捕捉异常中断的方法

    相信每位PHP程序员都知道,当PHP程序出现异常情况,如出现致命错误、超时或者不可知的逻辑错误导致程序中断,这个时候就可以用 register_shutdown_function进行异常处理。下面本文给出了详细的示例代码,有需要的朋友们下面来一起看看吧。...2016-10-25