仓酷云

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

[学习教程] PHP网页编程之标准1

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

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

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

x
左手拿着MOTOLOLA右手拿着NOKIA,要多潇洒,有多潇洒,哈哈,终于学会了,但是可能这个时候,又会有人不经意的拍拍肩膀对你说:哥们,别高兴的太早,你还是菜鸟,离学会还差着一大截呢!标准   PHP法式编码标准尺度
最初修正日期: 2000-11-16
PHP编程尺度是经过Todd Hoff允许,基于《C++ 编程尺度》为PHP而重写的,
作者为Fredrik Kristiansen,
利用本尺度,假如您想拷贝一份留做自用的话,那是完整收费的,这也是咱们制造它的缘由。假设您发明了任何的毛病又或是有任何的改善,请您给笔者发一个email,以便笔者将它们兼并到最新更新中去。

目次
引见
尺度化的主要性
注释
认同概念
项目标四个阶段
定名划定规矩
适合的定名
缩写词不要全体利用大写字母
类定名
类库定名
办法定名
类属人命名
办法中参数定名
变量定名
援用变量和函数前往援用
全局变量
界说定名 / 全局常量
静态变量
函数定名
php文件扩大名
文档划定规矩
评价正文
Comments Should Tell a Story
Document Decisions
利用标头申明
Make Gotchas Explicit
Interface and Implementation Documentation
目次文档
庞杂性办理划定规矩
Layering
Open/Closed Principle
Design by Contract
类划定规矩
Different Accessor Styles
别在对象架构期做实践的任务
Thin vs. Fat Class Interfaces
短办法
历程划定规矩
Use a Design Notation and Process
Using Use Cases
Code Reviews
Create a Source Code Control System Early and Not Often
Create a Bug Tracking System Early and Not Often
RCS关头词、更改纪录和汗青纪录划定规矩
Honor Responsibilities
格局化
大括号 {} 划定规矩
缩进/制表符/空格 划定规矩
小括号、关头词和函数 划定规矩
If Then Else 格局
switch 格局
continue,break 和 ? 的利用
每行一个语句
声明块的定位
盛行神话
Promise of OO
杂项
不要难以想象的数字
毛病前往检测划定规矩
不要采取缺省值测试非零值
布尔逻辑类型
凡是防止嵌入式的赋值
重用您和其别人的艰辛任务
利用if (0)来正文内部代码块
其他杂项
--------------------------------------------------------------------------------
引见
尺度化的主要性
尺度化成绩在某些方面上让每一个人头痛,让人人都感觉人人处于一样的地步。这有助于让这些建
议在很多的项目中不休演进,很多公司消费了很多礼拜逐子字逐句的停止争辩。尺度化不是特别
的团体作风,它对当地改进是完整开放的。
长处
当一个项目测验考试着恪守公用的尺度时,会有以下优点:
法式员可以懂得任何代码,弄清法式的情况
新人可以很快的顺应情况
避免新接触php的人出于节俭工夫的需求,自创一套作风并养成毕生的习气
避免新接触php的人一次次的犯一样的毛病
在分歧的情况下,人们可以削减出错的时机
法式员们有了分歧的仇敌 :-)
弱点
如今轮到害处了:
由于尺度由一些不晓得php的人所制订,所以尺度凡是看上去很傻
由于尺度跟我做的纷歧样,所以尺度凡是看上去很傻
尺度下降了发明力
尺度在临时相互协作的人群中是没有需要的
尺度强制太多的格局
总之人们无视尺度
会商
很多项目标经历能得出如许的结论:采取编程尺度可使项目加倍顺遂地完成。尺度是胜利的关
键么?固然不。但它们可以匡助咱们,并且咱们需求咱们能失掉的一切的匡助!厚道说,对一个
细节尺度的大局部争辩次要是源自自信思惟。对一个公道的尺度的很少决意能被说为是缺少手艺
性的话,那只是口胃的缘由而已。所以,要天真的掌握自信思惟,记住,任何项目都取决于团队
协作的勉力。
注释
常规
在本文档中利用“要”字所指的是利用本标准的一切项目需求恪守划定的尺度。
利用“应当”一词的感化是指点项目定制项目细节标准。由于项目必需恰当的包含 (include),
扫除(exclude)或定制(tailor)需求。
利用“可以”一词的感化与“应当”相似,由于它指了然可选的需求。
尺度实行
起首应当在开辟小组的外部找出一切的最主要的元素,或许尺度对你的情况还不敷得当。它能够已概
括了 主要的成绩,也能够还有人对个中的某些成绩暗示激烈的否决。
不管在甚么情形下,只需最初顺遂的话,人们将成熟的分明到这个尺度是公道的,然后其他的法式员们
也会发明它的公道性,并感觉带着一些保存去遵守这一尺度是值得的。
假如没有自愿的协作,可以制订需求:尺度必定要经由代码的查验。
假如没有查验的话,这个处理计划仅仅是一个创立在不准确的基本上的一大群好笑的人。
认同概念
这行欠亨;
或许可行吧,然而它既不适用又无聊;
这是真的,并且我也告知过你啊;
这个是我先想到的;
原本就应当如许。
假如您带着否认的偏见而来对待事物的话,请您坚持开放的思惟。你仍可以做出它是空话的结论,然而做
出结论的办法就是你必需要可以承受分歧的思惟。请您给本人一点工夫去做到它。
项目标四个阶段
数据库布局
设计
数据层
HTML层
--------------------------------------------------------------------------------
定名划定规矩
适合的定名
定名是法式计划的中心。前人信任只需晓得一团体真实的名字就会取得赶过于谁人人之上的难以想象的力
量。只需你给事物想到准确的名字,就会给你和后来的人带来比代码更强的力气。别笑!
名字就是事物在它所处的生态情况中一个久长而深远的了局。总的来讲,只要懂得体系的法式员才干为系
统掏出最适合的名字。假如一切的定名都与其天然相合适,则关系明晰,寄义可以推导得出,常人的推
想也能在乎料当中。
假如你觉察你的定名只要大批能和其对应事物相婚配的话, 最好仍是从头好好再看看你的设计吧。
类定名
在为类(class )定名前起首要晓得它是甚么。假如经由过程类名的供应的线索,你仍是想不起这个类是
甚么 的话,那末你的设计就还做的不敷好。
超越三个词构成的夹杂名是轻易形成体系各个实体间的搅浑,再看看你的设计,测验考试利用(CRC Se-
ssion card)看看该定名所对应的实体是不是有着那末多的功用。
关于派生类的定名应当防止带其父类名的引诱,一个类的名字只与它本身有关,和它的父类叫甚么无
关。
有时后缀名是有效的,例如:假如你的体系利用了代办署理(agent ),那末就把某个部件定名为“下
载代办署理”(DownloadAgent)用以真实的传送信息。
办法和函数定名
凡是每一个办法和函数都是履行一个举措的,所以对它们的定名应当清晰的申明它们是做甚么的:用
CheckForErrors()取代ErrorCheck(),用DumpDataToFile()取代DataFile()。这么做也能够使功效和
数据成为更可辨别的物体。
有时后缀名是有效的:
Max - 寄义为某实体所能付与的最大值。
Cnt - 一个运转中的计数变量确当前值。
Key - 键值。
例如:RetryMax 暗示最多重试次数,RetryCnt 暗示以后重试次数。
有时前缀名是有效的:
Is - 寄义为问一个关于某样事物的成绩。不管什么时候,当人们看到Is就会晓得这是一个成绩。
Get - 寄义为获得一个数值。
Set - 寄义为设定一个数值
例如:IsHitRetryLimit。
缩写词不要全体利用大写字母
不管若何,当碰到以下情形,你可以用首字母大写其他字母小写来取代全体利用大写字母的办法来表
示缩写词。
利用: GetHtmlStatistic.
不利用: GetHTMLStatistic.
来由
当定名含有缩略词时,人们仿佛有着十分分歧的直觉。一致划定是最好,如许一来,定名的寄义就完
全可以预知了。
举个NetworkABCKey的例子,注重C是应当是ABC外面的C仍是key外面的C,这个是很使人隐晦的。有些
人不在乎这些,其别人却很厌恶如许。所以你会在分歧的代码里看到分歧的划定规矩,使得你不晓得怎样
去叫它。
例如
   class FluidOz             // 不要写成 FluidOZ
   class GetHtmlStatistic       // 不要写成 GetHTMLStatistic
--------------------------------------------------------------------------------
类定名
利用大写字母作为词的分隔,其他的字母均利用小写
名字的首字母利用大写
不要利用下划线('_')
来由
依据良多的定名体例,大局部人以为如许是最好的体例。
例如
   class NameOneTwo
   class Name
--------------------------------------------------------------------------------
类库定名
今朝定名空间正在愈来愈普遍的被采取,以免分歧厂商和整体类库间的类名抵触。
当还没有采取定名空间的时分,为了不类名抵触,普通的做法是在类名前加上共同的前缀,两个字符就
可以了,固然多用一些会更好。
例如
John Johnson的数据布局类库可以用Jj做为前缀,以下:
   class JjLinkList
   {
   }
--------------------------------------------------------------------------------
办法定名
采取与类定名分歧的划定规矩
来由
利用一切分歧划定规矩的大局部人发明这是最好的折中举措。
例如
   class NameOneTwo
   {
      function DoIt() {};
      function HandleError() {};
   }
--------------------------------------------------------------------------------
类属人命名
属人命名应当以字符‘m’为前缀。
前缀‘m’后采取于类定名分歧的划定规矩。
‘m’老是在名字的开首起润色感化,就像以‘r’开首暗示援用一样。
来由
前缀'm'避免类属性和办法名产生任何抵触。你的办法名和属性名常常会很相似,出格是存取元素。
例如
   class NameOneTwo
   {
      function VarAbc() {};
      function ErrorNumber() {};
      var mVarAbc;
      var mErrorNumber;
      var mrName;
   }
--------------------------------------------------------------------------------
办法中参数定名
第一个字符利用小写字母。
在首字符后的一切字都依照类定名划定规矩首字符大写。
来由
你可以随时晓得谁人变量对应谁人变量。
你可使用与类名类似的称号而不至于发生重名抵触。
例如
   class NameOneTwo
   {
      function StartYourEngines(
                &$rSomeEngine,
                &$rAnotherEngine);
   }
--------------------------------------------------------------------------------
变量定名
一切字母都利用小写
利用'_'作为每一个词的分界。
来由
经由过程这一路子,代码中变量的感化域是明晰的。
一切的变量在代码中都看起来分歧,轻易识别。
例如
function HandleError($errorNumber)
{
      $error = OsErr();
      $time_of_error = OsErr->getTimeOfError;
      $error_processor = OsErr->getErrorProcessor;
}
--------------------------------------------------------------------------------
援用变量和函数前往援用
援用必需带‘r’前缀
来由
使得类型分歧的变量轻易识别
它可以肯定哪一个办法前往可更改对象,哪一个办法前往不成更改对象。
例如
   class Test
   {
      var mrStatus;
      function DoSomething(&$rStatus) {};
      function &rStatus() {};
   }
--------------------------------------------------------------------------------
全局变量
全局变量应当带前缀‘g’。
来由
晓得一个变量的感化域长短常主要的。
例如
    global $gLog;
    global &$grLog;
--------------------------------------------------------------------------------
界说定名 / 全局常量
全局常量用'_'分隔每一个单词。
来由
这是定名全局常量的传统。你要注重不要与其它的界说相抵触。
例如
define("A_GLOBAL_CONSTANT", "Hello world!");
--------------------------------------------------------------------------------
静态变量
静态变量应当带前缀‘s’。
来由
晓得一个变量的感化域长短常主要的。
例如
function test(){  static $msStatus = 0;
}
--------------------------------------------------------------------------------
函数定名
函数名字采取C GNU的常规,一切的字母利用小写字母,利用'_'朋分单词。
来由
如许可以更容易于辨别相干联的类名。
例如
function some_bloody_function()
{
}
--------------------------------------------------------------------------------
毛病前往检测划定规矩
反省一切的体系挪用的毛病信息,除非你要疏忽毛病。
为每条体系毛病动静界说好体系毛病文本以便include。
--------------------------------------------------------------------------------
大括号 {} 划定规矩
在三种次要的大括号放置划定规矩中,有两种是可以承受的,以下的第一种是最好的:
将大括号放置在关头词下方的同列处:
   if ($condition)       while ($condition)
   {                     {
      ...                   ...
   }                     }
传统的UNIX的括号划定规矩是,首括号与关头词同业,尾括号与关头字同列:
   if ($condition) {     while ($condition) {
      ...                   ...
   }                     }
来由
引发激烈争辩的非准绳的成绩可经由过程折中的举措处理,两种办法恣意一种都是可以承受的,但是关于大
多半人来讲更喜好第一种。缘由就是心思研讨进修范围的器材了。
关于更喜好第一种还有着更多的缘由。假如您利用的字符编纂器撑持括号婚配功效的话(例如vi),最
主要的就是有一个好的款式。为何?咱们说当你有一大块的法式并且想晓得这一大块法式是在哪儿结
束的话。你先移到入手下手的括号,按下按钮编纂器就会找到与之对应的停止括号,例如:
     if ($very_long_condition && $second_very_long_condition)
     {
        ...
     }
     else if (...)
     {
    ...
     }
从一个法式块挪动到另外一个法式块只需求用光标和你的括号婚配键就能够了,不需求往返的挪动到行末去
找婚配的括号。
--------------------------------------------------------------------------------
缩进/制表符/空格 划定规矩
利用制表符缩进。
利用三到四个空格为每条理缩进。
不再利用只需一有需求就缩排的办法。对与最大缩进层数,并没有一个固定的礼貌,假设缩进层数大于四或
者五层的时分,你可以思索着将代码因数分化(factoring out code)。
来由
很多编程者撑持制表符。
Tabs was invented for a rason
当人们利用差别太大的制表符尺度的话,会使浏览代码变得很吃力。
如斯多的人情愿限制最大的缩进层数,它凡是从未被看做是一件任务。咱们信任法式员们会明智的选择嵌套
的深度。
例如
   function func()
   {
      if (something bad)
      {
         if (another thing bad)
         {
            while (more input)
            {
            }
         }
      }
   }
--------------------------------------------------------------------------------
小括号、关头词和函数 划定规矩
不要把小括号和关头词紧贴在一同,要用空格离隔它们。
不要把小括号和函数名紧贴在一同。
除非需要,不要在Return前往语句中利用小括号。
来由
关头字不是函数。假如小括号紧贴着函数名和关头字,两者很轻易被当作是一体的。
例如
    if (condition)
    {
    }
    while (condition)
    {
    }
    strcmp($s, $s1);
    return 1;
--------------------------------------------------------------------------------
RCS关头词、更改纪录和汗青纪录划定规矩
直接利用RCS关头词的划定规矩必需改动,个中包含利用CVS等相似的撑持RCS作风关头词的源代码掌握体系:
别在文件之内利用 RCS 关头词。
别在文件中保留汗青修正纪录。
别在文件中保留作者信息纪录。
来由
The reasoning is your source control system already keeps all this information. There is no reason to clutter up source files with duplicate information that:
makes the files larger
makes doing diffs difficult as non source code lines change
makes the entry into the file dozens of lines lower in the file which makes a search or jump necessary for each file
is easily available from the source code control system and does not need embedding in the file
When files must be sent to other organizations the comments may contain internal details that should not be exposed to outsiders.
--------------------------------------------------------------------------------
别在对象架构期做实践的任务
别在对象架构期做真实的任务,在架构期初始化变量和/或做任何不会有掉误的工作。
当完成对象架构时,为该对象创立一个Open()办法,Open()办法应当以对象实体定名。
来由
机关不克不及前往毛病 。
例如
   class Device
   {
      function Device()    { /* initialize and other stuff */ }
      function Open()  { return FAIL; }
   };
   $dev = new Device;
   if (FAIL == $dev->Open()) exit(1);
--------------------------------------------------------------------------------  会PHP吗?会,我会把一加一的运算写在函数里,然后调用啦!
再现理想 该用户已被删除
沙发
发表于 2015-2-4 12:16:17 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-2-9 22:33:18 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
admin 该用户已被删除
地板
发表于 2015-2-13 13:12:22 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
只想知道 该用户已被删除
5#
发表于 2015-3-1 22:31:19 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-11 00:09:03 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
活着的死人 该用户已被删除
7#
发表于 2015-3-11 03:52:56 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
若天明 该用户已被删除
8#
发表于 2015-3-11 14:44:40 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
乐观 该用户已被删除
9#
 楼主| 发表于 2015-3-18 20:05:58 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
因胸联盟 该用户已被删除
10#
发表于 2015-3-20 21:18:53 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
海妖 该用户已被删除
11#
发表于 2015-3-21 12:21:32 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
金色的骷髅 该用户已被删除
12#
发表于 2015-3-21 17:56:38 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
若相依 该用户已被删除
13#
发表于 2015-3-21 23:28:33 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
灵魂腐蚀 该用户已被删除
14#
发表于 2015-3-23 18:12:39 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
柔情似水 该用户已被删除
15#
发表于 2015-3-24 18:34:56 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
变相怪杰 该用户已被删除
16#
发表于 2015-4-4 18:58:01 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
飘飘悠悠 该用户已被删除
17#
发表于 2015-4-6 05:11:16 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
莫相离 该用户已被删除
18#
发表于 2015-4-10 06:26:49 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
第二个灵魂 该用户已被删除
19#
发表于 2015-4-12 04:38:01 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
飘灵儿 该用户已被删除
20#
发表于 2015-4-25 23:31:10 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-13 22:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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