当前位置: 网学 > 编程文档 > PHP > 正文

构建可配置PHP应用程序的正确方式

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/17
下载{$ArticleTitle}原创论文样式
更新过的 Configuration 类。

  清单 15. db1.php

<?php
require_once( 'DB.php' );
$dsn = 'mysql://root:password@localhost/config';
$db =& DB::Connect( $dsn, array() );
if (PEAR::isError($db)) { die($db->getMessage()); }

class Configuration
{
 private $configFile = 'config.xml';
 private $items = array();
 function __construct() { $this->parse(); }
 function __get($id) { return $this->items[ $id ]; }
 function __set($id,$v)
 {
  global $db;
  $this->items[ $id ] = $v;
  $sth1 = $db->prepare( 'DELETE FROM settings WHERE name=?' );
  $db->execute( $sth1, $id );
  if (PEAR::isError($db)) { die($db->getMessage()); }
  $sth2 = $db->prepare('INSERT INTO settings ( id, name, value ) VALUES ( 0, ?, ? )' );
  $db->execute( $sth2, array( $id, $v ) );
  if (PEAR::isError($db)) { die($db->getMessage()); }
 }

 function parse()
 {
  global $db;
  $doc = new DOMDocument();
  $doc->load( $this->configFile );
  $cn = $doc->getElementsByTagName( "config" );
  $nodes = $cn->item(0)->getElementsByTagName( "*" );
  foreach( $nodes as $node )
  $this->items[ $node->nodeName ] = $node->nodeValue;
  $res = $db->query( 'SELECT name,value FROM settings' );
  if (PEAR::isError($db)) { die($db->getMessage()); }
  while( $res->fetchInto( $row ) ) {
   $this->items[ $row[0] ] = $row;
  }
 }
}

$c = new Configuration();
echo( $c->TemplateDirectory."\n" );
$c->TemplateDirectory = 'new foo';
echo( $c->TemplateDirectory."\n" );
?> 

  这实际上是一个混合的文本/数据库解决方案。请仔细观察 parse 方法。该类首先读取文本文件来获取初始值,然后读取数据库,进而将键更新为最新的值。在设置一个值后,键就从数据库中移除掉,并添加一条具有更新过的值的新记录。

  观察 Configuration 类如何通过本文的多个版本来发挥作用是一件有趣的事,该类能从文本文件、XML 及数据库中读取数据,并一直保持相同的接口。我鼓励您在开发中也使用具有相同稳定性的接口。对于对象的客户机来说,这项工作具体是如何运行的是不明确的。关键的是对象与客户机之间的契约。

  什么是配置及怎样配置

  在配置过多的配置选项与配置不足间找一个适当的中间点是一件困难的事。可以肯定的是,任何数据库配置(例如,数据库名称、数据库用户用及密码)都应该是可配置的。除此之外,我还有一些基本

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号