創(chuàng)造世界上最簡單的 PHP 開發(fā)模式
更新時間:2006年12月04日 00:00:00 投稿:mdxy-dxy
這篇文章主要介紹了創(chuàng)造世界上最簡單的 PHP 開發(fā)模式
, 5);
$data[asphotlist] = getArticleList(2, "clicks DESC, id DESC", 1, 3);
dbDisconnect();
renderTpl(’list2.htm’, $data);
?>
--------view.htm--------------
<!-- BEGIN content -->
編號:{id}<br>標題:{title}<br>內(nèi)容:{content}
<!-- END content -->
--------view.php------------------
<?php
require_once "config.inc.php";
dbConnect();
$data = array();
$data[content] = getArticle((int)$_GET[id]);
dbDisconnect();
renderTpl(’view.htm’, $data);
?>
八:文章添加實現(xiàn)和模板處理(萬里長征的再來一步)
---------------new.htm-----------
<form action="add.php" method="post">
標題:<input type="text" size="20"><br>
內(nèi)容:<textarea cols="50" rows="4"></textarea><br>
<input type="submit" value="提交">
</form>
---------------new.php------------
<?php
require_once "config.inc.php";
renderTpl(’new.htm’, array());
?>
---------------CoreUtil.php--------------
<?php
function doPostVar(&$data){
$keys = array_keys($data);
foreach($keys as $key){
$data[$key] = addslashes(htmlspecialchars(trim($data[$key])));
if($data[$key]==null) $data[$key] = "$key default";
}
}
?>
---------------add.htm------------
<!-- BEGIN success -->
{content}
<!-- END success -->
---------------add.php------------
<?php
require_once "config.inc.php";
dbConnect();
$data = action();
doPostVar($data);
addArticle($data);
$result[success][content] = "文章添加成功";
dbDisconnect();
renderTpl(’add.htm’, $result);
function action(){
$data = array();
$data[title] = $_POST[title];
$data[content] = $_POST[content];
$data[datetime] = date(’Y-m-d H:i:s’);
$data[pid] = 1;
return $data;
}
?>
這樣一個最最簡單的文章的發(fā)布系統(tǒng)就完成了,不知道對您有什么收獲沒有。
九、總結
程序?qū)懲炅?,大家來總結一下吧,看看實現(xiàn)過程,應該可以說是簡單明了吧。
1、統(tǒng)一實現(xiàn)數(shù)據(jù)庫訪問接口。更改后臺數(shù)據(jù)庫結構的時候,只要簡單的修改相應的接口函數(shù),其他部分的php代碼根本就不用理會。
2、整個系統(tǒng)php代碼和html代碼分開管理,php代碼前臺實現(xiàn)起來也很簡單,你也應該已經(jīng)可以發(fā)現(xiàn)了,基本上是在10行代碼左右。
3、可以任意的擴充功能。用函數(shù)對新的功能進行包裝后,在具體的前臺的查詢顯示頁面中只有加入對相應的函數(shù)的簡單的調(diào)用就可以了,一行代碼就搞定了。
4、代碼復用。通過對功能的包裝,減少了大量的不必要的重復代碼工作,效率應該是提高了很多吧?
5、可以移植性。如果將來做其他的網(wǎng)站,要是遇到了和這個項目相同的實現(xiàn)功能,你可以怎么做呢?把這里的函數(shù)和數(shù)據(jù)庫結構copy過去,修改一下新項目的模板,是不是就可一完成這個新的項目了呢?根本就不用考慮修改php代碼。
6、結構代碼清晰。別人可以輕易的和你共同開發(fā)一個項目,代碼沖突也會減少至最低。
當然實際工作中遇到的情況可能比這個例子復雜的多,但是再復雜的任務都是可以拆分的。
十、后言
不知道大家有沒有學過jsp和servlet這樣的東西,他們有很多優(yōu)秀的設計思路,值得我們?nèi)パ芯亢蚦opy(說句實在話,有時間的都應該去接觸一下java,不是為了學習這門語言而學習,是要學習他的設計模式和優(yōu)秀的功能實現(xiàn)方式)。jsp至少有兩樣東西對我們很有用,action和filter。
action是主要是處理一些事件邏輯,就像add.php中我們定義的action()函數(shù)一樣,用來驗證和獲取表單提交上來的數(shù)據(jù)。當然這樣寫的代碼量和你以前方法的代碼量是一樣的,好像沒有什么區(qū)別,但是它實現(xiàn)了代碼的分離,結構是不是比你以前的方法清晰很多呢?
filter是一個過濾功能,用來過濾和重新定向網(wǎng)絡的訪問,對一些非法的請求和錯誤的請求進行重新的定向。讓我們來通過一個后臺管理的程序來看看他具體的作用。
將下面的這個函數(shù)copy到你的CoreUtil.php里面,這個函數(shù)是一個后臺管理登陸的過濾函數(shù),一個是不在本地緩存web頁面的函數(shù):
function windowNoCache($cache){
if(!$cache || headers_sent()) return ;
header(’Expires: ’.date(’D,d M Y H:i:s’,mktime(0,0,0,1,1,2000)).’ GMT’);
header(’Last-Modified:’.gmdate(’D,d M Y H:i:s’).’ GMT’);
header(’Cache-control: private, no-cache,must-revalidate’);
header(’Pragma: no-cache’);
}
function isAdminLogin(){
if($_SESSION[relogin]=="ok") return;
if($_SESSION[adminuser]!=SYS_ADMIN_NAME){
$_SESSION[relogin] = "ok";
die("<script language=\"javascript\"> top.location=’adminlogin.php’; </script>");
}
$_SESSION[relogin] = "no";
}
然后在 根目錄 底下加上如下的文件
------------adminconfig.inc.php------------
<?php
define(’SYS_ADMIN_NAME’, ’hello’); //后臺管理登陸名
define(’SYS_ADMIN_PASSWORD’, ’hello’); //后臺管理登陸密碼
include ’config.inc.php’;
windowNoCache(true);
isAdminLogin();
?>
------------adminindex.php----------------
<?php
require_once "adminconfig.inc.php";
renderTpl(’adminindex.htm’, array());
?>
------------adminlogin.php------------------
<?php
include "adminconfig.inc.php";
if($_POST[name]==SYS_ADMIN_NAME && $_POST[code]==SYS_ADMIN_PASSWORD){
$_SESSION[adminuser] = SYS_ADMIN_NAME;
header("location: adminindex.php");
}else{
renderTpl(’adminlogin.htm’, array());
}
?>
在 smart/template 目錄下面加上如下的文件
------------adminlogin.htm------------------
<form name="form1" method="post" action="">
<input type="text" name="name" size="20" value="">
<input type="password" name="code" size="20" value="">
<input type="submit" name="Submit" value=" 登 陸 ">
</form>
------------adminindex.htm----------------
<h2>您好歡迎登陸后臺管理</h2>
現(xiàn)在訪問adminindex.php看看會發(fā)生什么事情,然后用adminconfig.inc.php里面設定的用戶名密碼登陸。這種功能在web的很多地方都可以派上用場,應該是一個好的方法吧。其他的后臺訪問的頁面只要也都加載了adminconfig.inc.php ,就不用再考慮后臺訪問權限的問題了。
十一 附錄
簡單的隱藏文件的擴展名,搞暈瀏覽者,讓他不知道你是用什么語言編的程序。
就以list1.php為例子吧,
1、我們修改list1.php的名稱為list1.tmp
2、進入命令行窗口(dos窗口),在web的目錄下面建立一個文件,文件名是“.htaccess”。
3、編輯“.htaccess”文件,輸入以下的內(nèi)容
AddType application/x-httpd-php .tmp
通過瀏覽器訪問list1.tmp,看看是不是ok了。
$data[asphotlist] = getArticleList(2, "clicks DESC, id DESC", 1, 3);
dbDisconnect();
renderTpl(’list2.htm’, $data);
?>
--------view.htm--------------
<!-- BEGIN content -->
編號:{id}<br>標題:{title}<br>內(nèi)容:{content}
<!-- END content -->
--------view.php------------------
<?php
require_once "config.inc.php";
dbConnect();
$data = array();
$data[content] = getArticle((int)$_GET[id]);
dbDisconnect();
renderTpl(’view.htm’, $data);
?>
八:文章添加實現(xiàn)和模板處理(萬里長征的再來一步)
---------------new.htm-----------
<form action="add.php" method="post">
標題:<input type="text" size="20"><br>
內(nèi)容:<textarea cols="50" rows="4"></textarea><br>
<input type="submit" value="提交">
</form>
---------------new.php------------
<?php
require_once "config.inc.php";
renderTpl(’new.htm’, array());
?>
---------------CoreUtil.php--------------
<?php
function doPostVar(&$data){
$keys = array_keys($data);
foreach($keys as $key){
$data[$key] = addslashes(htmlspecialchars(trim($data[$key])));
if($data[$key]==null) $data[$key] = "$key default";
}
}
?>
---------------add.htm------------
<!-- BEGIN success -->
{content}
<!-- END success -->
---------------add.php------------
<?php
require_once "config.inc.php";
dbConnect();
$data = action();
doPostVar($data);
addArticle($data);
$result[success][content] = "文章添加成功";
dbDisconnect();
renderTpl(’add.htm’, $result);
function action(){
$data = array();
$data[title] = $_POST[title];
$data[content] = $_POST[content];
$data[datetime] = date(’Y-m-d H:i:s’);
$data[pid] = 1;
return $data;
}
?>
這樣一個最最簡單的文章的發(fā)布系統(tǒng)就完成了,不知道對您有什么收獲沒有。
九、總結
程序?qū)懲炅?,大家來總結一下吧,看看實現(xiàn)過程,應該可以說是簡單明了吧。
1、統(tǒng)一實現(xiàn)數(shù)據(jù)庫訪問接口。更改后臺數(shù)據(jù)庫結構的時候,只要簡單的修改相應的接口函數(shù),其他部分的php代碼根本就不用理會。
2、整個系統(tǒng)php代碼和html代碼分開管理,php代碼前臺實現(xiàn)起來也很簡單,你也應該已經(jīng)可以發(fā)現(xiàn)了,基本上是在10行代碼左右。
3、可以任意的擴充功能。用函數(shù)對新的功能進行包裝后,在具體的前臺的查詢顯示頁面中只有加入對相應的函數(shù)的簡單的調(diào)用就可以了,一行代碼就搞定了。
4、代碼復用。通過對功能的包裝,減少了大量的不必要的重復代碼工作,效率應該是提高了很多吧?
5、可以移植性。如果將來做其他的網(wǎng)站,要是遇到了和這個項目相同的實現(xiàn)功能,你可以怎么做呢?把這里的函數(shù)和數(shù)據(jù)庫結構copy過去,修改一下新項目的模板,是不是就可一完成這個新的項目了呢?根本就不用考慮修改php代碼。
6、結構代碼清晰。別人可以輕易的和你共同開發(fā)一個項目,代碼沖突也會減少至最低。
當然實際工作中遇到的情況可能比這個例子復雜的多,但是再復雜的任務都是可以拆分的。
十、后言
不知道大家有沒有學過jsp和servlet這樣的東西,他們有很多優(yōu)秀的設計思路,值得我們?nèi)パ芯亢蚦opy(說句實在話,有時間的都應該去接觸一下java,不是為了學習這門語言而學習,是要學習他的設計模式和優(yōu)秀的功能實現(xiàn)方式)。jsp至少有兩樣東西對我們很有用,action和filter。
action是主要是處理一些事件邏輯,就像add.php中我們定義的action()函數(shù)一樣,用來驗證和獲取表單提交上來的數(shù)據(jù)。當然這樣寫的代碼量和你以前方法的代碼量是一樣的,好像沒有什么區(qū)別,但是它實現(xiàn)了代碼的分離,結構是不是比你以前的方法清晰很多呢?
filter是一個過濾功能,用來過濾和重新定向網(wǎng)絡的訪問,對一些非法的請求和錯誤的請求進行重新的定向。讓我們來通過一個后臺管理的程序來看看他具體的作用。
將下面的這個函數(shù)copy到你的CoreUtil.php里面,這個函數(shù)是一個后臺管理登陸的過濾函數(shù),一個是不在本地緩存web頁面的函數(shù):
function windowNoCache($cache){
if(!$cache || headers_sent()) return ;
header(’Expires: ’.date(’D,d M Y H:i:s’,mktime(0,0,0,1,1,2000)).’ GMT’);
header(’Last-Modified:’.gmdate(’D,d M Y H:i:s’).’ GMT’);
header(’Cache-control: private, no-cache,must-revalidate’);
header(’Pragma: no-cache’);
}
function isAdminLogin(){
if($_SESSION[relogin]=="ok") return;
if($_SESSION[adminuser]!=SYS_ADMIN_NAME){
$_SESSION[relogin] = "ok";
die("<script language=\"javascript\"> top.location=’adminlogin.php’; </script>");
}
$_SESSION[relogin] = "no";
}
然后在 根目錄 底下加上如下的文件
------------adminconfig.inc.php------------
<?php
define(’SYS_ADMIN_NAME’, ’hello’); //后臺管理登陸名
define(’SYS_ADMIN_PASSWORD’, ’hello’); //后臺管理登陸密碼
include ’config.inc.php’;
windowNoCache(true);
isAdminLogin();
?>
------------adminindex.php----------------
<?php
require_once "adminconfig.inc.php";
renderTpl(’adminindex.htm’, array());
?>
------------adminlogin.php------------------
<?php
include "adminconfig.inc.php";
if($_POST[name]==SYS_ADMIN_NAME && $_POST[code]==SYS_ADMIN_PASSWORD){
$_SESSION[adminuser] = SYS_ADMIN_NAME;
header("location: adminindex.php");
}else{
renderTpl(’adminlogin.htm’, array());
}
?>
在 smart/template 目錄下面加上如下的文件
------------adminlogin.htm------------------
<form name="form1" method="post" action="">
<input type="text" name="name" size="20" value="">
<input type="password" name="code" size="20" value="">
<input type="submit" name="Submit" value=" 登 陸 ">
</form>
------------adminindex.htm----------------
<h2>您好歡迎登陸后臺管理</h2>
現(xiàn)在訪問adminindex.php看看會發(fā)生什么事情,然后用adminconfig.inc.php里面設定的用戶名密碼登陸。這種功能在web的很多地方都可以派上用場,應該是一個好的方法吧。其他的后臺訪問的頁面只要也都加載了adminconfig.inc.php ,就不用再考慮后臺訪問權限的問題了。
十一 附錄
簡單的隱藏文件的擴展名,搞暈瀏覽者,讓他不知道你是用什么語言編的程序。
就以list1.php為例子吧,
1、我們修改list1.php的名稱為list1.tmp
2、進入命令行窗口(dos窗口),在web的目錄下面建立一個文件,文件名是“.htaccess”。
3、編輯“.htaccess”文件,輸入以下的內(nèi)容
AddType application/x-httpd-php .tmp
通過瀏覽器訪問list1.tmp,看看是不是ok了。
相關文章
PHP5與MySQL數(shù)據(jù)庫操作常用代碼 收集
php最近比較熱門,所以學習php的朋友也越來越多,這里整理下數(shù)據(jù)庫的一些操作,需要的朋友可以參考下。2010-03-03php面向?qū)ο笕ヂ?(六)__set() __get() __isset() __unset()的用法
一般來說,總是把類的屬性定義為private,這更符合現(xiàn)實的邏輯。但是,對屬性的讀取和賦值操作是非常頻繁的,因此在PHP5 中,預定義了兩個函數(shù)“__get()”和“__set()”來獲取和賦值其屬性,以及檢查屬性的“__isset()”和刪除屬性的方法“__unset()”。2009-09-09