3.PHP静态类

Java代码  

  1. <?php  
  2. /******************8PHP静态类*************/  
  3. class Shtml  
  4. {  
  5.     var $Templet;  
  6.     var $DataSource;  
  7.     var $Dir;  
  8.   
  9.     var $fileName;  
  10.     var $mod;  
  11.     var $handle;  
  12.   
  13.     function Shtml($fileName = "")  
  14.     {  
  15.         $this->fileName = $fileName;  
  16.         $this->mod = "wb";  
  17.         $this->handle = false;  
  18.   
  19.         $this->Templet = "";  
  20.         $this->DataSource = array();  
  21.         $this->Dir = "";  
  22.     }  
  23.   
  24.     // 绑定数据源,参数为一数组  
  25.     function BindData($arr)  
  26.     {  
  27.         $this->DataSource = $arr;  
  28.     }  
  29.   
  30.     // 设置文件存放路径  
  31.     function SetDir($dir)  
  32.     {  
  33.         $this->Dir = $dir;  
  34.     }  
  35.     function SetFileName($fileName)  
  36.     {  
  37.         return $this->fileName = $fileName;  
  38.     }  
  39.   
  40.     function GetMod()  
  41.     {  
  42.         return $this->mod;  
  43.     }  
  44.     function SetMod($mod)  
  45.     {  
  46.         return $this->mod = $mod;  
  47.     }  
  48.     function Open()  
  49.     {  
  50.         if (substr($this->fileName, 0, 1) == "/")  
  51.         $this->fileName = $_SERVER['DOCUMENT_ROOT'] . $this->fileName;  
  52.         if ($this->handle = fopen($this->fileName, $this->mod))  
  53.         return $this->handle;  
  54.         else  
  55.         return false;  
  56.     }  
  57.     function Close()  
  58.     {  
  59.         return fclose($this->handle);  
  60.     }  
  61.     function Write($content)  
  62.     {  
  63.         return fwrite($this->handle, $content);  
  64.     }  
  65.     function MkDir($pathname)  
  66.     {  
  67.         $currentPath = "";  
  68.         str_replace("\\", "/", $pathname);  
  69.         $pathArr = split("/", $pathname);  
  70.         if ($pathArr[0] == "") { //使用绝对路径  
  71.             $currentPath = $_SERVER['DOCUMENT_ROOT'];  
  72.         } else {  
  73.             $currentPath = $_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['PHP_SELF']);  
  74.         }  
  75.         for ($i = 0; $i < count($pathArr); $i++) {  
  76.             if ($pathArr[$i] == "")  
  77.             continue;  
  78.             else  
  79.             if (is_dir($currentPath . " / " . $pathArr[$i]))  
  80.             $currentPath = $currentPath . " / " . $pathArr[$i];  
  81.             else  
  82.             mkdir($currentPath = $currentPath . " / " . $pathArr[$i]);  
  83.         }  
  84.     }  
  85.   
  86.     // 生成静态文件  
  87.     function Create()  
  88.     {  
  89.         $tmp = $this->Templet;  
  90.         foreach ($this->DataSource as $key => $value) {  
  91.             $tmp = str_replace(" < FIELD_" . $key . " > ", $value, $tmp);  
  92.         }  
  93.         $this->MkDir(dirname($this->fileName));  
  94.         $this->Open();  
  95.         $this->Write($tmp);  
  96.         $this->Close();  
  97.     }  
  98. }  
  99.   
  100. function CreateShtml() {  
  101.     ob_start("callback_CteateShtml");  
  102. }  
  103.   
  104. function callback_CteateShtml($buffer) {  
  105.     $page = intval(@$_REQUEST["page"]);  
  106.     $shtml = new Shtml();  
  107.     $shtml->SetFileName($_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['PHP_SELF']) . "/" . basename($_SERVER['PHP_SELF'], ".php") . ($page == 0 ? "" : "_" . strval($page)) . ".html");  
  108.     $shtml->Templet = $buffer;  
  109.     $shtml->Create();  
  110.     return $buffer;  
  111. }  
  112. ?>  

把上面的代码保存为 static.php
执行下面页面 phpfans.php

Java代码  

  1. <?php  
  2. include("static.php");  
  3. CreateShtml();  
  4. ?>  
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  8. <title>无标题文档</title>  
  9. </head>  
  10. <body>  
  11. 撒旦法第三方  
  12. </body>  
  13. </html>  

将会生成一个 phpfans.html的静态页面,如果有参数,则用page来传递 如 phpfans.php?page=1则生成 phpfans_1.html的静态页面

时间: 2024-11-30 13:40:23

3.PHP静态类的相关文章

单例模式与静态类的区别及优势

有时候感觉单例模式与静态类的区别并不是那么明显,都是与数据无关的操作类,即整个过程不能太多的 数据依赖--更准确的说是对象依赖,最好是其只负责处理某一类型(传入的可以是接口)的对象,看看下面这 段代码: interface IPeople { string Name { set;} int Age { set; } string ToStringPeople(); } class PeopleServer { public PeopleServer() { } public void ToStr

C#静态类和静态类成员详解

C#静态类和静态类成员用于创建无需创建类的实例就能够访问的数据和函数.静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化.当类中没有依赖对象标识的数据或行为时,就可以使用静态类. 让我们来看看静态类: 类可以声明为static的,以指示它仅包含静态成员.不能使用 new 关键字创建静态类的实例.静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR) 自动加载. 使用静态类来包含不与特定对象关联的方法.

静态类的原罪

黑格尔有句名言:存在即合理.以此为论据的话,静态类的使用必然有其合理性.不过物极必反,一旦代码过于依赖静态类,其劣化的解决则不可避免.这就好比罂粟作为一种草本植物,有其在药理上的价值,但如果肆无忌惮的大量使用,它就变成了毒品. 什么是静态类 所谓静态类指的是无需实例化成对象,直接通过静态方式调用的类.代码如下: class Math{    public static function ceil($value)    {        return ceil($value);    }    

PHP静态类

[PHP]代码 view source   print? 001 <?php 002 /******************8PHP静态类*************/ 003 class Shtml 004 { 005    var $Templet; 006    var $DataSource; 007    var $Dir; 008   009    var $fileName; 010    var $mod; 011    var $handle; 012   013    func

浅谈.net中的静态类和java中的内部静态类

昨日看<Effective Java>第二条:遇到多个构造器参数时要考虑用构造器.其中,演示通过Builder模式,构建复杂的对象.因为之前对java不是很了解的原因.很疑惑:static class居然可以构建实例?之前,在.net中的静态类一直都是不能实例化的. 查了下资料,果然在java中只有内部静态类才能被实例化,通常称之为嵌套类.而顶级类,也就是没有被嵌套在另一个类的内部的类,不能被标记为static.这个和.net中有所不同,其实,我个人觉得两种语言都有各自的关注点. 从功能上来说

scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类

一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person { var name: String = _ /** * 从构造器 * @param name */ def this(name: String) = { this //注意:从构造器,必须先调用主构造器 this.name = name; } override def toString = { "

java-类是非静态的,而类中的主函数是静态的,静态方法为什么可以调用非静态类的内部类的非静态方法

问题描述 类是非静态的,而类中的主函数是静态的,静态方法为什么可以调用非静态类的内部类的非静态方法 代码如下所示,TestEX是非静态类,而它的主方法是静态的,TestEX类中含有两个内部类,两个内部类也是非静态的,内部类中的方法同样也是非静态的. 问题是:在静态的主方法中,实例化了内部类,为什么就可以调用非静态了呢? 哪个圈绕不出来了,求帮助! public class TestEX{ public class IntegerException extends Exception { Stri

单例模式 静态方法-单例模式 静态类 混用会怎么样 ?

问题描述 单例模式 静态类 混用会怎么样 ? 写工具类时 看到有的老师写成单例模式, 看了一下Apache 的commons-io 中写成静态方法,1.如果我在单例模式中的类 写成静态方法会怎么样?2.如果只写单例模式,那同一个类里面的第二个类调用第一个类,该怎么用?用this.方法1 还是 类名.getInstance().方法1 ?3.如果只是静态方法,那同一个类中的静态方法怎么调用另一个静态方法?this.方法1 ?4.如果既是单例模式,内部方法也是静态方法,第一个方法调用第二个方法时,用

《深入理解Scala》——第1章,第1.3节静态类型和表达力

1.3 静态类型和表达力 深入理解Scala 开发人员中有一个误解,认为静态类型必然导致冗长的代码.之所以如此是因为很多继承自C的语言强制要求程序员必须在代码中多处明确地指定类型.随着软件开发技术和编译器理论的发展,情况已经改变.Scala利用了其中一些技术进步来减少样板(boilerplate)代码,保持代码简洁. Scala做了以下几个简单的设计决策,以提高代码表达力. • 把类型标注(type annotation)换到变量右边. • 类型推断. • 可扩展的语法. • 用户自定义的隐式转