您的位置广东网盟 > 文章资讯 > 软件应用 > 编程开发 > PHP技术 > 文章内容

用PEAR来写一个php程序

作者:佚名  来源:本站整理  发布时间:2008-1-26 20:47:00
  • PHP代码标记:

    任何时候都要使用<?php ?>定义你的php代码,而不要简单地使用<? ?>,这样可以保证PEAR的兼容性,也利于跨平台的移植。

  • 文件头的注释声明:

    所有需要包含在PEAR核心发布的PHP代码文件,在文件开始的时候,你必须加入以下的注释声明:

    
    /* vim: set expandtab tabstop=4 shiftwidth=4: */
    
    // +----------------------------------------------------------------------+
    
    // | PHP version 4.0                                                      |
    
    // +----------------------------------------------------------------------+
    
    // | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |
    
    // +----------------------------------------------------------------------+
    
    // | This source file is subject to version 2.0 of the PHP license,       |
    
    // | that is bundled with this package in the file LICENSE, and is        |
    
    // | available at through the world-wide-web at                           |
    
    // | http://www.php.net/license/2_02.txt.                                 |
    
    // | If you did not receive a copy of the PHP license and are unable to   |
    
    // | obtain it through the world-wide-web, please send a note to          |
    
    // | license@php.net so we can mail you a copy immediately.               |
    
    // +----------------------------------------------------------------------+
    
    // | Authors: Original Author                         |
    
    // |          Your Name                                  |
    
    // +----------------------------------------------------------------------+
    
    //
    
    // $Id$
    
    对于不在PEAR核心代码库中的文件,建议你也在文件的开始处有这样一个类似的注释块,标明版权,协议,作者等等。同时也在第一行加入VIM的MODELINE,这样在VIM中能够保持PEAR的代码风格。

  • CVS标记:

    如上面所展示那样,在每个文件中加入CVS的ID标记,如果你编辑或修改的文件中没有这个标记,那么请加入,或者是替换原文件中相类似的表现形式(如"Last modified"等等)

  • URL样本:

    你可以参照RFC 2606,使用"www.example.com"作为所有的URL样本。

  • 常量命名:

    常量应该尽量使用大写,为了便于理解,使用下划线分割每个单词。同时,你应该常量所在的包名或者是类名作为前缀。比如,对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则,详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则,你也可以参考一下现有PEAR核心模块的代码。

  • 开始使用PEAR

    • PEAR

      使用PEAR很简单,你只需这样定义你自己的PEAR程序:

      
      require_once "PEAR.php";
      class your_class_name extends PEAR{
      	你的类定义...
      }
      

      当然,你需要遵守前面说的PEAR的编码规则,之后你就可以在你的类内部实现你要做的事情了。下面,我们展开讨论一下,实际上PEAR为我们提供了2个预定义类:
      PEAR:这是PEAR的基类,所有的PEAR扩展都要从它继承派生出来。
      PEAR_Error:PEAR的错误处理的基类,你可以选择派生出自己的错误处理的类。

      一般来说,你不应该直接创建PEAR的实例,而是要自己派生出一个新的类,然后再创建这个新类的实例。作为基类,PEAR给我们提供了一些有用的功能,最主要的就是析构函数和错误处理

      1. 析构函数

        PHP支持构造函数,但是并不支持析构函数,不过,PHP提供register_shutdown_function()这个函数,从而能够在脚本终止前回调注册的函数,因此PEAR利用这个特性,提供了析构函数的仿真。假如你有一个PEAR的子类,叫做mypear,那么在mypear类中,你可以定义一个函数,函数名是下划线加上你的类名,_mypear(),这个函数就是这个类的析构函数。不过这个析构函数和C++中的析构函数不太一样,它不会在对象被删除的时候执行,而是在脚本结束的时候,毕竟这只是一个仿真。由于是使用了register_shutdown_function(),所以在你的析构函数里,打印的信息将不会返回浏览器中。此外,在你的构造函数中,需要调用一下它的父类的构造函数,因为PHP不会自动调用父类的构造函数,而析构函数需要在PEAR的构造函数中注册,我们可以看看PEAR的源代码:

        
        <code>
        function PEAR() {
        if (method_exists($this, "_".get_class($this))) {
            global $_PEAR_destructor_object_list;
            $_PEAR_destructor_object_list[] = &&this;
        }
        if ($this->_debug) {
            printf("PEAR constructor called, class=%s\n",
                   get_class($this));
        }    
        .....
        function _PEAR_call_destructors() {
            global $_PEAR_destructor_object_list;
            if (is_array($_PEAR_destructor_object_list) &&
        sizeof($_PEAR_destructor_object_list)) { reset($_PEAR_destructor_object_list); while (list($k, $objref) = each($_PEAR_destructor_object_list)) { $destructor = "_".get_class($objref); if (method_exists($objref, $destructor)) { $objref->$destructor(); } } //清空已注册的对象列表, //防止重复调用 $_PEAR_destructor_object_list = array(); } } .... register_shutdown_function("_PEAR_call_destructors"); </code>

        上面这段代码展示了PEAR是如何实现析构函数的,在构件函数中,将检查当前类中是否有析构函数,如果有,那么将把当前类的引用放入一个全局列表中,在_PEAR_call_destructors中,则检查这个全

    上一页  [1] [2] [3]  下一页

    Tags:广东网盟  
  •         用户名: 验证码: 验证码,看不清楚请点击刷新验证码 (注“”为必填内容。)


    文章评论: [ 查看全部 ] 网友评论
    关于网盟 | 网站帮助 | 广告合作 | 下载声明 | 友情连接 | 联系方式

    Copyright © 2003-2008 Gdwg.Net. All Rights Reserved .
    中国广东网管联盟设计维护.网站备案:粤ICP备08020875号