原文:http://www.onlamp.com/pub/a/php/2004/12/09/three_tier.html
Three-Tier Development with PHP 5 by Luis Yordano Cruz
此文演示了PHP三层开发的强大功能,PEAR::DB_DataObject用于业务逻辑,Smarty 用于显示逻辑,这里假设你熟悉了HTML,Smarty,PEAR::DB_DataObject,Mysql和PHP5.如果你需要补充知识,下面的文章解释了一些原理:
用PHP DataObject简化业务逻辑
Smarty简介:一个PHP模板引擎
PHP可伸缩性:Myth
你应该已安装和配置好了Apache,MySQL,和PHP5(或者IIS,MySQL5和 PHP)
PEAR::DB_DataObject
PEAR::DB_DataObject 是一个用户数据库访问的抽象API.它是一个基于PEAR::DB的SQL构建器和数据建模层.它 把数据库表映射到PHP类并且提供像SELECT,INSERT,UPDATE,和DELETE这样的公共SQL函数.这使即使不了 解SQL的开发者也可以写出好的数据库访问代码,并且鼓励演示逻辑和业务逻辑有一个清晰的分离.
(DB_OO已经移动到的PEAR,现在是DB_DataObject,如果你有老的代码要更新,查看关于从老的db_oo代码更新到 DB_DataObjects的注释).
相关阅读
Upgrading to PHP 5 By Adam Trachtenberg
Table of Contents Index
Sample Chapter
Read Online–Safari Search this book on Safari:
Only This Book All of Safari
Code Fragments only
DataObject performs two tasks. First, it builds SQL statements based on the object’s variables and the builder methods. Second, it acts as a datastore for a table row. There’s a core class, which you extend for each of your tables so that you put the data logic inside the data classes. There’s also an included Generator to make your configuration files and your base classes.
DataObject 执行两个任务.第一,它构建基于对象变量的SQL语句和构建器方法.第二,它作为数据库表的数据存 储.这里有个核心类,对于每个表继承它,以使你把数据逻辑放入数据类中.这里还包括一个生成器,
DataObject 极大的简化了数据库访问代码,它使开发大型的,数据驱动的站点更加容易.
At present, Alan Knowles, the lead developer of PEAR::DB_DataObject, is working on a new project called DBDO, a C implementation of the PEAR package DB_DataObjects, based on libgda. His goal is to create the next generation of PEAR::DB_DataObjects.
SMARTY
Smarty是一个从web页演示中分离内容的PHP模板引擎.它使用GPL许可.
Large projects commonly separate the role of the graphic designer from that of the programmer. However, programming in PHP has the tendency to combine those two roles in a person and inside the code. This can bring difficulties when it comes time to change some part of the page’s design. If the page mixes content and presentation, the developer has to crawl through the program to find the presentation. Smarty helps to solve this problem.
Combining the Two The first thing to do when starting this project is to create a workspace in which to store the project’s code. Then it’s time to configure PEAR::DB_DataObject to connect to the MySQL database MySQL (name: example), map the database tables to PHP classes, and then configure Smarty for the presentation tier for the user. Here are those steps in more detail:
创建工作环境
创建一个叫做dataobjects的目录.
从命令行安装 PEAR::DB_DataObject,键入:
>pear install Date >pear install DB_DataObject >pear list INSTALLED PACKAGES: =================== PACKAGE VERSION STATE Archive_Tar 1.2 stable Console_Getopt 1.2 stable DB 1.6.5 stable DB_DataObject 1.7.1 stable *(Goal) Date 1.4.3 stable Mail 1.1.3 stable Net_SMTP 1.2.6 stable Net_Socket 1.0.2 stable PEAR 1.3.1 stable PHPUnit 1.0.1 stable XML_Parser 1.2.0 stable XML_RPC 1.1.0 stable |
安装和配置Smarty
从下载开始,(我使用2.6.5版的Smarty)解压到你自己的目录.从它的libs目录中把 Smarty.class.php,
Smarty_Compiler.class.php, Config_File.class.php, and debug.tpl文件复制到dataobjects目录中.
还要复制core和 plugins目录和其中所有的内容.创建几个新的目录,命名为templates, templates_c, configs,
和cache.
最后 dataobjects目录包含:
dataobjects |---- cache |---- configs |---- core |---- plugins |---- templates |---- templates_c 11/10/2004 11:17 a.m. <DIR> . 11/10/2004 11:17 a.m. <DIR> .. 11/10/2004 11:17 a.m. <DIR> cache 11/10/2004 11:17 a.m. <DIR> configs 11/10/2004 11:17 a.m. <DIR> core 11/10/2004 11:17 a.m. <DIR> plugins 11/10/2004 11:17 a.m. <DIR> templates 11/10/2004 11:17 a.m. <DIR> templates_c 07/09/2004 09:48 a.m. 13,105 Config_File.class.php 16/04/2004 03:03 a.m. 5,117 debug.tpl 10/09/2004 02:15 p.m. 65,350 Smarty.class.php 10/09/2004 07:14 p.m. 90,924 Smarty_Compiler.class.php 4 archivos 174,496 bytes 8 dirs 6,699,454,464 bytes libres |
创建数据库
创建一个名为example的数据库,它包含一个名为User的表,不必担心模式,稍后我们会创建.
配置 PEAR::DB_DataObject
要构建数据对象,创建下面的文件
< br/>configDB.php <?php require_once 'DB/DataObject.php'; $config = parse_ini_file('example.ini',TRUE); foreach($config as $class=>$values) { $options = &PEAR::getStaticProperty($class,'options'); $options = $values; } ?> |
此脚本基于 example配置文件中的值创建一个到数据库的连接,显示如下.
example.ini
[DB_DataObject]
database = mysql://root:@localhost/example
schema_location = /dataobjects/schema/
class_location = /dataobjects/
require_prefix = /dataobjects/
class_prefix = DataObjects_
extends_location = DB/DataObject.php
extends = DB_DataObject
自动构建数据库模式
包含两个过程,构建数据库的对象-关系映射,和从example数据库user表中自动创建一个类.在表中的所有字段
名将成为类成员变量.
创建适当的模式:
C:\PHP\PEAR\DB\DataObject>C:\PHP\php.exe createTables.php\
C:\dataobjects\example.ini
这将生成User.php文件:
<?php /** * Table Definition for user */ require_once 'DB/DataObject.php'; class DataObjects_User extends DB_DataObject { //START_AUTOCODE /* the code below is auto generated do not remove the above tag */ var $__table = 'user'; // table name var $user_Id; // int(11) not_null primary_key auto_increment var $first_Name; // string(30) not_null var $last_Name; // string(40) not_null var $email; // string(100) not_null /* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjects_User',$k,$v); } /* the code above is auto generated do not remove the tag below */ //END_AUTOCODE } ?> |