一個常用的php-class類

<?
class myclass
{
 
var $temp_db;
 
 
var $files=array();            //模板文件名
 var $file_ext=".htm";          //模板文件後輟
 var $file_dir="template";      //模板文件目錄
 
 
var $unknown="remove";         //若沒有找到替換的變量的處理方法
                                //del 刪除變量   undo 保持不變  comment 替換為注釋

                                                                    
 
var $halt_on_error="yes";       //在發生錯誤時停止程序
 
 
var $error="";                 //最後一個錯誤內容
 
 
var $vars=array();              //存放元素索引
 var $vals=array();              //存放元素值
                                                                       
 
 
function myclass($dir="",$ext="")
 {
  
if($dir)
     
$this->file_dir=$dir;
    
if($ext)
     
$this->file_ext=$ext;
 }

//================連接數據庫
 
 
function con($host,$user,$psw)
 {
  
if(!@mysql_connect($host,$user,$psw))
    {
     
$this->showmes("<font color=\"#FF0000\"><ul><li>無法連接數據庫!</ul></li></font>");
     exit();
    }
 }

//================選擇數據庫
 function close()
 {
  
return mysql_close();
 } 
 
//================選擇數據庫 
 
 
function selectdb($dbname)
 {
  
if(!@mysql_select_db($dbname))
    {
     
$this->showmes("<font color=\"#FF0000\">無法連接數據庫!</font>");
     exit();    
    }
 }

//================連接選擇數據庫 
 
 
function c_all($host,$user,$psw,$dbname)
 {
  
$this->con($host,$user,$psw);
    
$this->selectdb($dbname);
    
mysql_query("SET NAMES UTF8");
 }

//================執行SQL查詢
 
 
function query($query)
 {
  
return mysql_query($query);
 }

//================獲取查詢結果
 
 
function fetch_arr($query)
 {
  
return mysql_fetch_array($query);
 } 
 
 
function fetch_row($query)
 {
  
return mysql_fetch_row($query);
 } 

//================獲取結果數目
 function num_rows($query)
 {
  
return mysql_num_rows($query);
 }

//================獲取結果數目
 function errno()
 {
  
return mysql_errno();
 }
 
//================輸出錯誤
 
 
function wrong($mes)
 {
  
$this->error=$mes;
    
echo "<font color=\"#FF0000\">".$mes."</font>";
    
    
if($this->halt_on_error=="yes")
     
exit();
 }
 
//================輸出信息
 function showmes($mes)
 {
  
$f=array("f1"=>"showmessage");
    
$this->setfile($f);
    
$this->setvars("message",$mes);
    
$this->replace($f);
    
$this->p($f);
 }

//================模板處理   模板數據庫
 
 
function maketemp_db($name)
 {
  
$tag_name=str_replace(",","','",$name);
  
$query="select * from td_sh_temp where tag_name in('$tag_name')";
    
$vars=explode(",",$name);
    
$res=$this->query($query);
  
for($i=0;$i<sizeof($vars);$i++)
    {
   
$x=$this->fetch_arr($res);
     
$this->temp_db[$x['tag_name']]="<!-- ".$x['tag_name']." -->\n".$x['tag_value']."\n<!-- /".$x['tag_name']." -->\n\n";
    }
 }

//******************************************** 
//================模板處理   模板文件

 //-----------------在$vars和$vals中設定變量
    //若有多個變量設置,則設置在$handle數組中 

 function setvars($handle,$value="")
 {
  
if(!is_array($handle))
    {
     
if($value=="")
     {
      
$this->wrong("變量".$handle."的值為空!");
        
return false;
     }
     
$this->vars[$handle]=$handle;
     
$this->vals[$handle]=$value;
    }
    
else
    {
     
reset($handle);
     
while(list($k,$v)=each($handle))
     {
      
$this->vars[$k]=$k;
        
$this->vals[$k]=$v;
     }
    }
 }

 
//-----------------設置模板文件名
 function filename($file)
 {
    
$filename=$this->file_dir."/".$file.$this->file_ext;
    
return $filename;
 }
 
 
//-----------------將文件名存放在數組$files中
    //若有多個文件,則設置在$handle數組中 

 function setfile($handle,$file="")
 {
  
if(is_array($handle))
    {
     
while(list($k,$v)=each($handle))
     {
      
$this->files[$k]=$this->filename($v);
     }
    }
    
else
    {
     
if($file=="")
     {
      
$this->wrong("文件名為空!");
     }
     
else
     {
      
$this->files[$handle]=$this->filename($file);
     }
    }
 }
 
 
//------------------讀取變量$file中$handle對應的文件,將存放在數組$vars和$vals中
 function loadfile($handle)
 {
  
if(!is_array($handle))
    {
     
if(isset($this->vars[$handle])&&isset($this->vals[$handle]))
      
return true;
     
if(!isset($this->files[$handle])) //沒有設定$handle對應的文件
     {
      
$this->wrong("句柄".$handle."沒有設置!");
     }
     
else
     {
      
$f=@file($this->files[$handle]);  //讀入文件
      $f=@implode("",$f);
      
if(empty($f))
      {
       
$this->wrong("文件".$this->files[$handle]."為空或者不存在!");
         
return false;
      }
      
$this->setvars($handle,$f);
      
return true;
     }
    }
    
else
    {
     
while(list($k,$v)=each($handle))
     {
      
$this->loadfile($k);
     }
    }
 }

 
//-----------------變量替換1
 function rep($handle)
 {
     
$str=$this->vals[$handle];
     
reset($this->vars);
     
reset($this->vals);
     
while(list($k,$v)=each($this->vars))
     {
      
$str=str_replace("{*".$this->vars[$k]."*}",$this->vals[$k],$str);
      
$str=str_replace("{**".$this->vars[$k]."**}",$this->vals[$k],$str);        
     }
     
return $str
 }
 
 
//-----------------變量替換2
 function replace($handle,$target="")
 {
    
$this->loadfile($handle);
    
if(!is_array($handle))
    {
     
$str=$this->rep($handle);

   
$this->setvars($target,$str);
    }
    
else
    {
     
reset($handle);
     
while(list($k,$v)=each($handle))
     {
      
$str=$this->rep($k);
        
$this->setvars($k,$str);
     }
    }
 }
 
 
//-----------------塊變量替換
 function block_rep($s_b_name,$handle//$s_b_name 表示原文件中的Block name ,$handle 表示設置後的替換名稱
 {
  
$str = $this->rep($s_b_name);
    
    
if(empty($this->vals[$handle]))
      
$repped = "";
    
else
      
$repped = $this->vals[$handle];
        
    
$repped .= $str;
    
$this->setvars($handle,$repped);
 } 
  
 
//-----------------刪除無法替換的內容
 function rem($str)
 {
  
$str=eregi_replace("\{\*[_a-z]+\*\}","&nbsp;",$str);
  
$str=eregi_replace("\{\*\*[_0-9a-z]+\*\*\}","",$str);    
    
return $str;
 }
     
 
//-----------------顯示 
 function p($target)
 {
  
if(!is_array($target))
    {
     
echo $this->rem($this->vals[$target]);
    }
    
else
    {
     
while(list($k,$v)=each($target))
     {
      
echo $this->rem($this->vals[$k])."\n";
     }
    } 
 }
 
 
//------------------設置 Block
  function setblock($parent,$block_name,$name)  //將$parent中的名稱為$block_name的Block替換成{*$name*}
    {
    
if(!$this->loadfile($parent))
        {
      
$this->wrong("無法裝載".$parent."");
      
return false;
    }

    
$str=$this->vals[$parent];
    
$reg = "/<!--\s+Begin $block_name\s+-->(.*)<!--\s+End $block_name\s+-->/sm";
    
preg_match_all($reg,$str,$m);
    
$str=preg_replace($reg,"{*$name*}",$str); //置換Block部分為 {*$name*} 形式
                                              //    $this->setvars($name,$m[1][0]);

        $this->setvars($block_name,$m[1][0]);
    
$this->setvars($parent,$str);
  }
}
?>
posted @ 2007-12-11 08:21  Athrun  阅读(336)  评论(0编辑  收藏  举报