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

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

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/17
下载{$ArticleTitle}原创论文样式
有的脚本都需要在 PHP V5 下运行。

  当在命令行运行此脚本时,能看到下列结果:

% php text1.php 
tempdir


  一切都在预料之中,该对象读取 config.txt 文件,然后为 TemplateDirectory 配置项获得正确的值。

  但对于设置一个配置值,应该怎么做呢?在此类中建立一个新方法及一些新的测试代码,就能够得到这个功能,如下所示。

  清单 8. text2.php

<?php
class Configuration
{
 

 function __get($id) { return $this->items[ $id ]; }

 function __set($id,$v) { $this->items[ $id ] = $v; }
 function parse() {  }
}
$c = new Configuration();
echo( $c->TemplateDirectory."\n" );
$c->TemplateDirectory = 'foobar';
echo( $c->TemplateDirectory."\n" );
?> 

  现在,有了一个 __set 函数,它是 __get 函数的 “堂兄弟”。该函数并不为一个成员变量获取值,当要设置一个成员变量时,才调用这个函数。底部的测试代码设置值并打印出新值。

  下面是在命令行中运行此代码时出现的结果:

% php text2.php 
tempdir
foobar


  太好了!但如何能将它存储到文件中,从而将使这个改动固定下来呢?为此,需要写文件并读取它。用于写文件的新函数,如下所示。

  清单 9. text3.php

<?php
class Configuration
{
 

 function save()
 {
  $nf = '';
  $fh = fopen( $this->configFile, 'r' );
  while( $l = fgets( $fh ) )
  {
   if ( preg_match( '/^#/', $l ) == false )
   {
    preg_match( '/^(.*?)=(.*?)$/', $l, $found );
    $nf .= $found."=".$this->items[$found]."\n";
   }
   else
   {
    $nf .= $l;
   }
  }
  fclose( $fh );
  copy( $this->configFile, $this->configFile.'.bak' );
  $fh = fopen( $this->configFile, 'w' );
  fwrite( $fh, $nf );
  fclose( $fh );
 }
}

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

  新的 save 函数巧妙地操作 config.txt。我并没有仅用更新过的配置项重写文件(这样会移除掉注释),而是读取了这个文件并灵活地重写了 $items 数组中的内容。这样的话,就保留了文件中的注释。

  在命令行运行该脚本并输出文本配置文件中的内容,能够看到下列输出。

  清单 10. 保存函数输出

% php text3.php 
tempdir
foobar
% cat config.txt
# My application's configuration file
Title=My App
TemplateDirectory=foobar


  原始的 config.txt 文件现在被新值更新了。

  XML 配置文件

  尽管文本文件易于阅读及编辑,但却不如 XML&nbs

网学推荐

免费论文

原创论文

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