php动态网页制作前言,浅淡PHP生成HTML的思路

"Szdcontent",$result['titles']));

}

$tpl->display('default_1.tpl');

$this_my_f= ob_get_contents(); //此处关键

ob_end_clean();

$filename = "$id.html";

if(tohtmlfile_cjjer($filename,$this_my_f))

echo "生成成功 $filename";

else

echo "生成识别";

}

}

//把生成文件的过程写出函数

function

tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content)

{

if (is_file ($file_cjjer_name)){

@unlink ($file_cjjer_name);

}

$cjjer_handle = fopen ($file_cjjer_name,"w");

if (!is_writable ($file_cjjer_name)){

return false;

}

if (!fwrite ($cjjer_handle,$file_cjjer_content)){

return false;

}

fclose ($cjjer_handle); //关闭指针

return $file_cjjer_name;

}

Posted by kevinwu at 02:51 PM | Permalink | Comments (0) |

TrackBacks (0)

February 10, 2006

PHP unit testing tutorial - Grouping together unit tests and

examples of writing

test cases

PHP unit testing tutorial - Grouping together unit tests and

examples of writing

test cases

Posted by kevinwu at 02:00 PM | Permalink | Comments (0) |

TrackBacks (0)

Download the Simple Test testing framework - Unit tests and mock

objects for PHP

Download the Simple Test testing framework - Unit tests and mock

objects for PHP

Posted by kevinwu at 01:18 PM | Permalink | Comments (0) |

TrackBacks (0)

PHP unit testing tutorial - Creating an example test case in

PHP

PHP unit testing tutorial - Creating an example test case in

PHP

Posted by kevinwu at 01:14 PM | Permalink | Comments (0) |

TrackBacks (0)

February 09, 2006

在PHP中使用SimpleTest进行单元测试

在PHP中使用SimpleTest进行单元测试 - 我与IT不得不说的故事

Posted by kevinwu at 01:15 PM | Permalink | Comments (0) |

TrackBacks (0)

php 常用组件等整理

php 常用组件等整理--树的回忆

Posted by kevinwu at 12:07 PM | Permalink | Comments (0) |

TrackBacks (0)

The three ants::一种PHP设计模式:DPT

The three ants::一种PHP设计模式:DPT

Posted by kevinwu at 11:56 AM | Permalink | Comments (0) |

TrackBacks (0)

PHP单元测试工具PHPUnit初体验[转载]

看了PHPUnit的文档之后基本有了一些了解,

http://pear.php.net/manual/en/packages.php.phpunit.intro.php

工作流程如下:

1.设计你的class/API

2.创建测试程序集

3.实现class/API

4.运行测试

5.修正测试失败或错误,回到第4步。

我们来举个例子:

下面是你要测试的class,其中formatn函数一个取任意数字的5位有效数字的函数。

----------format_number.php-----------

class fo {

function fo() {

}

function formatn($num) {

$num = rtrim($num,"0");

$pos = strpos($num,".");

$num = str_replace(".","",$num);

$count1 = strlen($num);

$num = ltrim($num,"0");

$count2 = strlen($num);

$zeroc = $count1 - $count2;

$num = substr($num,0,6);

$num = round($num/10);

//$num = str_pad($num, 5, "0");

if ($pos !== false) {

$num = str_pad($num, (strlen($num)+$zeroc), "0",

STR_PAD_LEFT);

$dotl = substr($num,0,$pos);

$dotr = substr($num,$pos);

$num = $dotl.".".$dotr;

}

return $num;

}

}

接着创建TestCase,继承自PHPUnit_TestCase

----------testcase.php-----------

require_once 'format_number.php';

require_once 'PHPUnit.php';

class foTest extends PHPUnit_TestCase {

//这个成员变量是存放要测试的类引用

var $abc;

//构造函数

function foTest($name) {

$this->;PHPUnit_TestCase($name);

}

//new一个要测试的类为成员变量abc赋值

function setUp() {

$this->;abc = new fo;

}

//unset要测试的类

function tearDown() {

unset($this->;abc);

}

//自定义的testcase

function testFormatn1() {

//调用要测试的类的方法,结果放到$result变量

$result =

$this->;abc->;formatn("100.234");

//期望结果

$expected = "100.23";

//判断是否相等,这里使用assertTrue方法来判断布而值是否为true。

$this->;assertTrue($result == $expected);

}

function testFormatn2() {

$result =

$this->;abc->;formatn("0.100234");

$expected = "0.10023";

$this->;assertTrue($result == $expected);

}

function testFormatn3() {

$result =

$this->;abc->;formatn("0.100235");

$expected = "0.10024";

$this->;assertTrue($result == $expected);

}

function testFormatn4() {

$result =

$this->;abc->;formatn("0.000100235");

$expected = "0.00010024";

$this->;assertTrue($result == $expected);

}

function testFormatn5() {

$result =

$this->;abc->;formatn("0.000100232");

$expected = "0.00010023";

$this->;assertTrue($result == $expected);

}

function testFormatn6() {

$result =

$this->;abc->;formatn("1343");

$expected = "1343";

$this->;assertTrue($result == $expected);

}

function testFormatn7() {

$result =

$this->;abc->;formatn("1343.01");

$expected = "1343";

$this->;assertTrue($result == $expected);

}

function testFormatn8() {

$result =

$this->;abc->;formatn("1343.05");

$expected = "1343.1";

$this->;assertTrue($result == $expected);

}

function testFormatn9() {

$result =

$this->;abc->;formatn("0");

$expected = "0";

$this->;assertTrue($result == $expected);

}

function testFormatn10() {

$result =

$this->;abc->;formatn("105.2342");

$expected = "105.23";

$this->;assertTrue($result == $expected);

}

function testFormatn11() {

$result =

$this->;abc->;formatn("105.2375");

$expected = "105.24";

$this->;assertTrue($result == $expected);

}

function testFormatn12() {

$result =

$this->;abc->;formatn("0.000523751");

$expected = "0.00052375";

$this->;assertTrue($result == $expected);

}

function testFormatn13() {

$result =

$this->;abc->;formatn("0.000523755");

$expected = "0.00052376";

$this->;assertTrue($result == $expected);

}

}

最后还需要一个运行测试的程序

----------runtest.php-----------

require_once 'testcase.php';

require_once 'PHPUnit.php';

$suite = new PHPUnit_TestSuite("foTest");

$result = PHPUnit::run($suite);

echo $result->;toString();

?>;

现在就可以通过命令行运行这个testcase

php runtest.php

得到结果如下:

TestCase foTest->;testFormatn1() passed

TestCase foTest->;testFormatn2() passed

TestCase foTest->;testFormatn3() passed

TestCase foTest->;testFormatn4() passed

TestCase foTest->;testFormatn5() passed

TestCase foTest->;testFormatn7() passed

TestCase foTest->;testFormatn8() passed

TestCase foTest->;testFormatn9() passed

TestCase foTest->;testFormatn10() passed

TestCase foTest->;testFormatn11() passed

TestCase foTest->;testFormatn12() passed

TestCase foTest->;testFormatn13() passed

TestCase foTest->;testFormatn6() failed: expected

TRUE, actual FALSE

其中testFormatn6的测试失败,

我们就可以去检查一下我们的代码在什么地方出问题了。

补充一点

也可以把assertTrue方法换assertEquals,如下:

function testFormatn6() {

$result =

$this->;abc->;formatn("1343");

$expected = "1343";

$this->;assertEquals($expected, $result);

}

如果失败得到对应的结果会直观一些(可以显示错误的结果):

TestCase foTest->;testFormatn8() failed: expected

1343 , actual 134.

Posted by kevinwu at 11:44 AM | Permalink | Comments (0) |

TrackBacks (0)

用phpUnit帮你调试php程序

调试程序是一个漫长的过程,程序越长越复杂,调试起来就愈加困难。如果你调试的是php程序,那么不妨采用phpUnit,它可以大大加快你的调试速度。

何谓PhpUnit

Phpunit 脱胎于Fred Yankowski编写的著名的Junit测试框架。你可以到它的网站

http://www.ontosys.com/phiki/phpunit

下载最新的版本。你可以利用phpUnit编写一套测试软件包。保证你的程序代码正确无误。只需一步便可自动完成所有的测试。

如果监测到bug,你就可以再写一小段测试代码来找出错误之所在。日后若再有相同的bug出现,只要运行你先前的测试包,马上就可以抓到它。经常运行测试包便可以保证你的程序代码的强壮性。

开 始

假设我们有一个银行账务处理程序。现在需要为Account (账户) 类编写一个测试软件包。

以下是Account类 源代码:

class Account{

var $balance;

function Account($initialBalance=0){

$this->balance = $initialBalance;

}

function withdraw($amount){

$this->balance -= $amount;

}

function deposit($amount){

$this->balance += $amount;

}

function getBalance(){

return $this->balance;

}

function

transferFrom(&$sourceAccount,$amount){

$sourceAccount->withdraw($amount);

$this->deposit($amount);

}

?>

创建一个测试类

首先,我们建立一个测试类AccountTest,它是一个由PhpUnit提供的TestCase的子类。在这个TestCase类中有2个基本的方法:setUp和tearDown。

这2个方法的实现在父类中是空过程,必须由我们自己去重载。其中SetUp

用于进行AccountTest类的初始化处理。在本例中,我们对一些在测试中用到的账号进行初始化。tearDown

则用于AccountTest类的清空处理,在本例中无需使用。因此,就不对它进行重载。这样AccountTester类的源代码如下:

class AccountTester extends TestCase{

var $_ac1;

var $_ac2;

var $_ac3;

var $_ac4;

function AccountTester($name){

$this->TestCase($name); // call parent

constructor

}

function setUp(){

$this->_ac1 = new Account(100); // data for

testWithdraw

$this->_ac2 = new Account(20); // data for

testDeposit

$this->_ac3 = new Account(30); // data for

testTransferFrom

$this->_ac4 = new Account(50);

}

}

?>

加入专门的测试代码

现在,我们可以往向AccountTester类加入测试代码了。

// Make a withdrawal of 25 units from _ac1.

// _ac1's initial balance is 100

function testWithdraw(){

$this->_ac1->withdraw(25);

$this->assert($this->_ac1->getBalance()

== 75); // 100 - 25 = 75

}

// Make a deposit of 10 units into _ac2.

// _ac1's initial balance is 20

function testDeposit(){

$this->_ac2->deposit(10);

$this->assertEquals(30,$this->_ac2->getBalance());

//20 +10 = 30

}

// Tranfers 10 units from _ac3 to _ac4

// _ac3's initial balance is 30

// _ac4's initial balance is 50

function testTransferFrom(){

$this->_ac4->transferFrom(&$this->_ac3,10);

$this->assertEquals(20,$this->_ac3->getBalance(),"Source

account balance

incorrect"); // 30 - 10 = 20

$this->assertEquals(60,$this->_ac4->getBalance(),"Target

account balance

incorrect"); // 50 + 10 = 60

}

?>

这段代码中,assert(如同C里的断言)方法是测试的关键部分。如果在assert中的条件表达式为真,那么测试通过。否则返回错误。由于assert方法大都用于判断两个变量的值是否相等。因此,testclass类引入了assertEquals方法专门实现这个功能。AssertEquals方法中有3个参数,依次分别为:期望值,测试值,两值不相等时返回的消息提示串。

运行测试过程

好了,现在可以运行一下我们编好的测试程序了。我们还必须建立一个runtest.php测试程序来运行所有的测试过程。

runtest.php源代码如下:

$tSuite = new TestSuite(); //creation of the test suite object

创建测试套件对象

$tSuite->addtest(new AccountTester("testWithdraw"));

//Add inidividual tests

$tSuite->addtest(new AccountTester("testDeposit"));

//加入专门测试方法。

$tSuite->addtest(new

AccountTester("testTransferFrom"));

$res = new TextTestResult(); //Creation of the Result

建立一个测试结果类

$tSuite->run(&$res); //Run of the

test 运行测试

$res->report(); //Print results 输出测试结果。

?>

程序说明:

首先创建测试套件对象tSuite,然后逐一加入专门测试方法,addtest方法的参数是测试方法的

再创建测试报告对象,随之运行测试。测试发现错误的结果由TestResult类捕捉,TestResult可以定制一套text/html的错误报告。如果有必要你也可以自己编写输出部分。测试结果封装在TestResult类中,为了输出测试结果。我们采用了phpUnit提供的另外一个类TextTestResult类,它可以输出文本或超文本格式的报告。当然我们也可以自己定制一个新的TestResult的子类控制更复杂的输出格式。

提示和技巧

1、在编写一个新的测试套件完成之后,我们可以先引入一个小小的bug以证明测试套件可以正常运行。

比如,在本例account类中,我们故意引入一个有问题的函数。

function withdraw($amount){

$this->balance -= $Amount;

// 变量名大小写错误,本意是调用$amount参数,结果引入一个新变量$Amount。

}

?>

好,现在让我们运行测试套件,如果不出意外的话,我们将很快发现错误之处。

2.要指出的是,并非所有的方法都需要测试。你只需对相关的方法进行测试。

3.如果在开始编码前就写好测试代码,会使你更进一步明白你的程序到底需要完成什么样的任务。

现在,通过引入phpUnit的测试套件类,你可以发现找bug的时间缩短了,而你作为一个程序员的工作效率也提高了。

那么,尽情享受抓虫子的乐趣吧。祝您好胃口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书展示一个完整网站的设计和实现过程,详细地介绍动态网页设计和制作的技术和相关理论,全书共分为8章,主要内容包括:动态网站设计概述、动态网站编程环境、网站主页设计与PHP基础、网站计数器设计与PHP文件访问、会员注册和管理设计与数据获取、网上社区设计与PHP数据库访问、网上购书与PHP面向对象技术、网站优化与PHP的高级功能等,本书内容系统全面,案例典型实用,讲述直观详尽,非常适合动态网页设计与制作的初学者使用,还可作为高等院校教材和“实用型”人才培训教材。 目录 第1章 动态网站设计概述 1.1 动态网站的特点 1.2 动态网站的运行机制 1.2.1 域名 1.2.2 网页 1.2.3 浏览器 1.2.4 服务器 1.3 动态网站的规划 1.3.1 确定网站的类型 1.3.2 确定网站的主题 1.3.3 确定网站的整体风格 1.3.4 确定网站的内容 1.3.5 规划界面 1.3.6 规划站点的目录结构和链接结构 1.3.7 编写网站策划书 1.4 动态网站开发前的准备 1.4.1 申请域名 1.4.2 接入Internet 1.4.3 选择软硬件平台 1.4.4 选择网站建设服务商 第2章 动态网站编程环境 2.1 动态网页编程环境的构成要素 2.1.1 操作系统 2.1.2 服务器端程序 2.1.3 程序语言 2.1.4 数据库 2.1.5 基于PHP常见动态网站开发环境 2.2 安装和配置Apache 2.2.1 安装Apache前的准备 2.2.2 安装Apache 2.2 13测试Apache 2.2.4 配置Apache 2.2.5 在Windows上管理Apache 2.3 安装和配置PHP 2.3.1 安装PHP前的准备 2.3.2 安装PHP 2.3.3 配置PHP 2.3.4 测试PHP 2.4 安装和配置MySQL 2.4.1 安装MySQL,前的准备 2.4.2 安装MySQL 2.4.3 配置MySQL 2.4.4 在Windows上手动启动和停止MySQL 2.4.5 安装phpMyAdmin 2.5 AppServ组件安装 2.5.1 安装AppSery前的准备 2.5.2 安装。AppSery 2.5.3 测试AppSery 2.5.4 配置Apache 2.5.5 修改MySQL服务器的密码 2.6 PHP的集成开发环境 2.6.1 Dream weaver开发工具 2.6.2 Eclipse开发工具 2.6.3 其他开发工具 第3章 网站主页设计与PHP基础 3.1 网站主页的设计 3.1.1 主页中的页面元素, 3.1.2 规划主页的结构 3.1.3 布局页面版式 3.1.4 用Fireworks创建网页模型 3.2 网站主页的实现 3.2.1 在Dream weaver中创建网站 3.2.2 布局页面元素的样式 3.2.3 实现主页的结构 3.2.4 编辑主页的栏目内容 3.3 网站主页中的链接策略 3.4 PHP语言基础 3.4.1 PHP的程序结构 3.4.2 PHP的句法结构 3.4.3 PHP的数据类型 3.4.4 PHP的控制语句 第4章 网站计数器设计与PHP文件访问 4.1 网站计数器的设计 4.1.1 系统架构 4.1.2 系统设计 4.2 网站计数器的实现 4.2.1 文本输出的网页计数器 4.2.2 图片输出的网页计数器 4.2.3 调试代码 4.3 PHP的函数 4.3.1 PHP函数概述 4.3.2 白定义函数 4.3.3 PHP内置函数 4.4 PHP访问文件 4.4.1 PHP支持的文件系统 4.4..2 PHP访问文件的方法 4.4.3.PHP访问目录 4.5 文件管理器 第5章 会员注册和管理设计与数据获取 5.1 会员注册和管理概述 5.2 会员注册和管理设计 5.2.1 系统架构 5.2.2 系统设计 5.3 注册模块的实现 5.3.1 页面样式表 5.3.2 网页的头部、尾部和数据库连接文件 5.3.3 注册的主页和处理程序 5.3.4 用户申请购书卡页和处理程序 5.3.5 注册用户资料页与处理程序 5.3.6 调试代码 5.4 会员管理模块的实现 5.4.1 页面样式表 5.4.2 网页的头部、尾部和连接数据库 5.4.3 会员管理的主页 5.4.4 用户分级登录页和处理程序 5.4.5 用户购书卡专区页和处理程序 5.4.6 会员修改资料页与处理程序 5.4.7 会员找回密码页与处理程序 5.4..8 购书卡管理页与处理程序 5.4.9 调试代码 5.5 表单数据处理 5.5.1 PHP与表单 5.5.2 表单数据的采集 5.5.3 表单数据处理描述 5.6 cookie与会话管理 5.6.1 数据传递概述 5.6.2 cookie 5.6.3 会话管理 第6章 网上社区设计与PHP数据库访问 6.1 网上社区概述 6.2 留言板的设计 6.2.1 留言板的架构 6.2.2 留言板的设计描述 6.3 留言板的实现 6.3.1 网页的头部、尾部和系统配置文件 6.3.2 留言板的主页——欢迎页 6.3.3 写留言页和回复留言 6.3.4 浏览留言主题页 6.3.5 浏览主题留言页 6.3.6 管理员登录页 6.3.7 屏蔽和删除留言页 6.3.8 调试代码 6.4 聊天室的设计 6.4.1 聊天室的架构 6.4.2 聊天室的设计描述 6.5 聊天室的实现 6.5.1 网页的头部、尾部和系统配置文件 6.5.2 聊天室的主页——登录页 6.5.3 聊天室页 6.5.4 浏览聊天信息页 6.5.5 离开页 6.5.6 注销页 6.5.7 调试代码 6.6 PHP访问数据库 6.6.1 PHP访问数据库的机制 6.6.2 连接数据库服务器 6.6.3 PHP数据库管理函数 6.6.4 PHP查询数据函数 6.6.5 其他数据管理工具 第7章 网上购书与PHP面向对象技术 7.1 网上购书系统分析 7.1.1 系统工作流程分析 7.1.2 系统功能模块分析 7.2 网上购书系统设计 7.2.1 模块的逻辑结构设计 7.2.2 数据库设计 7.2.3 数据操作类设计 7.2.4 界面设计 7.3 网上购书系统实现 7.3.1 数据操作类 7.3.2 图书查询 ’7.3.3 图书显示处理 7.3.4 购物车 7.3.5 订单处理 7.3.6 调试代码 7.4 PHP面向对象技术 7.4.1 基本概念 7.4.2 定义类 7.4.3 创建对象 7.4.4 使用对象的属性和方法 7.4..5 对象的操作 第8章 网站优化与PHP的高级功能 8.1 用户注册安全管理 8.1.1 用户注册安全管理的策略 8.1.2 优化用户注册页面 8.1.3 PHP的GD函数库 8.1.4 图片缩略图 8.2 图像文件上传处理 8.2.1 网站图像存储策略 8.2.2 上传图书封面图像 8.2.3 PHP文件上传处理 8.3 电子邮件处理 8.3.1 PHP电子邮件处理概述 8.3.2 向客户发送邮件 8.3.3 PHP发送电子邮件的方式 8.4 正则表达式 8.4.1 正则表达式简介 8.4.2 常用表单项验证 8.4.3 正则表达式的法则 参考文献
本节课的实验内容主要分为三个板块:HTML,CSS,JavaScript,其中,我对HTML技术的应用得到了熟练运用,并对其他动态网页设计方法进行了大致的了解。HTML是Hypertext Markup Language的英文缩写,即超文本标记语言。它是一种标记语言而非编程语言,由浏览器解释支持。HTML文件是一种文本文件,可以用记事本打开,当然也可以用其他开发工具,比如dream-weaver和VS等等。通过在文本中添加各种标签来告诉浏览器网页要显示的内容,以及以何种表现形式显示。浏览器按照自上而下的顺序解读HTML文件,同时浏览器并不会因为HTML代码出现错误而停止解读。在课上操作上机的时候,老师教会了我们怎么用最简单的TXT文件来设计自己想要设计的网页,并加入了多种元素。CSS是一种用来表现HTML文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 而且CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。JavaScript是我认为我所学的技术里面最高端的一种技术。JavaScript是一种基于对象和事件驱动具有安全性能的脚本语言,使用JavaScript可以轻松的实现与HTML的互操作,并且完成丰富的页面交互效果,它是通过嵌入或调入在标准的HTML语言中实现的,它的出现弥补了HTML的缺陷,是java与HTML折衷的选择。学习本课的目的就是能够建立起自己设计出来的页面,经过几周的教学和自我实践摸索,我已经能创建专属于自己的HTML页面,超额完成自己的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值