仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1894|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网站制作之创立乖巧布局的PHP法式[转]

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:24:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在我开始学习PHP以前,我从未想过要做软件工程,即便是在去听过华育国际的关于软件工程的美好前景后,因为我一直都没有想过要与代码打交道,而是想学好所学专业,做个网络工程师或者是网络安全人员。法式   创立乖巧布局的PHP法式

工夫:2000/10/19 09:06 作者:sharetop 奥索网



很早就想写这篇文章了,但一向没有工夫完成它。不是说我来告知人人若何做,我更但愿本文只是做为一个引子,与人人来会商关于若何创立一个无效地、天真的收集使用法式。

经由了2-3年的收集使用法式开辟任务,我的开辟经历变得加倍活泼了,回过火来看我之前为Geocrawler写的代码,几乎不敢信任这是我的。因为GPL的缘由,在PHPBuilder中的源码也是良莠不齐的。

比来我做为一个有经历的PHP开辟者,一向在帮着写SourceForge,我想这显示出了终究了局的一个局限。好的代码应被分红了多个局部,适合的库及函数挪用,清晰的数据库布局,站点的每个局部与其它局部都是绝对自力的。

然而,这仍不是最好的。假如我可以重做,我将更多的存眷于HTML层与数据层的分别,经由过程对象及清晰的函数库完成这一点。



幽美的图形

我晓得司理们喜好用幽美的图形及图表来描写它们,这将给咱们留下最好的印象。用这类埋没在一个布局后的设法,你可以把你的逻辑与外不雅分别,这意味着任何一个庞杂的法式都可以用"API/Data Access Layer"来表述。

与其你把平安检测、更新的句子等放在HTML层中,不如把它们全体地放在你的API层里。而这个HTML层只含有复杂的函数挪用和前往的数组、对象或自定的其它甚么,和一些数据库的检索了局的纠合等。

假如你如许做了,顶层将长短常的肥大,你可以便利地创立及保护它。

以下的例子中,这个HTML接口中只要一些API层中的函数的直接挪用,一些HTML东西库(它能生成一个弹出框等等),和一些从数据库笼统层中挪用的数据库操作办法(你不需求绑定某一个出格的数据库)。



基本

天真的PHP法式布局最根基的方面有以下几点:

数据库有关性
界面有关性
可移植性
面向对象或最少应由函数库构成

还有其它的?
固然还有一些其它的器材,但我以为那都是太大了,也许你本人能指出它们。


让咱们具体地谈谈它们每条吧。


1、数据库有关性

你从不晓得你的站点将会在哪里运转,固然在你创立它时,你但愿它变和得很大而且有很高的流量。所以你不想把你本人束缚在 MS Access 下面或其它甚么笨重的数据库体系。固然你不克不及立即地拔出各类分歧的数据库体系,然而你有能够很便利地在它们两头切换。你有一些分歧的选择可以把你的数据库挪用笼统出来。在PHP中一个奇异的办法是你不能不为每一个分歧的数据库体系写出分歧的代码,由于在PHP中对每种分歧的数据库的会见函数是分歧的。为了避开这点,你可使用一个笼统地数据库会见层,就象PHPLib、下一个版本的PEAR、及咱们在SourceForge中描写的那样。


2、界面有关性

一个使用法式是它的手艺更主要仍是它所运转的站点更主要?咱们其实不能真正地晓得。我历来不信任这一点--HTML是一个尺度。出格是关于一个收集使用法式而言,界面产生了修改,意味着咱们不能不老是重写。然而假如你的使用法式是很大很庞杂的,你就要为你的数据库创立一些其它的接口了,只需你不想在你的站点法式中各处copy&paste你的会见反省等代码。这也意味着,假如你准确地设计了你的使用法式,你可以很轻易地改写你的站点让它顺应WAP,只需复杂地写一个小的WAP界面,并让它挪用你的数据库会见对象罢了。但如果你没有很好地设计你的法式,你把你的HTML版改成WAP版是一个庞杂的工程。

我把这个设法也带入了SourceForge中,咱们有一个伟大的用户群,为咱们发送/吸收bugs、义务等。起首,咱们指出一切的这些将经由过程咱们的web页面接口,然后,因为Eric Raymond 和其别人给的压力,咱们决意用XML来做数据库的内部接口。

侥幸的是咱们曾在四月已把法式的中心逻辑代码与它的界面分别了。我将试着表达咱们是若何做的,但愿对你的任务有所匡助。

这个SourceForge的bugs跟踪器和其它的一些东西被分红两个库 - 这个HTML库和数据会见库。这个数据会见库反省输出的值的准确性,处置平安校验,而且当做功/掉败时前往TRUE 或 FALSE。

因为简化的缘由,这个例子并没有基于一个完美的对象形式,那样我还要注释这个基类和它的一些衍生类等等,我想这个例子将给你一个最通俗的设法。


HTML 库的例子

<?php

//connect to database
require ("database.php");

//common utils like header/footer HTML
require ("html.php");

//data access library
require ("bug_data.php");

echo site_header("Page Title");

echo "<H4>Updating A Bug</H4>
<P>";

if (bug_data_update($field1,$field2,$field3)) {

echo "<H3>Update Failed!</H3>";

} else {

echo "<H3>Updated Bug Successfully</H3>";
//echo the global error string
echo $feedback;
}

echo site_footer();

?>


Data 会见库的例子

<?php
/**
*
* controls access to updating a bug in the
* database. Validates data and checks security
* Returns true on success, false on failure
*
*/

function bug_data_update ($field1,$field2,$field3) {
//global string to report back errors
global $feedback;

//$field1 and $field2 are required
if (!$field1 || !$field2) {
$feedback="Field 1 And Field 2 Are Required";
return false;
}

//make sure this user has permission to update
if (!user_isadmin()) {
$feedback="You Must Be An Admin To Update a Bug";
return false;
}

//now let's update the bug

$result=db_query("UPDATE bug ".
"SET field2='$field2',".
"field3='$field3' ".
"WHERE id='$field1'");

//now check your query for success/failure
if (!$result) {
//update failed
return false;
} else {
return true;
}
}

?>


3、可移植性

毫无疑问,你不想让你的代码只能用于一个固定的站点,未来咱们能够改动色采的选择、元素的称号、字体或其它一些甚么,如许应设置一个config文件,它被多个页面所包括。更好的概念是你的站点被模块化,你不需求copy&paste任何一个HTML文件,我偏向于把这些放入一个函数,在任何需求的中央挪用它们。

一样的办法可用于数据库的暗码、数据库毗连字串等,这些可以放入一个数据库处置的笼统层中。


4、面向对象/函数化

咱们不是用COBOL开辟,所以这意味着咱们可以把历程分红多个函数的挪用。每一个挪用都是一个主动的行动,有时仅仅是挪用一小段其它的函数并前往这个了局。

一个好的例子是在每个页面校验用户是不是登录,你可以用cookie或查询数据库来完成这个功效,但一旦你想改动你的验证体系,你不能不修改每个页面,其实你应当可以经由过程修改函数库里一个通俗的函数就完成这个变化的。任什么时候候,你写一段代码,假如它将会被用于多于一个中央,你就要思索把它放入一个库里了。


其它还有甚么?

明显还有良多我没有谈到的事,告知我你的设法,我将鄙人一篇文章中来会商它们。出格地是,假如你写了一个大型的、庞杂的使用法式,我想听听你是若何计划它的及你重做时不甚么分歧的设法。

-------------------
作者:Tim Perdue
译者:sharetop(ycshowtop@21cn.com)
来历:www.phpbuilder.net

  参加PHP开发学习,或许只是一次偶然的想法吧!只是想在走向社会之前体验、学习在一个公司或者说是项目团队之中如何去更有效的沟通、交流、共同合作,还有就是为毕业实习找工作增加伐码。
只想知道 该用户已被删除
沙发
发表于 2015-2-4 13:00:53 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
山那边是海 该用户已被删除
板凳
发表于 2015-2-7 12:52:42 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
冷月葬花魂 该用户已被删除
地板
发表于 2015-2-7 14:37:28 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
透明 该用户已被删除
5#
发表于 2015-2-11 09:06:06 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
第二个灵魂 该用户已被删除
6#
发表于 2015-2-14 00:26:47 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
老尸 该用户已被删除
7#
发表于 2015-2-16 11:49:39 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
海妖 该用户已被删除
8#
发表于 2015-2-25 15:29:42 | 只看该作者
爱上php,他也会爱上你。
蒙在股里 该用户已被删除
9#
发表于 2015-3-6 20:20:19 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
愤怒的大鸟 该用户已被删除
10#
发表于 2015-3-11 18:25:34 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
小妖女 该用户已被删除
11#
发表于 2015-3-18 11:13:16 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
小魔女 该用户已被删除
12#
发表于 2015-3-21 21:25:06 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
柔情似水 该用户已被删除
13#
发表于 2015-3-24 06:13:17 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
深爱那片海 该用户已被删除
14#
发表于 2015-3-25 13:53:12 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
活着的死人 该用户已被删除
15#
发表于 2015-3-26 07:13:11 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
金色的骷髅 该用户已被删除
16#
发表于 2015-4-1 07:43:23 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
简单生活 该用户已被删除
17#
发表于 2015-4-1 17:08:53 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
小女巫 该用户已被删除
18#
发表于 2015-4-6 19:08:51 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
不帅 该用户已被删除
19#
发表于 2015-4-10 03:43:15 | 只看该作者
实践是检验自己会不会的真理。
爱飞 该用户已被删除
20#
发表于 2015-4-12 14:28:54 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-10 20:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表