标题: PHP编程:用PHP5停止三层开辟 [打印本页] 作者: 海妖 时间: 2015-2-3 23:56 标题: PHP编程:用PHP5停止三层开辟 我的这套线路可能跟许多学习PHP的爱好者不谋而合,这也算是一个循序渐进的学习过程,不过新手不要看到上面的概括就以为学习蛮简单的,默默在此不得不对您稍微泼一下冷水,任何东西其实都不简单。php5 原文:http://www.onlamp.com/pub/a/php/2004/12/09/three_tier.html
Three-Tier Development with PHP 5
by Luis Yordano Cruz
12/09/2004
此文演示了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目次中.
这将生成User.php文件:
<?php
/**
* Table Definition for user
* www.knowsky.com
*/
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
}
?>
它还会为user表形式生成example.ini设置装备摆设文件:
[user]
user_Id = 129
first_Name = 130
last_Name = 130
email = 130
[user__keys]
user_Id = N
Smarty files
It's time to create several files for Smarty:
Smarty文件
如今是创立几个Smarty文件的时分了:
include.php
1 <?
2 require('Smarty.class.php');
3 $smarty = new Smarty;
4 $smarty->template_dir = 'templates/';
5 $smarty->compile_dir = 'templates_c/';
6 $smarty->config_dir = 'configs/';
7 $smarty->cache_dir = 'cache/';
?>
此剧本实例化了一个新Smarty对象.设置Smarty属性.
index.php
1 <?
2 require("include.php");
3 $smarty->assign('TITLE','ACCESS MySQL DATABASE IN THREE TIERS WITH PHP');
4 $smarty->assign('HEADER','WHAT WISH DO ?');
5 $smarty->display('index.tpl');
?>
给Smarty模板分派变量.
insert.php
1 <?
2 require("include.php");
3 $smarty->assign('TITLE','INSERT DATA');
4 $smarty->assign('HEADER','Insert Data');
5 $smarty->assign('data1','First Name');
6 $smarty->assign('data2','Last Name');
7 $smarty->assign('data3','email');
8 $smarty->display('insert.tpl');
?>
添加将在insert.tpl 利用的变量.挪用模板insert.tpl .
save.php
1 <?
2 require_once('DB/DataObject.php');
3 require('configDB.php');
4 $user = DB_DataObject::factory('user');
5 $user->first_Name = $x;
6 $user->last_Name = $y;
7 $user->email = $z;
8 $user_Id = $user->insert();
9 $user->update();
10 echo "<script>location.href='index.php'</script>";
11 ?>
This script saves data by using a PEAR::DataObject for the user table. Line 2 loads the class DataObject, and
line 3 calls configdb.php to connect to the database. Line 4 creates an instance of a user object (see User.php).
Lines 5 through 7 pass the variables collected from the form in insert.tpl ($x, $y, and $z) in order to save the
data in the database. The primary key of the table is an autoincrement column, so it doesn't need a value there.
Line 8 inserts the object, and line 9 carries out an update.
view.php
1 <?
2 require_once('DB/DataObject.php');
3 require('configDB.php');
4 require("include.php");
5 $user = DB_DataObject::factory('user');
6 $user->find();
7 while ($user->fetch()) {
8 $smarty->append('users', array(
'ID' => $user->user_Id,
'FIRSTNAME' => $user->first_Name,
'LASTNAME' => $user->last_Name,
'EMAIL' => $user->email,
));
}
9 $smarty->assign('TITLE','List Users');
10 $smarty->assign('HEADER','List User');
11 $smarty->assign('data0','User_Id');
12 $smarty->assign('data1','First Name');
13 $smarty->assign('data2','Last Name');
14 $smarty->assign('data3','email');
15 $smarty->display('view.tpl');
16 ?>
此剧本显示一切存储在user表中的数据.它加载PEAR::DataObject 和include.php文件(给smarty模板分派变量).
第5行创立一个user对象的工场.第6行履行find()办法.SELECT * FROM user从数据库中检索出了数据,通
过fetch()办法为模板保留数据,一次前往一笔记录.
9 到14行是分派其他的变量给Smarty.