<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.blueidea.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SnakeZero</id>
		<title>Blueidea - 用户贡献 [zh-cn]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.blueidea.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SnakeZero"/>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/SnakeZero"/>
		<updated>2026-04-29T13:55:51Z</updated>
		<subtitle>用户贡献</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=8461</id>
		<title>Protoss</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=8461"/>
				<updated>2011-05-10T10:38:45Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protoss是一款轻量级的PHP框架，目前由Snake.Zero进行日常维护。&lt;br /&gt;
{{notice|content=Protoss读作：['prɔtɔs]。Protos在希腊语中是“第一”的意思,而“proto-”也是英文中表示&amp;quot;第一 主要&amp;quot;之义的前缀。}}&lt;br /&gt;
&lt;br /&gt;
== 框架简介 ==&lt;br /&gt;
=== [[Protoss/简介|框架介绍]] ===&lt;br /&gt;
Protoss是一款轻量的PHP框架，前身Snake Framework，历经5年积累，纯构思时间超过2年。Protoss的编写目的，是为了解决开发中的代码不规范、流程不规范、文档不规范这些问题，因为他和一些第三方助手类或快速开发框架相比，更多的'''不是'''提供了什么，反而更多是'''什么不能做，不能怎么做'''。&lt;br /&gt;
&lt;br /&gt;
Protoss实现的一个真正框架该有的“框架”效果。和很多以快速开发的框架一样，Protoss提供了一些助手类，这些类大大减小了开发中重复劳动的部分。然而更重要的是，它是一款以约束开发行为为目的的框架项目。它在文件、类、函数、数据表的设计上，做了相对严格的限制，使用户项目整体简洁、清晰而且方便阅读。&lt;br /&gt;
对于员工流动大的公司，减少了新员工的学习和交流成本。&lt;br /&gt;
&lt;br /&gt;
另：在设计之初，Protoss的目的是成为一个真正意义上的框架，因此不光包括代码方面，同时还包括了日常文档，工作流程的规范化。但是目前而言，在一些小公司中，这些相对复杂的规范化流程的推进还是有些困难。&lt;br /&gt;
&lt;br /&gt;
{{notice|content=完整版概述：[[Protoss/简介|Protoss is not a underwear!]]&amp;lt;br/&amp;gt;推荐阅读：[[Protoss/为什么Protoss会更少的干涉业务逻辑|为什么Protoss会更少的干涉业务逻辑]]}}&lt;br /&gt;
&lt;br /&gt;
=== 框架特性 ===&lt;br /&gt;
*摈弃PHP的MySQL扩展，转而使用更高效且面向对象的MySQLi&lt;br /&gt;
*Model层被重视，不再是简单的ORM映射，而是真正意义上的数据模型层&lt;br /&gt;
*相对严格的命名规范，代码更具可读性&lt;br /&gt;
*更安全的访问权限控制&lt;br /&gt;
*更强的代码生成工具&lt;br /&gt;
&lt;br /&gt;
== 快速入门指南 ==&lt;br /&gt;
本快歌入门指南假定读者对PHP,MySQL有一定基础。知道MVC或有其他框架开发经验为佳，但是在后面也会有一定介绍。&lt;br /&gt;
=== 轻松编程从这里开始 ===&lt;br /&gt;
==== [[Protoss/MVC简介|MVC简介]] ====&lt;br /&gt;
==== [[Protoss/目录结构|基于Protoss的项目特征和目录结构]] ====&lt;br /&gt;
==== [[Protoss/运行|轻松访问到控制器]] ====&lt;br /&gt;
&lt;br /&gt;
=== Hello world，我的第一个应用软件 ===&lt;br /&gt;
==== [[Protoss/控制器|编写控制器]] ====&lt;br /&gt;
==== [[Protoss/控制器/动作|控制器中的Action]] ====&lt;br /&gt;
==== [[Protoss/控制器/内部方法|我有许多小秘密--private和protected]] ====&lt;br /&gt;
&lt;br /&gt;
=== 模板引擎 ===&lt;br /&gt;
==== [[Protoss/模板/载入模板|很给力！自动引入模板]] ====&lt;br /&gt;
==== [[Protoss/模板|视图也可以继承]] ====&lt;br /&gt;
==== [[Protoss/模板|看，这些元素其实是可以拆分和复用的]] ====&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss/模型|了解数据模型]] ===&lt;br /&gt;
==== [[Protoss/模型/mysqli|建立MySQLi数据模型]] ====&lt;br /&gt;
==== [[Protoss/模型/rest|Rest风格的数据模型]] ====&lt;br /&gt;
&lt;br /&gt;
== 项目开发权威指南 ==&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss权威指南/名词解释|名词解释]] ===&lt;br /&gt;
&lt;br /&gt;
== 附录 ==&lt;br /&gt;
=== 附录 A. 代码编写与开发流程规范 ===&lt;br /&gt;
==== [[Protoss/规范/概述|概述]] ====&lt;br /&gt;
Subversion是一个自由/开源版本控制系统，它管理文件和目录可以超越时间。[[Protoss/规范/概述|更多(利用版本控制进行协助开发)]]&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/代码规范|Protoss代码编写规范]] ====&lt;br /&gt;
【[[Protoss/规范/代码规范|点此阅读Protoss代码编写规范，推荐]]】&lt;br /&gt;
&lt;br /&gt;
==== 工作模型 ====&lt;br /&gt;
  checkout（检出）项目&lt;br /&gt;
  更新文件或目录  update&lt;br /&gt;
  修改文件或目录  commit(提交)变更&lt;br /&gt;
  增加文件或目录  add(增加) &lt;br /&gt;
  文件或目录      commit(提交)&lt;br /&gt;
  删除文件或目录  commit(提交)上一级目录&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/操作指南|操作指南]] ====&lt;br /&gt;
当你在为项目工作时，首先请更新你的工作拷贝来获取那些你上次更新以来其他开发人员对项目做的新改动。[[Protoss/规范/操作指南|更多]]&lt;br /&gt;
&lt;br /&gt;
==== 开发与测试部署流程 ====&lt;br /&gt;
开发人员使用trunk目录进行当前版本开发.在模拟环境中进行单元测试.[[Protoss/规范/测试和部署|更多]]&lt;br /&gt;
==== [[Protoss/规范/核心提示|核心提示]] ====&lt;br /&gt;
*负责而谨慎地提交自己的代码&lt;br /&gt;
*保持原子性的提交&lt;br /&gt;
*不要提交自动生成的文件&lt;br /&gt;
*不要提交不能通过编译的代码&lt;br /&gt;
*不要提交自己不明白的代码&lt;br /&gt;
*提前宣布自己的工作计划&lt;br /&gt;
*对提交的信息采用明晰的标注&lt;br /&gt;
&lt;br /&gt;
=== 附录 B. 版权信息 ===&lt;br /&gt;
以下版权信息适用于Protoss项目，包括但不限于代码部分。（注：代码仅指Protoss框架代码，不包含开发人员基于此框架的应用程序，各应用程序开发者享有该程序代码的一切权利）&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2009-2010 Snake.Zero&lt;br /&gt;
&lt;br /&gt;
=== 附录 C. 更新记录 ===&lt;br /&gt;
* 2009年6月&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Protoss 0.1beta  Protoss诞生&amp;lt;br/&amp;gt;&lt;br /&gt;
* 2010年6月&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Protoss 0.5beta  经过一年的开发和测试，第一个稳定版本&amp;lt;br/&amp;gt;&lt;br /&gt;
* 2010年7月24日&amp;amp;nbsp;                     Protoss 0.5.1 Mysqli模型驱动新特性&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=PHP%E9%9B%B6%E5%85%A5%E9%97%A8&amp;diff=7806</id>
		<title>PHP零入门</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=PHP%E9%9B%B6%E5%85%A5%E9%97%A8&amp;diff=7806"/>
				<updated>2011-02-27T09:13:18Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 序言 ==&lt;br /&gt;
无论你以前是否有过网页编程或者其他软件开发经验，只要你会开机，本书都会让你学会如何使用PHP进行编程。&amp;lt;br/&amp;gt;&lt;br /&gt;
本书适合从头学习，并不适合作为工具书。如果你以前接触过网页编程，也请耐心从头看起，本书会以通俗易懂的事例让你了解或者说是更深入理解PHP的网页编程。&lt;br /&gt;
&lt;br /&gt;
== 认识浏览器与网页 ==&lt;br /&gt;
本章节介绍浏览器访问服务器的通讯过程。GET,POST,UPDATE,DELTE四种访问方式。&lt;br /&gt;
== 浅尝HTML ==&lt;br /&gt;
简要的介绍HTML知识，目的是让读者对HTML代码有初步的认识。&lt;br /&gt;
== 数据类型 ==&lt;br /&gt;
PHP中的数据类型，基础知识。&lt;br /&gt;
== 基本语法 ==&lt;br /&gt;
PHP的基本语法，包括赋值，简单的数据操作。&lt;br /&gt;
== 第一个应用程序 ==&lt;br /&gt;
以一个应用程序带入学习，通过分析应用程序的功能来讨论如何实现，并简述思路。&lt;br /&gt;
== 数据库 ==&lt;br /&gt;
数据如何存储，以对象的方式看待事物。&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=PHP%E9%9B%B6%E5%85%A5%E9%97%A8&amp;diff=7645</id>
		<title>PHP零入门</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=PHP%E9%9B%B6%E5%85%A5%E9%97%A8&amp;diff=7645"/>
				<updated>2011-02-06T04:38:14Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 认识浏览器与网页 ==&lt;br /&gt;
本章节介绍浏览器访问服务器的通讯过程。GET,POST,UPDATE,DELTE四种访问方式。&lt;br /&gt;
== 浅尝HTML ==&lt;br /&gt;
简要的介绍HTML知识，目的是让读者对HTML代码有初步的认识。&lt;br /&gt;
== 数据类型 ==&lt;br /&gt;
PHP中的数据类型，基础知识。&lt;br /&gt;
== 基本语法 ==&lt;br /&gt;
PHP的基本语法，包括赋值，简单的数据操作。&lt;br /&gt;
== 第一个应用程序 ==&lt;br /&gt;
以一个应用程序带入学习，通过分析应用程序的功能来讨论如何实现，并简述思路。&lt;br /&gt;
== 数据库 ==&lt;br /&gt;
数据如何存储，以对象的方式看待事物。&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=PHP%E9%9B%B6%E5%85%A5%E9%97%A8&amp;diff=7644</id>
		<title>PHP零入门</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=PHP%E9%9B%B6%E5%85%A5%E9%97%A8&amp;diff=7644"/>
				<updated>2011-02-06T04:34:22Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：以内容“== 认识浏览器与网页 == == 浅尝HTML == == 数据类型 == == 基本语法 == == 第一个应用程序 ==”创建新页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 认识浏览器与网页 ==&lt;br /&gt;
== 浅尝HTML ==&lt;br /&gt;
== 数据类型 ==&lt;br /&gt;
== 基本语法 ==&lt;br /&gt;
== 第一个应用程序 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=PyGTK%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%9F%BA%E4%BA%8EPyGTK%E7%9A%84%E7%A8%8B%E5%BA%8F&amp;diff=7426</id>
		<title>PyGTK开发指南/第一个基于PyGTK的程序</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=PyGTK%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%9F%BA%E4%BA%8EPyGTK%E7%9A%84%E7%A8%8B%E5%BA%8F&amp;diff=7426"/>
				<updated>2010-12-22T09:57:11Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：创建新页面为 ''''First steps in PyGTK'''  In this part of the PyGTK programming tutorial, we will do our first steps in programming. We will create simple programs.  Simple example  The first…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''First steps in PyGTK'''&lt;br /&gt;
&lt;br /&gt;
In this part of the PyGTK programming tutorial, we will do our first steps in programming.&lt;br /&gt;
We will create simple programs.&lt;br /&gt;
&lt;br /&gt;
Simple example&lt;br /&gt;
&lt;br /&gt;
The first code example is a very simple one.&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=PyGTK%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97&amp;diff=7425</id>
		<title>PyGTK开发指南</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=PyGTK%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97&amp;diff=7425"/>
				<updated>2010-12-22T09:56:19Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PyGTK tutorial&lt;br /&gt;
{|class=&amp;quot;Tablelist&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Introduction&lt;br /&gt;
|-&lt;br /&gt;
|[[PyGTK开发指南/第一个基于PyGTK的程序|第一个基于PyGTK的程序]]&lt;br /&gt;
|-&lt;br /&gt;
|Layout management&lt;br /&gt;
|-&lt;br /&gt;
|Menus&lt;br /&gt;
|-&lt;br /&gt;
|Toolbars&lt;br /&gt;
|-&lt;br /&gt;
|Signals &amp;amp; events&lt;br /&gt;
|-&lt;br /&gt;
|Widgets&lt;br /&gt;
|-&lt;br /&gt;
|Widgets II&lt;br /&gt;
|-&lt;br /&gt;
|Advanced Widgets&lt;br /&gt;
|-&lt;br /&gt;
|Dialogs&lt;br /&gt;
|-&lt;br /&gt;
|Pango&lt;br /&gt;
|-&lt;br /&gt;
|Pango II&lt;br /&gt;
|-&lt;br /&gt;
|Drawing with cairo&lt;br /&gt;
|-&lt;br /&gt;
|Drawing with cairo II&lt;br /&gt;
|-&lt;br /&gt;
|Snake&lt;br /&gt;
|-&lt;br /&gt;
|Custom widget&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=PyGTK%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97&amp;diff=7423</id>
		<title>PyGTK开发指南</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=PyGTK%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97&amp;diff=7423"/>
				<updated>2010-12-22T09:48:55Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：创建新页面为 'PyGTK tutorial  	Introduction 	第一个基于PyGTK的程序 	Layout management 	Menus 	Toolbars 	Signals &amp;amp; events 	Widgets 	…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PyGTK tutorial&lt;br /&gt;
&lt;br /&gt;
	Introduction&lt;br /&gt;
	[[PyGTK开发指南|第一个基于PyGTK的程序|第一个基于PyGTK的程序]]&lt;br /&gt;
	Layout management&lt;br /&gt;
	Menus&lt;br /&gt;
	Toolbars&lt;br /&gt;
	Signals &amp;amp; events&lt;br /&gt;
	Widgets&lt;br /&gt;
	Widgets II&lt;br /&gt;
	Advanced Widgets&lt;br /&gt;
	Dialogs&lt;br /&gt;
	Pango&lt;br /&gt;
	Pango II&lt;br /&gt;
	Drawing with cairo&lt;br /&gt;
	Drawing with cairo II&lt;br /&gt;
	Snake&lt;br /&gt;
	Custom widget&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=%E5%88%86%E7%B1%BB:Python&amp;diff=7422</id>
		<title>分类:Python</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=%E5%88%86%E7%B1%BB:Python&amp;diff=7422"/>
				<updated>2010-12-22T09:46:27Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Python (发音:[ 'paiθ(ə)n; (US) 'paiθɔn ])，是一种面向对象的解释性的计算机程序设计语言，也是一种功能强大而完善的通用型语言，已经具有十多年的发展历史，成熟且稳定。Python 具有脚本语言中最丰富和强大的类库，足以支持绝大多数日常应用。&lt;br /&gt;
&lt;br /&gt;
Python的历史&lt;br /&gt;
&lt;br /&gt;
Python的创始人为Guido van Rossum。1989年圣诞节期间，在阿姆斯特丹，Guido为了打发圣诞节的无趣，决心开发一个新的脚本解释程序，做为 ABC 语言的一种继承。之所以选中 Python（大蟒蛇的意思）作为程序的名字，是因为他是一个Monty Python的飞行马戏团的爱好者。&lt;br /&gt;
ABC是由Guido参加设计的一种教学语言。就Guido本人看来，ABC 这种语言非常优美和强大，是专门为非专业程序员设计的。但是ABC语言并没有成功，究其原因，Guido 认为是非开放造成的。Guido 决心在 Python 中避免这一错误（的确如此，Python 与其它的语言如C、C++和Java结合的非常好）。同时，他还想实现在 ABC 中闪现过但未曾实现的东西。&lt;br /&gt;
就这样，Python在Guido手中诞生了。实际上，第一个实现是在Mac机上。可以说，Python是从ABC发展起来，主要受到了Modula-3（另一种相当优美且强大的语言，为小型团体所设计的）的影响。并且结合了Unix shell和C的习惯。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://www.blueidea.com/tech/program/2007/5181.asp (Python)web.py的简介 ]&lt;br /&gt;
&lt;br /&gt;
[[PyGTK开发指南]]&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7066</id>
		<title>Protoss</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7066"/>
				<updated>2010-08-31T23:53:07Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 附录 C. 更新记录 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protoss是一款轻量级的PHP框架，目前由Snake.Zero进行日常维护。&lt;br /&gt;
{{notice|content=Protoss读作：['prɔtɔs]。Protos在希腊语中是“第一”的意思,而“proto-”也是英文中表示&amp;quot;第一 主要&amp;quot;之义的前缀。}}&lt;br /&gt;
&lt;br /&gt;
== 框架简介 ==&lt;br /&gt;
=== [[Protoss/简介|框架介绍]] ===&lt;br /&gt;
Protoss是一款轻量的PHP框架，前身Snake Framework，历经5年积累，纯构思时间超过2年。Protoss的编写目的，是为了解决开发中的代码不规范、流程不规范、文档不规范这些问题，因为他和一些第三方助手类或快速开发框架相比，更多的'''不是'''提供了什么，反而更多是'''什么不能做，不能怎么做'''。&lt;br /&gt;
&lt;br /&gt;
Protoss实现的一个真正框架该有的“框架”效果。和很多以快速开发的框架一样，Protoss提供了一些助手类，这些类大大减小了开发中重复劳动的部分。然而更重要的是，它是一款以约束开发行为为目的的框架项目。它在文件、类、函数、数据表的设计上，做了相对严格的限制，使用户项目整体简洁、清晰而且方便阅读。&lt;br /&gt;
对于员工流动大的公司，减少了新员工的学习和交流成本。&lt;br /&gt;
&lt;br /&gt;
另：在设计之初，Protoss的目的是成为一个真正意义上的框架，因此不光包括代码方面，同时还包括了日常文档，工作流程的规范化。但是目前而言，在一些小公司中，这些相对复杂的规范化流程的推进还是有些困难。&lt;br /&gt;
&lt;br /&gt;
{{notice|content=完整版概述：[[Protoss/简介|Protoss is not a underwear!]]&amp;lt;br/&amp;gt;推荐阅读：[[Protoss/运行|为什么Protoss会更少的干涉业务逻辑]]}}&lt;br /&gt;
&lt;br /&gt;
=== 框架特性 ===&lt;br /&gt;
*摈弃PHP的MySQL扩展，转而使用更高效且面向对象的MySQLi&lt;br /&gt;
*Model层被重视，不再是简单的ORM映射，而是真正意义上的数据模型层&lt;br /&gt;
*相对严格的命名规范，代码更具可读性&lt;br /&gt;
*更安全的访问权限控制&lt;br /&gt;
*更强的代码生成工具&lt;br /&gt;
&lt;br /&gt;
== 快速入门指南 ==&lt;br /&gt;
本快歌入门指南假定读者对PHP,MySQL有一定基础。知道MVC或有其他框架开发经验为佳，但是在后面也会有一定介绍。&lt;br /&gt;
=== 轻松编程从这里开始 ===&lt;br /&gt;
==== [[Protoss/MVC简介|MVC简介]] ====&lt;br /&gt;
==== [[Protoss/目录结构|基于Protoss的项目特征和目录结构]] ====&lt;br /&gt;
==== [[Protoss/运行|轻松访问到控制器]] ====&lt;br /&gt;
&lt;br /&gt;
=== Hello world，我的第一个应用软件 ===&lt;br /&gt;
==== [[Protoss/控制器|编写控制器]] ====&lt;br /&gt;
==== [[Protoss/控制器/动作|控制器中的Action]] ====&lt;br /&gt;
==== [[Protoss/控制器/内部方法|我有许多小秘密--private和protected]] ====&lt;br /&gt;
&lt;br /&gt;
=== 模板引擎 ===&lt;br /&gt;
==== [[Protoss/模板/载入模板|很给力！自动引入模板]] ====&lt;br /&gt;
==== [[Protoss/模板|视图也可以继承]] ====&lt;br /&gt;
==== [[Protoss/模板|看，这些元素其实是可以拆分和复用的]] ====&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss/模型|了解数据模型]] ===&lt;br /&gt;
==== [[Protoss/模型/mysqli|建立MySQLi数据模型]] ====&lt;br /&gt;
==== [[Protoss/模型/rest|Rest风格的数据模型]] ====&lt;br /&gt;
&lt;br /&gt;
== 项目开发权威指南 ==&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss权威指南/名词解释|名词解释]] ===&lt;br /&gt;
&lt;br /&gt;
== 附录 ==&lt;br /&gt;
=== 附录 A. 代码编写与开发流程规范 ===&lt;br /&gt;
==== [[Protoss/规范/概述|概述]] ====&lt;br /&gt;
Subversion是一个自由/开源版本控制系统，它管理文件和目录可以超越时间。[[Protoss/规范/概述|更多(利用版本控制进行协助开发)]]&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/代码规范|Protoss代码编写规范]] ====&lt;br /&gt;
【[[Protoss/规范/代码规范|点此阅读Protoss代码编写规范，推荐]]】&lt;br /&gt;
&lt;br /&gt;
==== 工作模型 ====&lt;br /&gt;
  checkout（检出）项目&lt;br /&gt;
  更新文件或目录  update&lt;br /&gt;
  修改文件或目录  commit(提交)变更&lt;br /&gt;
  增加文件或目录  add(增加) &lt;br /&gt;
  文件或目录      commit(提交)&lt;br /&gt;
  删除文件或目录  commit(提交)上一级目录&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/操作指南|操作指南]] ====&lt;br /&gt;
当你在为项目工作时，首先请更新你的工作拷贝来获取那些你上次更新以来其他开发人员对项目做的新改动。[[Protoss/规范/操作指南|更多]]&lt;br /&gt;
&lt;br /&gt;
==== 开发与测试部署流程 ====&lt;br /&gt;
开发人员使用trunk目录进行当前版本开发.在模拟环境中进行单元测试.[[Protoss/规范/测试和部署|更多]]&lt;br /&gt;
==== [[Protoss/规范/核心提示|核心提示]] ====&lt;br /&gt;
*负责而谨慎地提交自己的代码&lt;br /&gt;
*保持原子性的提交&lt;br /&gt;
*不要提交自动生成的文件&lt;br /&gt;
*不要提交不能通过编译的代码&lt;br /&gt;
*不要提交自己不明白的代码&lt;br /&gt;
*提前宣布自己的工作计划&lt;br /&gt;
*对提交的信息采用明晰的标注&lt;br /&gt;
&lt;br /&gt;
=== 附录 B. 版权信息 ===&lt;br /&gt;
以下版权信息适用于Protoss项目，包括但不限于代码部分。（注：代码仅指Protoss框架代码，不包含开发人员基于此框架的应用程序，各应用程序开发者享有该程序代码的一切权利）&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2009-2010 Snake.Zero&lt;br /&gt;
&lt;br /&gt;
=== 附录 C. 更新记录 ===&lt;br /&gt;
* 2009年6月&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Protoss 0.1beta  Protoss诞生&amp;lt;br/&amp;gt;&lt;br /&gt;
* 2010年6月&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Protoss 0.5beta  经过一年的开发和测试，第一个稳定版本&amp;lt;br/&amp;gt;&lt;br /&gt;
* 2010年7月24日&amp;amp;nbsp;                     Protoss 0.5.1 Mysqli模型驱动新特性&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7065</id>
		<title>Protoss</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7065"/>
				<updated>2010-08-31T23:51:32Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 附录 C. 更新记录 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protoss是一款轻量级的PHP框架，目前由Snake.Zero进行日常维护。&lt;br /&gt;
{{notice|content=Protoss读作：['prɔtɔs]。Protos在希腊语中是“第一”的意思,而“proto-”也是英文中表示&amp;quot;第一 主要&amp;quot;之义的前缀。}}&lt;br /&gt;
&lt;br /&gt;
== 框架简介 ==&lt;br /&gt;
=== [[Protoss/简介|框架介绍]] ===&lt;br /&gt;
Protoss是一款轻量的PHP框架，前身Snake Framework，历经5年积累，纯构思时间超过2年。Protoss的编写目的，是为了解决开发中的代码不规范、流程不规范、文档不规范这些问题，因为他和一些第三方助手类或快速开发框架相比，更多的'''不是'''提供了什么，反而更多是'''什么不能做，不能怎么做'''。&lt;br /&gt;
&lt;br /&gt;
Protoss实现的一个真正框架该有的“框架”效果。和很多以快速开发的框架一样，Protoss提供了一些助手类，这些类大大减小了开发中重复劳动的部分。然而更重要的是，它是一款以约束开发行为为目的的框架项目。它在文件、类、函数、数据表的设计上，做了相对严格的限制，使用户项目整体简洁、清晰而且方便阅读。&lt;br /&gt;
对于员工流动大的公司，减少了新员工的学习和交流成本。&lt;br /&gt;
&lt;br /&gt;
另：在设计之初，Protoss的目的是成为一个真正意义上的框架，因此不光包括代码方面，同时还包括了日常文档，工作流程的规范化。但是目前而言，在一些小公司中，这些相对复杂的规范化流程的推进还是有些困难。&lt;br /&gt;
&lt;br /&gt;
{{notice|content=完整版概述：[[Protoss/简介|Protoss is not a underwear!]]&amp;lt;br/&amp;gt;推荐阅读：[[Protoss/运行|为什么Protoss会更少的干涉业务逻辑]]}}&lt;br /&gt;
&lt;br /&gt;
=== 框架特性 ===&lt;br /&gt;
*摈弃PHP的MySQL扩展，转而使用更高效且面向对象的MySQLi&lt;br /&gt;
*Model层被重视，不再是简单的ORM映射，而是真正意义上的数据模型层&lt;br /&gt;
*相对严格的命名规范，代码更具可读性&lt;br /&gt;
*更安全的访问权限控制&lt;br /&gt;
*更强的代码生成工具&lt;br /&gt;
&lt;br /&gt;
== 快速入门指南 ==&lt;br /&gt;
本快歌入门指南假定读者对PHP,MySQL有一定基础。知道MVC或有其他框架开发经验为佳，但是在后面也会有一定介绍。&lt;br /&gt;
=== 轻松编程从这里开始 ===&lt;br /&gt;
==== [[Protoss/MVC简介|MVC简介]] ====&lt;br /&gt;
==== [[Protoss/目录结构|基于Protoss的项目特征和目录结构]] ====&lt;br /&gt;
==== [[Protoss/运行|轻松访问到控制器]] ====&lt;br /&gt;
&lt;br /&gt;
=== Hello world，我的第一个应用软件 ===&lt;br /&gt;
==== [[Protoss/控制器|编写控制器]] ====&lt;br /&gt;
==== [[Protoss/控制器/动作|控制器中的Action]] ====&lt;br /&gt;
==== [[Protoss/控制器/内部方法|我有许多小秘密--private和protected]] ====&lt;br /&gt;
&lt;br /&gt;
=== 模板引擎 ===&lt;br /&gt;
==== [[Protoss/模板/载入模板|很给力！自动引入模板]] ====&lt;br /&gt;
==== [[Protoss/模板|视图也可以继承]] ====&lt;br /&gt;
==== [[Protoss/模板|看，这些元素其实是可以拆分和复用的]] ====&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss/模型|了解数据模型]] ===&lt;br /&gt;
==== [[Protoss/模型/mysqli|建立MySQLi数据模型]] ====&lt;br /&gt;
==== [[Protoss/模型/rest|Rest风格的数据模型]] ====&lt;br /&gt;
&lt;br /&gt;
== 项目开发权威指南 ==&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss权威指南/名词解释|名词解释]] ===&lt;br /&gt;
&lt;br /&gt;
== 附录 ==&lt;br /&gt;
=== 附录 A. 代码编写与开发流程规范 ===&lt;br /&gt;
==== [[Protoss/规范/概述|概述]] ====&lt;br /&gt;
Subversion是一个自由/开源版本控制系统，它管理文件和目录可以超越时间。[[Protoss/规范/概述|更多(利用版本控制进行协助开发)]]&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/代码规范|Protoss代码编写规范]] ====&lt;br /&gt;
【[[Protoss/规范/代码规范|点此阅读Protoss代码编写规范，推荐]]】&lt;br /&gt;
&lt;br /&gt;
==== 工作模型 ====&lt;br /&gt;
  checkout（检出）项目&lt;br /&gt;
  更新文件或目录  update&lt;br /&gt;
  修改文件或目录  commit(提交)变更&lt;br /&gt;
  增加文件或目录  add(增加) &lt;br /&gt;
  文件或目录      commit(提交)&lt;br /&gt;
  删除文件或目录  commit(提交)上一级目录&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/操作指南|操作指南]] ====&lt;br /&gt;
当你在为项目工作时，首先请更新你的工作拷贝来获取那些你上次更新以来其他开发人员对项目做的新改动。[[Protoss/规范/操作指南|更多]]&lt;br /&gt;
&lt;br /&gt;
==== 开发与测试部署流程 ====&lt;br /&gt;
开发人员使用trunk目录进行当前版本开发.在模拟环境中进行单元测试.[[Protoss/规范/测试和部署|更多]]&lt;br /&gt;
==== [[Protoss/规范/核心提示|核心提示]] ====&lt;br /&gt;
*负责而谨慎地提交自己的代码&lt;br /&gt;
*保持原子性的提交&lt;br /&gt;
*不要提交自动生成的文件&lt;br /&gt;
*不要提交不能通过编译的代码&lt;br /&gt;
*不要提交自己不明白的代码&lt;br /&gt;
*提前宣布自己的工作计划&lt;br /&gt;
*对提交的信息采用明晰的标注&lt;br /&gt;
&lt;br /&gt;
=== 附录 B. 版权信息 ===&lt;br /&gt;
以下版权信息适用于Protoss项目，包括但不限于代码部分。（注：代码仅指Protoss框架代码，不包含开发人员基于此框架的应用程序，各应用程序开发者享有该程序代码的一切权利）&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2009-2010 Snake.Zero&lt;br /&gt;
&lt;br /&gt;
=== 附录 C. 更新记录 ===&lt;br /&gt;
2009年6月      Protoss 0.1beta  Protoss诞生&amp;lt;br/&amp;gt;&lt;br /&gt;
2010年6月      Protoss 0.5beta  经过一年的开发和测试，第一个稳定版本&amp;lt;br/&amp;gt;&lt;br /&gt;
2010年7月24日  Protoss 0.5.1    Mysqli模型驱动新特性&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7061</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7061"/>
				<updated>2010-08-23T01:45:58Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;规范的代码是从程序员到高级程序员的必经之路，对企业而言，高质量的代码是可复用和可再生的，而那些看起来吃力的“一次性”代码无疑给企业带来了巨大的隐性成本。企业愿意付更高的报酬聘请那些高级程序员，是可以帮他们减少开发成本，尤其是时间。&amp;lt;/font&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 基本命名规则 ==&lt;br /&gt;
=== 全局变量和函数命名等 ===&lt;br /&gt;
* 变量&lt;br /&gt;
如果你需要定义一个全局变量的话,应当以美元符号加下划线“$_”开头，后接包名。例如,PEAR包中一个变量就作：$_PEAR_destructor_object_list。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 函数的命名&lt;br /&gt;
在PEAR的定义中，我们应当使用“驼峰”写法的代码规则，以包名加下划线为前缀。我们以“XML_RPC_serializeData()”来分析。&amp;lt;br/&amp;gt;&lt;br /&gt;
在命名中缩写词应当全部大写，如上面的XML和RPC，又如Protoss中的“RBAC”(Role-Based Access Control)。如果是几个单词连着写，那么第一个单词应当首字母小写，后面的单词首字母大写，如上面的serializeData。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 类中的方法&lt;br /&gt;
在类中，public属性的变量或者参数应该以美元符加小写开头变量名来书写，如“$content”，“$mysqlResult”，“$protoss”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而私有的方法(private)或变量名应该冠以下划线，如“$_mysqlHandle”，“_processMethod()”，“_sort()”，“_intTree()”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而protected则和public一样，不能加上下划线。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 常量&lt;br /&gt;
常量的命名应该为全大写，如：DB_DATASOURCENAME 、 SERVICES_AMAZON_S3_LICENSEKEY&lt;br /&gt;
&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;br /&gt;
&lt;br /&gt;
== PHP代码标记 ==&lt;br /&gt;
以PEAR的方式来书写时：&amp;lt;br/&amp;gt;&lt;br /&gt;
任何时候都要使用&amp;lt;?php ?&amp;gt;定义你的php代码，而不要简单地使用&amp;lt;? ?&amp;gt;,这样可以保证PEAR的兼容性，也利于跨平台的移植。&lt;br /&gt;
{{notice|content=事实证明，以“&amp;lt;?php”开头更加规范，但是之后的?&amp;gt;确实可以省略。那样可以减少许多无法预期的意外输出。&amp;lt;br/&amp;gt;在PHP中，不使用“?&amp;gt;”结尾不会引起错误，哪怕连NOTICE也没有。}}&lt;br /&gt;
&lt;br /&gt;
== 全文示例 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for file&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for file (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 *&lt;br /&gt;
 * LICENSE: This source file is subject to version 3.01 of the PHP license&lt;br /&gt;
 * that is available through the world-wide-web at the following URI:&lt;br /&gt;
 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of&lt;br /&gt;
 * the PHP License and are unable to obtain it through the web, please&lt;br /&gt;
 * send a note to license@php.net so we can mail you a copy immediately.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    CVS: &amp;lt;?php&lt;br /&gt;
$&lt;br /&gt;
?&amp;gt; Id:$&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      File available since Release 1.2.0&lt;br /&gt;
 * @deprecated File deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This is a &amp;quot;Docblock Comment,&amp;quot; also known as a &amp;quot;docblock.&amp;quot;  The class'&lt;br /&gt;
 * docblock, below, contains a complete description of how to write these.&lt;br /&gt;
 */&lt;br /&gt;
require_once 'PEAR.php';&lt;br /&gt;
&lt;br /&gt;
// {{{ constants&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Methods return this if they succeed&lt;br /&gt;
 */&lt;br /&gt;
define('NET_SAMPLE_OK', 1);&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ GLOBALS&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * The number of objects created&lt;br /&gt;
 * @global int $GLOBALS['_NET_SAMPLE_Count']&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['_NET_SAMPLE_Count'] = 0;&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ Net_Sample&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * An example of how to write code to PEAR's standards&lt;br /&gt;
 *&lt;br /&gt;
 * Docblock comments start with &amp;quot;/**&amp;quot; at the top.  Notice how the &amp;quot;/&amp;quot;&lt;br /&gt;
 * lines up with the normal indenting and the asterisks on subsequent rows&lt;br /&gt;
 * are in line with the first asterisk.  The last line of comment text&lt;br /&gt;
 * should be immediately followed on the next line by the closing asterisk&lt;br /&gt;
 * and slash and then the item you are commenting on should be on the next&lt;br /&gt;
 * line below that.  Don't add extra lines.  Please put a blank line&lt;br /&gt;
 * between paragraphs as well as between the end of the description and&lt;br /&gt;
 * the start of the @tags.  Wrap comments before 80 columns in order to&lt;br /&gt;
 * ease readability for a wide variety of users.&lt;br /&gt;
 *&lt;br /&gt;
 * Docblocks can only be used for programming constructs which allow them&lt;br /&gt;
 * (classes, properties, methods, defines, includes, globals).  See the&lt;br /&gt;
 * phpDocumentor documentation for more information.&lt;br /&gt;
 * http://phpdoc.org/docs/HTMLSmartyConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html&lt;br /&gt;
 *&lt;br /&gt;
 * The Javadoc Style Guide is an excellent resource for figuring out&lt;br /&gt;
 * how to say what needs to be said in docblock comments.  Much of what is&lt;br /&gt;
 * written here is a summary of what is found there, though there are some&lt;br /&gt;
 * cases where what's said here overrides what is said there.&lt;br /&gt;
 * http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide&lt;br /&gt;
 *&lt;br /&gt;
 * The first line of any docblock is the summary.  Make them one short&lt;br /&gt;
 * sentence, without a period at the end.  Summaries for classes, properties&lt;br /&gt;
 * and constants should omit the subject and simply state the object,&lt;br /&gt;
 * because they are describing things rather than actions or behaviors.&lt;br /&gt;
 *&lt;br /&gt;
 * Below are the tags commonly used for classes. @category through @version&lt;br /&gt;
 * are required.  The remainder should only be used when necessary.&lt;br /&gt;
 * Please use them in the order they appear here.  phpDocumentor has&lt;br /&gt;
 * several other tags available, feel free to use them.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class Net_Sample&lt;br /&gt;
{&lt;br /&gt;
    // {{{ properties&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Potential values are 'good', 'fair', 'poor' and 'unknown'.&lt;br /&gt;
     *&lt;br /&gt;
     * @var string&lt;br /&gt;
     */&lt;br /&gt;
    var $foo = 'unknown';&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of life&lt;br /&gt;
     *&lt;br /&gt;
     * Note that names of private properties or methods must be&lt;br /&gt;
     * preceeded by an underscore.&lt;br /&gt;
     *&lt;br /&gt;
     * @var bool&lt;br /&gt;
     * @access private&lt;br /&gt;
     */&lt;br /&gt;
    var $_good = true;&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
    // {{{ setFoo()&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Registers the status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries for methods should use 3rd person declarative rather&lt;br /&gt;
     * than 2nd person imperative, beginning with a verb phrase.&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries should add description beyond the method's name. The&lt;br /&gt;
     * best method names are &amp;quot;self-documenting&amp;quot;, meaning they tell you&lt;br /&gt;
     * basically what the method does.  If the summary merely repeats&lt;br /&gt;
     * the method name in sentence form, it is not providing more&lt;br /&gt;
     * information.&lt;br /&gt;
     *&lt;br /&gt;
     * Summary Examples:&lt;br /&gt;
     *   + Sets the label              (preferred)&lt;br /&gt;
     *   + Set the label               (avoid)&lt;br /&gt;
     *   + This method sets the label  (avoid)&lt;br /&gt;
     *&lt;br /&gt;
     * Below are the tags commonly used for methods.  A @param tag is&lt;br /&gt;
     * required for each parameter the method has.  The @return&lt;br /&gt;
     * and @access tags are mandatory.  The @throws tag is required if&lt;br /&gt;
     * the method uses exceptions.  @static is required if the method can&lt;br /&gt;
     * be called statically.  The remainder should only be used when&lt;br /&gt;
     * necessary.  Please use them in the order they appear here.&lt;br /&gt;
     * phpDocumentor has several other tags available, feel free to use&lt;br /&gt;
     * them.&lt;br /&gt;
     *&lt;br /&gt;
     * The @param tag contains the data type, then the parameter's&lt;br /&gt;
     * name, followed by a description.  By convention, the first noun in&lt;br /&gt;
     * the description is the data type of the parameter.  Articles like&lt;br /&gt;
     * &amp;quot;a&amp;quot;, &amp;quot;an&amp;quot;, and  &amp;quot;the&amp;quot; can precede the noun.  The descriptions&lt;br /&gt;
     * should start with a phrase.  If further description is necessary,&lt;br /&gt;
     * follow with sentences.  Having two spaces between the name and the&lt;br /&gt;
     * description aids readability.&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase, do not capitalize and do not end with a&lt;br /&gt;
     * period:&lt;br /&gt;
     *   + the string to be tested&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase followed by a sentence, do not capitalize the&lt;br /&gt;
     * phrase, but end it with a period to distinguish it from the start&lt;br /&gt;
     * of the next sentence:&lt;br /&gt;
     *   + the string to be tested. Must use UTF-8 encoding.&lt;br /&gt;
     *&lt;br /&gt;
     * Return tags should contain the data type then a description of&lt;br /&gt;
     * the data returned.  The data type can be any of PHP's data types&lt;br /&gt;
     * (int, float, bool, string, array, object, resource, mixed)&lt;br /&gt;
     * and should contain the type primarily returned.  For example, if&lt;br /&gt;
     * a method returns an object when things work correctly but false&lt;br /&gt;
     * when an error happens, say 'object' rather than 'mixed.'  Use&lt;br /&gt;
     * 'void' if nothing is returned.&lt;br /&gt;
     *&lt;br /&gt;
     * Here's an example of how to format examples:&lt;br /&gt;
     * &amp;lt;code&amp;gt;&lt;br /&gt;
     * require_once 'Net/Sample.php';&lt;br /&gt;
     *&lt;br /&gt;
     * $s = new Net_Sample();&lt;br /&gt;
     * if (PEAR::isError($s)) {&lt;br /&gt;
     *     echo $s-&amp;gt;getMessage() . &amp;quot;\n&amp;quot;;&lt;br /&gt;
     * }&lt;br /&gt;
     * &amp;lt;/code&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * Here is an example for non-php example or sample:&lt;br /&gt;
     * &amp;lt;samp&amp;gt;&lt;br /&gt;
     * pear install net_sample&lt;br /&gt;
     * &amp;lt;/samp&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * @param string $arg1 the string to quote&lt;br /&gt;
     * @param int    $arg2 an integer of how many problems happened.&lt;br /&gt;
     *                     Indent to the description's starting point&lt;br /&gt;
     *                     for long ones.&lt;br /&gt;
     *&lt;br /&gt;
     * @return int the integer of the set mode used. FALSE if foo&lt;br /&gt;
     *             foo could not be set.&lt;br /&gt;
     * @throws exceptionclass [description]&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @static&lt;br /&gt;
     * @see Net_Sample::$foo, Net_Other::someMethod()&lt;br /&gt;
     * @since Method available since Release 1.2.0&lt;br /&gt;
     * @deprecated Method deprecated in Release 2.0.0&lt;br /&gt;
     */&lt;br /&gt;
    function setFoo($arg1, $arg2 = 0)&lt;br /&gt;
    {&lt;br /&gt;
        /*&lt;br /&gt;
         * This is a &amp;quot;Block Comment.&amp;quot;  The format is the same as&lt;br /&gt;
         * Docblock Comments except there is only one asterisk at the&lt;br /&gt;
         * top.  phpDocumentor doesn't parse these.&lt;br /&gt;
         */&lt;br /&gt;
        if ($arg1 == 'good' || $arg1 == 'fair') {&lt;br /&gt;
            $this-&amp;gt;foo = $arg1;&lt;br /&gt;
            return 1;&lt;br /&gt;
        } elseif ($arg1 == 'poor' &amp;amp;&amp;amp; $arg2 &amp;gt; 1) {&lt;br /&gt;
            $this-&amp;gt;foo = 'poor';&lt;br /&gt;
            return 2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Local variables:&lt;br /&gt;
 * tab-width: 4&lt;br /&gt;
 * c-basic-offset: 4&lt;br /&gt;
 * c-hanging-comment-ender-p: nil&lt;br /&gt;
 * End:&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7054</id>
		<title>Protoss</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7054"/>
				<updated>2010-08-20T04:46:07Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* Protoss代码编写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protoss是一款轻量级的PHP框架，目前由Snake.Zero进行日常维护。&lt;br /&gt;
{{notice|content=Protoss读作：['prɔtɔs]。Protos在希腊语中是“第一”的意思,而“proto-”也是英文中表示&amp;quot;第一 主要&amp;quot;之义的前缀。}}&lt;br /&gt;
&lt;br /&gt;
== 框架简介 ==&lt;br /&gt;
=== [[Protoss/简介|框架介绍]] ===&lt;br /&gt;
Protoss是一款轻量的PHP框架，前身Snake Framework，历经5年积累，纯构思时间超过2年。Protoss的编写目的，是为了解决开发中的代码不规范、流程不规范、文档不规范这些问题，因为他和一些第三方助手类或快速开发框架相比，更多的'''不是'''提供了什么，反而更多是'''什么不能做，不能怎么做'''。&lt;br /&gt;
&lt;br /&gt;
Protoss实现的一个真正框架该有的“框架”效果。和很多以快速开发的框架一样，Protoss提供了一些助手类，这些类大大减小了开发中重复劳动的部分。然而更重要的是，它是一款以约束开发行为为目的的框架项目。它在文件、类、函数、数据表的设计上，做了相对严格的限制，使用户项目整体简洁、清晰而且方便阅读。&lt;br /&gt;
对于员工流动大的公司，减少了新员工的学习和交流成本。&lt;br /&gt;
&lt;br /&gt;
另：在设计之初，Protoss的目的是成为一个真正意义上的框架，因此不光包括代码方面，同时还包括了日常文档，工作流程的规范化。但是目前而言，在一些小公司中，这些相对复杂的规范化流程的推进还是有些困难。&lt;br /&gt;
&lt;br /&gt;
{{notice|content=完整版概述：[[Protoss/简介|Protoss is not a underwear!]]&amp;lt;br/&amp;gt;推荐阅读：[[Protoss/运行|为什么Protoss会更少的干涉业务逻辑]]}}&lt;br /&gt;
&lt;br /&gt;
=== 框架特性 ===&lt;br /&gt;
*摈弃PHP的MySQL扩展，转而使用更高效且面向对象的MySQLi&lt;br /&gt;
*Model层被重视，不再是简单的ORM映射，而是真正意义上的数据模型层&lt;br /&gt;
*相对严格的命名规范，代码更具可读性&lt;br /&gt;
*更安全的访问权限控制&lt;br /&gt;
*更强的代码生成工具&lt;br /&gt;
&lt;br /&gt;
== 快速入门指南 ==&lt;br /&gt;
本快歌入门指南假定读者对PHP,MySQL有一定基础。知道MVC或有其他框架开发经验为佳，但是在后面也会有一定介绍。&lt;br /&gt;
=== 轻松编程从这里开始 ===&lt;br /&gt;
==== [[Protoss/MVC简介|MVC简介]] ====&lt;br /&gt;
==== [[Protoss/目录结构|基于Protoss的项目特征和目录结构]] ====&lt;br /&gt;
==== [[Protoss/运行|轻松访问到控制器]] ====&lt;br /&gt;
&lt;br /&gt;
=== Hello world，我的第一个应用软件 ===&lt;br /&gt;
==== [[Protoss/控制器|编写控制器]] ====&lt;br /&gt;
==== [[Protoss/控制器/动作|控制器中的Action]] ====&lt;br /&gt;
==== [[Protoss/控制器/内部方法|我有许多小秘密--private和protected]] ====&lt;br /&gt;
&lt;br /&gt;
=== 模板引擎 ===&lt;br /&gt;
==== [[Protoss/模板/载入模板|很给力！自动引入模板]] ====&lt;br /&gt;
==== [[Protoss/模板|视图也可以继承]] ====&lt;br /&gt;
==== [[Protoss/模板|看，这些元素其实是可以拆分和复用的]] ====&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss/模型|了解数据模型]] ===&lt;br /&gt;
==== [[Protoss/模型/mysqli|建立MySQLi数据模型]] ====&lt;br /&gt;
==== [[Protoss/模型/rest|Rest风格的数据模型]] ====&lt;br /&gt;
&lt;br /&gt;
== 项目开发权威指南 ==&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss权威指南/名词解释|名词解释]] ===&lt;br /&gt;
&lt;br /&gt;
== 附录 ==&lt;br /&gt;
=== 附录 A. 代码编写与开发流程规范 ===&lt;br /&gt;
==== [[Protoss/规范/概述|概述]] ====&lt;br /&gt;
Subversion是一个自由/开源版本控制系统，它管理文件和目录可以超越时间。[[Protoss/规范/概述|更多(利用版本控制进行协助开发)]]&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/代码规范|Protoss代码编写规范]] ====&lt;br /&gt;
【[[Protoss/规范/代码规范|点此阅读Protoss代码编写规范，推荐]]】&lt;br /&gt;
&lt;br /&gt;
==== 工作模型 ====&lt;br /&gt;
  checkout（检出）项目&lt;br /&gt;
  更新文件或目录  update&lt;br /&gt;
  修改文件或目录  commit(提交)变更&lt;br /&gt;
  增加文件或目录  add(增加) &lt;br /&gt;
  文件或目录      commit(提交)&lt;br /&gt;
  删除文件或目录  commit(提交)上一级目录&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/操作指南|操作指南]] ====&lt;br /&gt;
当你在为项目工作时，首先请更新你的工作拷贝来获取那些你上次更新以来其他开发人员对项目做的新改动。[[Protoss/规范/操作指南|更多]]&lt;br /&gt;
&lt;br /&gt;
==== 开发与测试部署流程 ====&lt;br /&gt;
开发人员使用trunk目录进行当前版本开发.在模拟环境中进行单元测试.[[Protoss/规范/测试和部署|更多]]&lt;br /&gt;
==== [[Protoss/规范/核心提示|核心提示]] ====&lt;br /&gt;
*负责而谨慎地提交自己的代码&lt;br /&gt;
*保持原子性的提交&lt;br /&gt;
*不要提交自动生成的文件&lt;br /&gt;
*不要提交不能通过编译的代码&lt;br /&gt;
*不要提交自己不明白的代码&lt;br /&gt;
*提前宣布自己的工作计划&lt;br /&gt;
*对提交的信息采用明晰的标注&lt;br /&gt;
&lt;br /&gt;
=== 附录 B. 版权信息 ===&lt;br /&gt;
以下版权信息适用于Protoss项目，包括但不限于代码部分。（注：代码仅指Protoss框架代码，不包含开发人员基于此框架的应用程序，各应用程序开发者享有该程序代码的一切权利）&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2009-2010 Snake.Zero&lt;br /&gt;
&lt;br /&gt;
=== 附录 C. 更新记录 ===&lt;br /&gt;
2009年6月      Protoss 0.1beta  Protoss诞生&amp;lt;br/&amp;gt;&lt;br /&gt;
2010年6月      Protoss 0.5beta  经过一年的开发和测试，第一个稳定版本&amp;lt;br/&amp;gt;&lt;br /&gt;
2020年7月24日  Protoss 0.5.1    Mysqli模型驱动新特性&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7053</id>
		<title>Protoss</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7053"/>
				<updated>2010-08-20T04:45:39Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* Protoss代码编写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protoss是一款轻量级的PHP框架，目前由Snake.Zero进行日常维护。&lt;br /&gt;
{{notice|content=Protoss读作：['prɔtɔs]。Protos在希腊语中是“第一”的意思,而“proto-”也是英文中表示&amp;quot;第一 主要&amp;quot;之义的前缀。}}&lt;br /&gt;
&lt;br /&gt;
== 框架简介 ==&lt;br /&gt;
=== [[Protoss/简介|框架介绍]] ===&lt;br /&gt;
Protoss是一款轻量的PHP框架，前身Snake Framework，历经5年积累，纯构思时间超过2年。Protoss的编写目的，是为了解决开发中的代码不规范、流程不规范、文档不规范这些问题，因为他和一些第三方助手类或快速开发框架相比，更多的'''不是'''提供了什么，反而更多是'''什么不能做，不能怎么做'''。&lt;br /&gt;
&lt;br /&gt;
Protoss实现的一个真正框架该有的“框架”效果。和很多以快速开发的框架一样，Protoss提供了一些助手类，这些类大大减小了开发中重复劳动的部分。然而更重要的是，它是一款以约束开发行为为目的的框架项目。它在文件、类、函数、数据表的设计上，做了相对严格的限制，使用户项目整体简洁、清晰而且方便阅读。&lt;br /&gt;
对于员工流动大的公司，减少了新员工的学习和交流成本。&lt;br /&gt;
&lt;br /&gt;
另：在设计之初，Protoss的目的是成为一个真正意义上的框架，因此不光包括代码方面，同时还包括了日常文档，工作流程的规范化。但是目前而言，在一些小公司中，这些相对复杂的规范化流程的推进还是有些困难。&lt;br /&gt;
&lt;br /&gt;
{{notice|content=完整版概述：[[Protoss/简介|Protoss is not a underwear!]]&amp;lt;br/&amp;gt;推荐阅读：[[Protoss/运行|为什么Protoss会更少的干涉业务逻辑]]}}&lt;br /&gt;
&lt;br /&gt;
=== 框架特性 ===&lt;br /&gt;
*摈弃PHP的MySQL扩展，转而使用更高效且面向对象的MySQLi&lt;br /&gt;
*Model层被重视，不再是简单的ORM映射，而是真正意义上的数据模型层&lt;br /&gt;
*相对严格的命名规范，代码更具可读性&lt;br /&gt;
*更安全的访问权限控制&lt;br /&gt;
*更强的代码生成工具&lt;br /&gt;
&lt;br /&gt;
== 快速入门指南 ==&lt;br /&gt;
本快歌入门指南假定读者对PHP,MySQL有一定基础。知道MVC或有其他框架开发经验为佳，但是在后面也会有一定介绍。&lt;br /&gt;
=== 轻松编程从这里开始 ===&lt;br /&gt;
==== [[Protoss/MVC简介|MVC简介]] ====&lt;br /&gt;
==== [[Protoss/目录结构|基于Protoss的项目特征和目录结构]] ====&lt;br /&gt;
==== [[Protoss/运行|轻松访问到控制器]] ====&lt;br /&gt;
&lt;br /&gt;
=== Hello world，我的第一个应用软件 ===&lt;br /&gt;
==== [[Protoss/控制器|编写控制器]] ====&lt;br /&gt;
==== [[Protoss/控制器/动作|控制器中的Action]] ====&lt;br /&gt;
==== [[Protoss/控制器/内部方法|我有许多小秘密--private和protected]] ====&lt;br /&gt;
&lt;br /&gt;
=== 模板引擎 ===&lt;br /&gt;
==== [[Protoss/模板/载入模板|很给力！自动引入模板]] ====&lt;br /&gt;
==== [[Protoss/模板|视图也可以继承]] ====&lt;br /&gt;
==== [[Protoss/模板|看，这些元素其实是可以拆分和复用的]] ====&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss/模型|了解数据模型]] ===&lt;br /&gt;
==== [[Protoss/模型/mysqli|建立MySQLi数据模型]] ====&lt;br /&gt;
==== [[Protoss/模型/rest|Rest风格的数据模型]] ====&lt;br /&gt;
&lt;br /&gt;
== 项目开发权威指南 ==&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss权威指南/名词解释|名词解释]] ===&lt;br /&gt;
&lt;br /&gt;
== 附录 ==&lt;br /&gt;
=== 附录 A. 代码编写与开发流程规范 ===&lt;br /&gt;
==== [[Protoss/规范/概述|概述]] ====&lt;br /&gt;
Subversion是一个自由/开源版本控制系统，它管理文件和目录可以超越时间。[[Protoss/规范/概述|更多(利用版本控制进行协助开发)]]&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/代码规范|Protoss代码编写规范]] ====&lt;br /&gt;
【[[点此阅读Protoss/规范/代码规范|Protoss代码编写规范，推荐]]】&lt;br /&gt;
&lt;br /&gt;
==== 工作模型 ====&lt;br /&gt;
  checkout（检出）项目&lt;br /&gt;
  更新文件或目录  update&lt;br /&gt;
  修改文件或目录  commit(提交)变更&lt;br /&gt;
  增加文件或目录  add(增加) &lt;br /&gt;
  文件或目录      commit(提交)&lt;br /&gt;
  删除文件或目录  commit(提交)上一级目录&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/操作指南|操作指南]] ====&lt;br /&gt;
当你在为项目工作时，首先请更新你的工作拷贝来获取那些你上次更新以来其他开发人员对项目做的新改动。[[Protoss/规范/操作指南|更多]]&lt;br /&gt;
&lt;br /&gt;
==== 开发与测试部署流程 ====&lt;br /&gt;
开发人员使用trunk目录进行当前版本开发.在模拟环境中进行单元测试.[[Protoss/规范/测试和部署|更多]]&lt;br /&gt;
==== [[Protoss/规范/核心提示|核心提示]] ====&lt;br /&gt;
*负责而谨慎地提交自己的代码&lt;br /&gt;
*保持原子性的提交&lt;br /&gt;
*不要提交自动生成的文件&lt;br /&gt;
*不要提交不能通过编译的代码&lt;br /&gt;
*不要提交自己不明白的代码&lt;br /&gt;
*提前宣布自己的工作计划&lt;br /&gt;
*对提交的信息采用明晰的标注&lt;br /&gt;
&lt;br /&gt;
=== 附录 B. 版权信息 ===&lt;br /&gt;
以下版权信息适用于Protoss项目，包括但不限于代码部分。（注：代码仅指Protoss框架代码，不包含开发人员基于此框架的应用程序，各应用程序开发者享有该程序代码的一切权利）&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2009-2010 Snake.Zero&lt;br /&gt;
&lt;br /&gt;
=== 附录 C. 更新记录 ===&lt;br /&gt;
2009年6月      Protoss 0.1beta  Protoss诞生&amp;lt;br/&amp;gt;&lt;br /&gt;
2010年6月      Protoss 0.5beta  经过一年的开发和测试，第一个稳定版本&amp;lt;br/&amp;gt;&lt;br /&gt;
2020年7月24日  Protoss 0.5.1    Mysqli模型驱动新特性&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7052</id>
		<title>Protoss</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss&amp;diff=7052"/>
				<updated>2010-08-20T04:45:20Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protoss是一款轻量级的PHP框架，目前由Snake.Zero进行日常维护。&lt;br /&gt;
{{notice|content=Protoss读作：['prɔtɔs]。Protos在希腊语中是“第一”的意思,而“proto-”也是英文中表示&amp;quot;第一 主要&amp;quot;之义的前缀。}}&lt;br /&gt;
&lt;br /&gt;
== 框架简介 ==&lt;br /&gt;
=== [[Protoss/简介|框架介绍]] ===&lt;br /&gt;
Protoss是一款轻量的PHP框架，前身Snake Framework，历经5年积累，纯构思时间超过2年。Protoss的编写目的，是为了解决开发中的代码不规范、流程不规范、文档不规范这些问题，因为他和一些第三方助手类或快速开发框架相比，更多的'''不是'''提供了什么，反而更多是'''什么不能做，不能怎么做'''。&lt;br /&gt;
&lt;br /&gt;
Protoss实现的一个真正框架该有的“框架”效果。和很多以快速开发的框架一样，Protoss提供了一些助手类，这些类大大减小了开发中重复劳动的部分。然而更重要的是，它是一款以约束开发行为为目的的框架项目。它在文件、类、函数、数据表的设计上，做了相对严格的限制，使用户项目整体简洁、清晰而且方便阅读。&lt;br /&gt;
对于员工流动大的公司，减少了新员工的学习和交流成本。&lt;br /&gt;
&lt;br /&gt;
另：在设计之初，Protoss的目的是成为一个真正意义上的框架，因此不光包括代码方面，同时还包括了日常文档，工作流程的规范化。但是目前而言，在一些小公司中，这些相对复杂的规范化流程的推进还是有些困难。&lt;br /&gt;
&lt;br /&gt;
{{notice|content=完整版概述：[[Protoss/简介|Protoss is not a underwear!]]&amp;lt;br/&amp;gt;推荐阅读：[[Protoss/运行|为什么Protoss会更少的干涉业务逻辑]]}}&lt;br /&gt;
&lt;br /&gt;
=== 框架特性 ===&lt;br /&gt;
*摈弃PHP的MySQL扩展，转而使用更高效且面向对象的MySQLi&lt;br /&gt;
*Model层被重视，不再是简单的ORM映射，而是真正意义上的数据模型层&lt;br /&gt;
*相对严格的命名规范，代码更具可读性&lt;br /&gt;
*更安全的访问权限控制&lt;br /&gt;
*更强的代码生成工具&lt;br /&gt;
&lt;br /&gt;
== 快速入门指南 ==&lt;br /&gt;
本快歌入门指南假定读者对PHP,MySQL有一定基础。知道MVC或有其他框架开发经验为佳，但是在后面也会有一定介绍。&lt;br /&gt;
=== 轻松编程从这里开始 ===&lt;br /&gt;
==== [[Protoss/MVC简介|MVC简介]] ====&lt;br /&gt;
==== [[Protoss/目录结构|基于Protoss的项目特征和目录结构]] ====&lt;br /&gt;
==== [[Protoss/运行|轻松访问到控制器]] ====&lt;br /&gt;
&lt;br /&gt;
=== Hello world，我的第一个应用软件 ===&lt;br /&gt;
==== [[Protoss/控制器|编写控制器]] ====&lt;br /&gt;
==== [[Protoss/控制器/动作|控制器中的Action]] ====&lt;br /&gt;
==== [[Protoss/控制器/内部方法|我有许多小秘密--private和protected]] ====&lt;br /&gt;
&lt;br /&gt;
=== 模板引擎 ===&lt;br /&gt;
==== [[Protoss/模板/载入模板|很给力！自动引入模板]] ====&lt;br /&gt;
==== [[Protoss/模板|视图也可以继承]] ====&lt;br /&gt;
==== [[Protoss/模板|看，这些元素其实是可以拆分和复用的]] ====&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss/模型|了解数据模型]] ===&lt;br /&gt;
==== [[Protoss/模型/mysqli|建立MySQLi数据模型]] ====&lt;br /&gt;
==== [[Protoss/模型/rest|Rest风格的数据模型]] ====&lt;br /&gt;
&lt;br /&gt;
== 项目开发权威指南 ==&lt;br /&gt;
&lt;br /&gt;
=== [[Protoss权威指南/名词解释|名词解释]] ===&lt;br /&gt;
&lt;br /&gt;
== 附录 ==&lt;br /&gt;
=== 附录 A. 代码编写与开发流程规范 ===&lt;br /&gt;
==== [[Protoss/规范/概述|概述]] ====&lt;br /&gt;
Subversion是一个自由/开源版本控制系统，它管理文件和目录可以超越时间。[[Protoss/规范/概述|更多(利用版本控制进行协助开发)]]&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/代码规范|Protoss代码编写规范]] ====&lt;br /&gt;
【点此阅读[[Protoss/规范/代码规范|Protoss代码编写规范]]，推荐】&lt;br /&gt;
&lt;br /&gt;
==== 工作模型 ====&lt;br /&gt;
  checkout（检出）项目&lt;br /&gt;
  更新文件或目录  update&lt;br /&gt;
  修改文件或目录  commit(提交)变更&lt;br /&gt;
  增加文件或目录  add(增加) &lt;br /&gt;
  文件或目录      commit(提交)&lt;br /&gt;
  删除文件或目录  commit(提交)上一级目录&lt;br /&gt;
&lt;br /&gt;
==== [[Protoss/规范/操作指南|操作指南]] ====&lt;br /&gt;
当你在为项目工作时，首先请更新你的工作拷贝来获取那些你上次更新以来其他开发人员对项目做的新改动。[[Protoss/规范/操作指南|更多]]&lt;br /&gt;
&lt;br /&gt;
==== 开发与测试部署流程 ====&lt;br /&gt;
开发人员使用trunk目录进行当前版本开发.在模拟环境中进行单元测试.[[Protoss/规范/测试和部署|更多]]&lt;br /&gt;
==== [[Protoss/规范/核心提示|核心提示]] ====&lt;br /&gt;
*负责而谨慎地提交自己的代码&lt;br /&gt;
*保持原子性的提交&lt;br /&gt;
*不要提交自动生成的文件&lt;br /&gt;
*不要提交不能通过编译的代码&lt;br /&gt;
*不要提交自己不明白的代码&lt;br /&gt;
*提前宣布自己的工作计划&lt;br /&gt;
*对提交的信息采用明晰的标注&lt;br /&gt;
&lt;br /&gt;
=== 附录 B. 版权信息 ===&lt;br /&gt;
以下版权信息适用于Protoss项目，包括但不限于代码部分。（注：代码仅指Protoss框架代码，不包含开发人员基于此框架的应用程序，各应用程序开发者享有该程序代码的一切权利）&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2009-2010 Snake.Zero&lt;br /&gt;
&lt;br /&gt;
=== 附录 C. 更新记录 ===&lt;br /&gt;
2009年6月      Protoss 0.1beta  Protoss诞生&amp;lt;br/&amp;gt;&lt;br /&gt;
2010年6月      Protoss 0.5beta  经过一年的开发和测试，第一个稳定版本&amp;lt;br/&amp;gt;&lt;br /&gt;
2020年7月24日  Protoss 0.5.1    Mysqli模型驱动新特性&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7051</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7051"/>
				<updated>2010-08-20T04:43:54Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* PHP代码标记 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 基本命名规则 ==&lt;br /&gt;
=== 全局变量和函数命名等 ===&lt;br /&gt;
* 变量&lt;br /&gt;
如果你需要定义一个全局变量的话,应当以美元符号加下划线“$_”开头，后接包名。例如,PEAR包中一个变量就作：$_PEAR_destructor_object_list。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 函数的命名&lt;br /&gt;
在PEAR的定义中，我们应当使用“驼峰”写法的代码规则，以包名加下划线为前缀。我们以“XML_RPC_serializeData()”来分析。&amp;lt;br/&amp;gt;&lt;br /&gt;
在命名中缩写词应当全部大写，如上面的XML和RPC，又如Protoss中的“RBAC”(Role-Based Access Control)。如果是几个单词连着写，那么第一个单词应当首字母小写，后面的单词首字母大写，如上面的serializeData。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 类中的方法&lt;br /&gt;
在类中，public属性的变量或者参数应该以美元符加小写开头变量名来书写，如“$content”，“$mysqlResult”，“$protoss”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而私有的方法(private)或变量名应该冠以下划线，如“$_mysqlHandle”，“_processMethod()”，“_sort()”，“_intTree()”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而protected则和public一样，不能加上下划线。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 常量&lt;br /&gt;
常量的命名应该为全大写，如：DB_DATASOURCENAME 、 SERVICES_AMAZON_S3_LICENSEKEY&lt;br /&gt;
&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;br /&gt;
&lt;br /&gt;
== PHP代码标记 ==&lt;br /&gt;
以PEAR的方式来书写时：&amp;lt;br/&amp;gt;&lt;br /&gt;
任何时候都要使用&amp;lt;?php ?&amp;gt;定义你的php代码，而不要简单地使用&amp;lt;? ?&amp;gt;,这样可以保证PEAR的兼容性，也利于跨平台的移植。&lt;br /&gt;
{{notice|content=事实证明，以“&amp;lt;?php”开头更加规范，但是之后的?&amp;gt;确实可以省略。那样可以减少许多无法预期的意外输出。&amp;lt;br/&amp;gt;在PHP中，不使用“?&amp;gt;”结尾不会引起错误，哪怕连NOTICE也没有。}}&lt;br /&gt;
&lt;br /&gt;
== 全文示例 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for file&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for file (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 *&lt;br /&gt;
 * LICENSE: This source file is subject to version 3.01 of the PHP license&lt;br /&gt;
 * that is available through the world-wide-web at the following URI:&lt;br /&gt;
 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of&lt;br /&gt;
 * the PHP License and are unable to obtain it through the web, please&lt;br /&gt;
 * send a note to license@php.net so we can mail you a copy immediately.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    CVS: &amp;lt;?php&lt;br /&gt;
$&lt;br /&gt;
?&amp;gt; Id:$&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      File available since Release 1.2.0&lt;br /&gt;
 * @deprecated File deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This is a &amp;quot;Docblock Comment,&amp;quot; also known as a &amp;quot;docblock.&amp;quot;  The class'&lt;br /&gt;
 * docblock, below, contains a complete description of how to write these.&lt;br /&gt;
 */&lt;br /&gt;
require_once 'PEAR.php';&lt;br /&gt;
&lt;br /&gt;
// {{{ constants&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Methods return this if they succeed&lt;br /&gt;
 */&lt;br /&gt;
define('NET_SAMPLE_OK', 1);&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ GLOBALS&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * The number of objects created&lt;br /&gt;
 * @global int $GLOBALS['_NET_SAMPLE_Count']&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['_NET_SAMPLE_Count'] = 0;&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ Net_Sample&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * An example of how to write code to PEAR's standards&lt;br /&gt;
 *&lt;br /&gt;
 * Docblock comments start with &amp;quot;/**&amp;quot; at the top.  Notice how the &amp;quot;/&amp;quot;&lt;br /&gt;
 * lines up with the normal indenting and the asterisks on subsequent rows&lt;br /&gt;
 * are in line with the first asterisk.  The last line of comment text&lt;br /&gt;
 * should be immediately followed on the next line by the closing asterisk&lt;br /&gt;
 * and slash and then the item you are commenting on should be on the next&lt;br /&gt;
 * line below that.  Don't add extra lines.  Please put a blank line&lt;br /&gt;
 * between paragraphs as well as between the end of the description and&lt;br /&gt;
 * the start of the @tags.  Wrap comments before 80 columns in order to&lt;br /&gt;
 * ease readability for a wide variety of users.&lt;br /&gt;
 *&lt;br /&gt;
 * Docblocks can only be used for programming constructs which allow them&lt;br /&gt;
 * (classes, properties, methods, defines, includes, globals).  See the&lt;br /&gt;
 * phpDocumentor documentation for more information.&lt;br /&gt;
 * http://phpdoc.org/docs/HTMLSmartyConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html&lt;br /&gt;
 *&lt;br /&gt;
 * The Javadoc Style Guide is an excellent resource for figuring out&lt;br /&gt;
 * how to say what needs to be said in docblock comments.  Much of what is&lt;br /&gt;
 * written here is a summary of what is found there, though there are some&lt;br /&gt;
 * cases where what's said here overrides what is said there.&lt;br /&gt;
 * http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide&lt;br /&gt;
 *&lt;br /&gt;
 * The first line of any docblock is the summary.  Make them one short&lt;br /&gt;
 * sentence, without a period at the end.  Summaries for classes, properties&lt;br /&gt;
 * and constants should omit the subject and simply state the object,&lt;br /&gt;
 * because they are describing things rather than actions or behaviors.&lt;br /&gt;
 *&lt;br /&gt;
 * Below are the tags commonly used for classes. @category through @version&lt;br /&gt;
 * are required.  The remainder should only be used when necessary.&lt;br /&gt;
 * Please use them in the order they appear here.  phpDocumentor has&lt;br /&gt;
 * several other tags available, feel free to use them.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class Net_Sample&lt;br /&gt;
{&lt;br /&gt;
    // {{{ properties&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Potential values are 'good', 'fair', 'poor' and 'unknown'.&lt;br /&gt;
     *&lt;br /&gt;
     * @var string&lt;br /&gt;
     */&lt;br /&gt;
    var $foo = 'unknown';&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of life&lt;br /&gt;
     *&lt;br /&gt;
     * Note that names of private properties or methods must be&lt;br /&gt;
     * preceeded by an underscore.&lt;br /&gt;
     *&lt;br /&gt;
     * @var bool&lt;br /&gt;
     * @access private&lt;br /&gt;
     */&lt;br /&gt;
    var $_good = true;&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
    // {{{ setFoo()&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Registers the status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries for methods should use 3rd person declarative rather&lt;br /&gt;
     * than 2nd person imperative, beginning with a verb phrase.&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries should add description beyond the method's name. The&lt;br /&gt;
     * best method names are &amp;quot;self-documenting&amp;quot;, meaning they tell you&lt;br /&gt;
     * basically what the method does.  If the summary merely repeats&lt;br /&gt;
     * the method name in sentence form, it is not providing more&lt;br /&gt;
     * information.&lt;br /&gt;
     *&lt;br /&gt;
     * Summary Examples:&lt;br /&gt;
     *   + Sets the label              (preferred)&lt;br /&gt;
     *   + Set the label               (avoid)&lt;br /&gt;
     *   + This method sets the label  (avoid)&lt;br /&gt;
     *&lt;br /&gt;
     * Below are the tags commonly used for methods.  A @param tag is&lt;br /&gt;
     * required for each parameter the method has.  The @return&lt;br /&gt;
     * and @access tags are mandatory.  The @throws tag is required if&lt;br /&gt;
     * the method uses exceptions.  @static is required if the method can&lt;br /&gt;
     * be called statically.  The remainder should only be used when&lt;br /&gt;
     * necessary.  Please use them in the order they appear here.&lt;br /&gt;
     * phpDocumentor has several other tags available, feel free to use&lt;br /&gt;
     * them.&lt;br /&gt;
     *&lt;br /&gt;
     * The @param tag contains the data type, then the parameter's&lt;br /&gt;
     * name, followed by a description.  By convention, the first noun in&lt;br /&gt;
     * the description is the data type of the parameter.  Articles like&lt;br /&gt;
     * &amp;quot;a&amp;quot;, &amp;quot;an&amp;quot;, and  &amp;quot;the&amp;quot; can precede the noun.  The descriptions&lt;br /&gt;
     * should start with a phrase.  If further description is necessary,&lt;br /&gt;
     * follow with sentences.  Having two spaces between the name and the&lt;br /&gt;
     * description aids readability.&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase, do not capitalize and do not end with a&lt;br /&gt;
     * period:&lt;br /&gt;
     *   + the string to be tested&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase followed by a sentence, do not capitalize the&lt;br /&gt;
     * phrase, but end it with a period to distinguish it from the start&lt;br /&gt;
     * of the next sentence:&lt;br /&gt;
     *   + the string to be tested. Must use UTF-8 encoding.&lt;br /&gt;
     *&lt;br /&gt;
     * Return tags should contain the data type then a description of&lt;br /&gt;
     * the data returned.  The data type can be any of PHP's data types&lt;br /&gt;
     * (int, float, bool, string, array, object, resource, mixed)&lt;br /&gt;
     * and should contain the type primarily returned.  For example, if&lt;br /&gt;
     * a method returns an object when things work correctly but false&lt;br /&gt;
     * when an error happens, say 'object' rather than 'mixed.'  Use&lt;br /&gt;
     * 'void' if nothing is returned.&lt;br /&gt;
     *&lt;br /&gt;
     * Here's an example of how to format examples:&lt;br /&gt;
     * &amp;lt;code&amp;gt;&lt;br /&gt;
     * require_once 'Net/Sample.php';&lt;br /&gt;
     *&lt;br /&gt;
     * $s = new Net_Sample();&lt;br /&gt;
     * if (PEAR::isError($s)) {&lt;br /&gt;
     *     echo $s-&amp;gt;getMessage() . &amp;quot;\n&amp;quot;;&lt;br /&gt;
     * }&lt;br /&gt;
     * &amp;lt;/code&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * Here is an example for non-php example or sample:&lt;br /&gt;
     * &amp;lt;samp&amp;gt;&lt;br /&gt;
     * pear install net_sample&lt;br /&gt;
     * &amp;lt;/samp&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * @param string $arg1 the string to quote&lt;br /&gt;
     * @param int    $arg2 an integer of how many problems happened.&lt;br /&gt;
     *                     Indent to the description's starting point&lt;br /&gt;
     *                     for long ones.&lt;br /&gt;
     *&lt;br /&gt;
     * @return int the integer of the set mode used. FALSE if foo&lt;br /&gt;
     *             foo could not be set.&lt;br /&gt;
     * @throws exceptionclass [description]&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @static&lt;br /&gt;
     * @see Net_Sample::$foo, Net_Other::someMethod()&lt;br /&gt;
     * @since Method available since Release 1.2.0&lt;br /&gt;
     * @deprecated Method deprecated in Release 2.0.0&lt;br /&gt;
     */&lt;br /&gt;
    function setFoo($arg1, $arg2 = 0)&lt;br /&gt;
    {&lt;br /&gt;
        /*&lt;br /&gt;
         * This is a &amp;quot;Block Comment.&amp;quot;  The format is the same as&lt;br /&gt;
         * Docblock Comments except there is only one asterisk at the&lt;br /&gt;
         * top.  phpDocumentor doesn't parse these.&lt;br /&gt;
         */&lt;br /&gt;
        if ($arg1 == 'good' || $arg1 == 'fair') {&lt;br /&gt;
            $this-&amp;gt;foo = $arg1;&lt;br /&gt;
            return 1;&lt;br /&gt;
        } elseif ($arg1 == 'poor' &amp;amp;&amp;amp; $arg2 &amp;gt; 1) {&lt;br /&gt;
            $this-&amp;gt;foo = 'poor';&lt;br /&gt;
            return 2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Local variables:&lt;br /&gt;
 * tab-width: 4&lt;br /&gt;
 * c-basic-offset: 4&lt;br /&gt;
 * c-hanging-comment-ender-p: nil&lt;br /&gt;
 * End:&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7050</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7050"/>
				<updated>2010-08-20T04:43:13Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 文件的相关规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 基本命名规则 ==&lt;br /&gt;
=== 全局变量和函数命名等 ===&lt;br /&gt;
* 变量&lt;br /&gt;
如果你需要定义一个全局变量的话,应当以美元符号加下划线“$_”开头，后接包名。例如,PEAR包中一个变量就作：$_PEAR_destructor_object_list。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 函数的命名&lt;br /&gt;
在PEAR的定义中，我们应当使用“驼峰”写法的代码规则，以包名加下划线为前缀。我们以“XML_RPC_serializeData()”来分析。&amp;lt;br/&amp;gt;&lt;br /&gt;
在命名中缩写词应当全部大写，如上面的XML和RPC，又如Protoss中的“RBAC”(Role-Based Access Control)。如果是几个单词连着写，那么第一个单词应当首字母小写，后面的单词首字母大写，如上面的serializeData。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 类中的方法&lt;br /&gt;
在类中，public属性的变量或者参数应该以美元符加小写开头变量名来书写，如“$content”，“$mysqlResult”，“$protoss”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而私有的方法(private)或变量名应该冠以下划线，如“$_mysqlHandle”，“_processMethod()”，“_sort()”，“_intTree()”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而protected则和public一样，不能加上下划线。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 常量&lt;br /&gt;
常量的命名应该为全大写，如：DB_DATASOURCENAME 、 SERVICES_AMAZON_S3_LICENSEKEY&lt;br /&gt;
&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;br /&gt;
&lt;br /&gt;
== PHP代码标记 ==&lt;br /&gt;
以PEAR的方式来书写时：&amp;lt;br/&amp;gt;&lt;br /&gt;
任何时候都要使用&amp;lt;?php ?&amp;gt;定义你的php代码，而不要简单地使用&amp;lt;? ?&amp;gt;,这样可以保证PEAR的兼容性，也利于跨平台的移植。&lt;br /&gt;
{{noteice|content=事实证明，以&amp;lt;?php开头更加规范，但是之后的?&amp;gt;确实可以省略。那样可以减少许多无法预期的意外输出。&amp;lt;br/&amp;gt;在PHP中，不使用“?&amp;gt;”结尾不会引起错误，哪怕连NOTICE也没有。}}&lt;br /&gt;
&lt;br /&gt;
== 全文示例 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for file&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for file (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 *&lt;br /&gt;
 * LICENSE: This source file is subject to version 3.01 of the PHP license&lt;br /&gt;
 * that is available through the world-wide-web at the following URI:&lt;br /&gt;
 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of&lt;br /&gt;
 * the PHP License and are unable to obtain it through the web, please&lt;br /&gt;
 * send a note to license@php.net so we can mail you a copy immediately.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    CVS: &amp;lt;?php&lt;br /&gt;
$&lt;br /&gt;
?&amp;gt; Id:$&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      File available since Release 1.2.0&lt;br /&gt;
 * @deprecated File deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This is a &amp;quot;Docblock Comment,&amp;quot; also known as a &amp;quot;docblock.&amp;quot;  The class'&lt;br /&gt;
 * docblock, below, contains a complete description of how to write these.&lt;br /&gt;
 */&lt;br /&gt;
require_once 'PEAR.php';&lt;br /&gt;
&lt;br /&gt;
// {{{ constants&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Methods return this if they succeed&lt;br /&gt;
 */&lt;br /&gt;
define('NET_SAMPLE_OK', 1);&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ GLOBALS&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * The number of objects created&lt;br /&gt;
 * @global int $GLOBALS['_NET_SAMPLE_Count']&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['_NET_SAMPLE_Count'] = 0;&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ Net_Sample&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * An example of how to write code to PEAR's standards&lt;br /&gt;
 *&lt;br /&gt;
 * Docblock comments start with &amp;quot;/**&amp;quot; at the top.  Notice how the &amp;quot;/&amp;quot;&lt;br /&gt;
 * lines up with the normal indenting and the asterisks on subsequent rows&lt;br /&gt;
 * are in line with the first asterisk.  The last line of comment text&lt;br /&gt;
 * should be immediately followed on the next line by the closing asterisk&lt;br /&gt;
 * and slash and then the item you are commenting on should be on the next&lt;br /&gt;
 * line below that.  Don't add extra lines.  Please put a blank line&lt;br /&gt;
 * between paragraphs as well as between the end of the description and&lt;br /&gt;
 * the start of the @tags.  Wrap comments before 80 columns in order to&lt;br /&gt;
 * ease readability for a wide variety of users.&lt;br /&gt;
 *&lt;br /&gt;
 * Docblocks can only be used for programming constructs which allow them&lt;br /&gt;
 * (classes, properties, methods, defines, includes, globals).  See the&lt;br /&gt;
 * phpDocumentor documentation for more information.&lt;br /&gt;
 * http://phpdoc.org/docs/HTMLSmartyConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html&lt;br /&gt;
 *&lt;br /&gt;
 * The Javadoc Style Guide is an excellent resource for figuring out&lt;br /&gt;
 * how to say what needs to be said in docblock comments.  Much of what is&lt;br /&gt;
 * written here is a summary of what is found there, though there are some&lt;br /&gt;
 * cases where what's said here overrides what is said there.&lt;br /&gt;
 * http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide&lt;br /&gt;
 *&lt;br /&gt;
 * The first line of any docblock is the summary.  Make them one short&lt;br /&gt;
 * sentence, without a period at the end.  Summaries for classes, properties&lt;br /&gt;
 * and constants should omit the subject and simply state the object,&lt;br /&gt;
 * because they are describing things rather than actions or behaviors.&lt;br /&gt;
 *&lt;br /&gt;
 * Below are the tags commonly used for classes. @category through @version&lt;br /&gt;
 * are required.  The remainder should only be used when necessary.&lt;br /&gt;
 * Please use them in the order they appear here.  phpDocumentor has&lt;br /&gt;
 * several other tags available, feel free to use them.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class Net_Sample&lt;br /&gt;
{&lt;br /&gt;
    // {{{ properties&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Potential values are 'good', 'fair', 'poor' and 'unknown'.&lt;br /&gt;
     *&lt;br /&gt;
     * @var string&lt;br /&gt;
     */&lt;br /&gt;
    var $foo = 'unknown';&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of life&lt;br /&gt;
     *&lt;br /&gt;
     * Note that names of private properties or methods must be&lt;br /&gt;
     * preceeded by an underscore.&lt;br /&gt;
     *&lt;br /&gt;
     * @var bool&lt;br /&gt;
     * @access private&lt;br /&gt;
     */&lt;br /&gt;
    var $_good = true;&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
    // {{{ setFoo()&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Registers the status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries for methods should use 3rd person declarative rather&lt;br /&gt;
     * than 2nd person imperative, beginning with a verb phrase.&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries should add description beyond the method's name. The&lt;br /&gt;
     * best method names are &amp;quot;self-documenting&amp;quot;, meaning they tell you&lt;br /&gt;
     * basically what the method does.  If the summary merely repeats&lt;br /&gt;
     * the method name in sentence form, it is not providing more&lt;br /&gt;
     * information.&lt;br /&gt;
     *&lt;br /&gt;
     * Summary Examples:&lt;br /&gt;
     *   + Sets the label              (preferred)&lt;br /&gt;
     *   + Set the label               (avoid)&lt;br /&gt;
     *   + This method sets the label  (avoid)&lt;br /&gt;
     *&lt;br /&gt;
     * Below are the tags commonly used for methods.  A @param tag is&lt;br /&gt;
     * required for each parameter the method has.  The @return&lt;br /&gt;
     * and @access tags are mandatory.  The @throws tag is required if&lt;br /&gt;
     * the method uses exceptions.  @static is required if the method can&lt;br /&gt;
     * be called statically.  The remainder should only be used when&lt;br /&gt;
     * necessary.  Please use them in the order they appear here.&lt;br /&gt;
     * phpDocumentor has several other tags available, feel free to use&lt;br /&gt;
     * them.&lt;br /&gt;
     *&lt;br /&gt;
     * The @param tag contains the data type, then the parameter's&lt;br /&gt;
     * name, followed by a description.  By convention, the first noun in&lt;br /&gt;
     * the description is the data type of the parameter.  Articles like&lt;br /&gt;
     * &amp;quot;a&amp;quot;, &amp;quot;an&amp;quot;, and  &amp;quot;the&amp;quot; can precede the noun.  The descriptions&lt;br /&gt;
     * should start with a phrase.  If further description is necessary,&lt;br /&gt;
     * follow with sentences.  Having two spaces between the name and the&lt;br /&gt;
     * description aids readability.&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase, do not capitalize and do not end with a&lt;br /&gt;
     * period:&lt;br /&gt;
     *   + the string to be tested&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase followed by a sentence, do not capitalize the&lt;br /&gt;
     * phrase, but end it with a period to distinguish it from the start&lt;br /&gt;
     * of the next sentence:&lt;br /&gt;
     *   + the string to be tested. Must use UTF-8 encoding.&lt;br /&gt;
     *&lt;br /&gt;
     * Return tags should contain the data type then a description of&lt;br /&gt;
     * the data returned.  The data type can be any of PHP's data types&lt;br /&gt;
     * (int, float, bool, string, array, object, resource, mixed)&lt;br /&gt;
     * and should contain the type primarily returned.  For example, if&lt;br /&gt;
     * a method returns an object when things work correctly but false&lt;br /&gt;
     * when an error happens, say 'object' rather than 'mixed.'  Use&lt;br /&gt;
     * 'void' if nothing is returned.&lt;br /&gt;
     *&lt;br /&gt;
     * Here's an example of how to format examples:&lt;br /&gt;
     * &amp;lt;code&amp;gt;&lt;br /&gt;
     * require_once 'Net/Sample.php';&lt;br /&gt;
     *&lt;br /&gt;
     * $s = new Net_Sample();&lt;br /&gt;
     * if (PEAR::isError($s)) {&lt;br /&gt;
     *     echo $s-&amp;gt;getMessage() . &amp;quot;\n&amp;quot;;&lt;br /&gt;
     * }&lt;br /&gt;
     * &amp;lt;/code&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * Here is an example for non-php example or sample:&lt;br /&gt;
     * &amp;lt;samp&amp;gt;&lt;br /&gt;
     * pear install net_sample&lt;br /&gt;
     * &amp;lt;/samp&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * @param string $arg1 the string to quote&lt;br /&gt;
     * @param int    $arg2 an integer of how many problems happened.&lt;br /&gt;
     *                     Indent to the description's starting point&lt;br /&gt;
     *                     for long ones.&lt;br /&gt;
     *&lt;br /&gt;
     * @return int the integer of the set mode used. FALSE if foo&lt;br /&gt;
     *             foo could not be set.&lt;br /&gt;
     * @throws exceptionclass [description]&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @static&lt;br /&gt;
     * @see Net_Sample::$foo, Net_Other::someMethod()&lt;br /&gt;
     * @since Method available since Release 1.2.0&lt;br /&gt;
     * @deprecated Method deprecated in Release 2.0.0&lt;br /&gt;
     */&lt;br /&gt;
    function setFoo($arg1, $arg2 = 0)&lt;br /&gt;
    {&lt;br /&gt;
        /*&lt;br /&gt;
         * This is a &amp;quot;Block Comment.&amp;quot;  The format is the same as&lt;br /&gt;
         * Docblock Comments except there is only one asterisk at the&lt;br /&gt;
         * top.  phpDocumentor doesn't parse these.&lt;br /&gt;
         */&lt;br /&gt;
        if ($arg1 == 'good' || $arg1 == 'fair') {&lt;br /&gt;
            $this-&amp;gt;foo = $arg1;&lt;br /&gt;
            return 1;&lt;br /&gt;
        } elseif ($arg1 == 'poor' &amp;amp;&amp;amp; $arg2 &amp;gt; 1) {&lt;br /&gt;
            $this-&amp;gt;foo = 'poor';&lt;br /&gt;
            return 2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Local variables:&lt;br /&gt;
 * tab-width: 4&lt;br /&gt;
 * c-basic-offset: 4&lt;br /&gt;
 * c-hanging-comment-ender-p: nil&lt;br /&gt;
 * End:&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7049</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7049"/>
				<updated>2010-08-20T04:39:06Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 全局变量和函数命名等 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 基本命名规则 ==&lt;br /&gt;
=== 全局变量和函数命名等 ===&lt;br /&gt;
* 变量&lt;br /&gt;
如果你需要定义一个全局变量的话,应当以美元符号加下划线“$_”开头，后接包名。例如,PEAR包中一个变量就作：$_PEAR_destructor_object_list。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 函数的命名&lt;br /&gt;
在PEAR的定义中，我们应当使用“驼峰”写法的代码规则，以包名加下划线为前缀。我们以“XML_RPC_serializeData()”来分析。&amp;lt;br/&amp;gt;&lt;br /&gt;
在命名中缩写词应当全部大写，如上面的XML和RPC，又如Protoss中的“RBAC”(Role-Based Access Control)。如果是几个单词连着写，那么第一个单词应当首字母小写，后面的单词首字母大写，如上面的serializeData。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 类中的方法&lt;br /&gt;
在类中，public属性的变量或者参数应该以美元符加小写开头变量名来书写，如“$content”，“$mysqlResult”，“$protoss”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而私有的方法(private)或变量名应该冠以下划线，如“$_mysqlHandle”，“_processMethod()”，“_sort()”，“_intTree()”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而protected则和public一样，不能加上下划线。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 常量&lt;br /&gt;
常量的命名应该为全大写，如：DB_DATASOURCENAME 、 SERVICES_AMAZON_S3_LICENSEKEY&lt;br /&gt;
&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;br /&gt;
&lt;br /&gt;
== 全文示例 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for file&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for file (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 *&lt;br /&gt;
 * LICENSE: This source file is subject to version 3.01 of the PHP license&lt;br /&gt;
 * that is available through the world-wide-web at the following URI:&lt;br /&gt;
 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of&lt;br /&gt;
 * the PHP License and are unable to obtain it through the web, please&lt;br /&gt;
 * send a note to license@php.net so we can mail you a copy immediately.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    CVS: &amp;lt;?php&lt;br /&gt;
$&lt;br /&gt;
?&amp;gt; Id:$&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      File available since Release 1.2.0&lt;br /&gt;
 * @deprecated File deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This is a &amp;quot;Docblock Comment,&amp;quot; also known as a &amp;quot;docblock.&amp;quot;  The class'&lt;br /&gt;
 * docblock, below, contains a complete description of how to write these.&lt;br /&gt;
 */&lt;br /&gt;
require_once 'PEAR.php';&lt;br /&gt;
&lt;br /&gt;
// {{{ constants&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Methods return this if they succeed&lt;br /&gt;
 */&lt;br /&gt;
define('NET_SAMPLE_OK', 1);&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ GLOBALS&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * The number of objects created&lt;br /&gt;
 * @global int $GLOBALS['_NET_SAMPLE_Count']&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['_NET_SAMPLE_Count'] = 0;&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ Net_Sample&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * An example of how to write code to PEAR's standards&lt;br /&gt;
 *&lt;br /&gt;
 * Docblock comments start with &amp;quot;/**&amp;quot; at the top.  Notice how the &amp;quot;/&amp;quot;&lt;br /&gt;
 * lines up with the normal indenting and the asterisks on subsequent rows&lt;br /&gt;
 * are in line with the first asterisk.  The last line of comment text&lt;br /&gt;
 * should be immediately followed on the next line by the closing asterisk&lt;br /&gt;
 * and slash and then the item you are commenting on should be on the next&lt;br /&gt;
 * line below that.  Don't add extra lines.  Please put a blank line&lt;br /&gt;
 * between paragraphs as well as between the end of the description and&lt;br /&gt;
 * the start of the @tags.  Wrap comments before 80 columns in order to&lt;br /&gt;
 * ease readability for a wide variety of users.&lt;br /&gt;
 *&lt;br /&gt;
 * Docblocks can only be used for programming constructs which allow them&lt;br /&gt;
 * (classes, properties, methods, defines, includes, globals).  See the&lt;br /&gt;
 * phpDocumentor documentation for more information.&lt;br /&gt;
 * http://phpdoc.org/docs/HTMLSmartyConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html&lt;br /&gt;
 *&lt;br /&gt;
 * The Javadoc Style Guide is an excellent resource for figuring out&lt;br /&gt;
 * how to say what needs to be said in docblock comments.  Much of what is&lt;br /&gt;
 * written here is a summary of what is found there, though there are some&lt;br /&gt;
 * cases where what's said here overrides what is said there.&lt;br /&gt;
 * http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide&lt;br /&gt;
 *&lt;br /&gt;
 * The first line of any docblock is the summary.  Make them one short&lt;br /&gt;
 * sentence, without a period at the end.  Summaries for classes, properties&lt;br /&gt;
 * and constants should omit the subject and simply state the object,&lt;br /&gt;
 * because they are describing things rather than actions or behaviors.&lt;br /&gt;
 *&lt;br /&gt;
 * Below are the tags commonly used for classes. @category through @version&lt;br /&gt;
 * are required.  The remainder should only be used when necessary.&lt;br /&gt;
 * Please use them in the order they appear here.  phpDocumentor has&lt;br /&gt;
 * several other tags available, feel free to use them.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class Net_Sample&lt;br /&gt;
{&lt;br /&gt;
    // {{{ properties&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Potential values are 'good', 'fair', 'poor' and 'unknown'.&lt;br /&gt;
     *&lt;br /&gt;
     * @var string&lt;br /&gt;
     */&lt;br /&gt;
    var $foo = 'unknown';&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of life&lt;br /&gt;
     *&lt;br /&gt;
     * Note that names of private properties or methods must be&lt;br /&gt;
     * preceeded by an underscore.&lt;br /&gt;
     *&lt;br /&gt;
     * @var bool&lt;br /&gt;
     * @access private&lt;br /&gt;
     */&lt;br /&gt;
    var $_good = true;&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
    // {{{ setFoo()&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Registers the status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries for methods should use 3rd person declarative rather&lt;br /&gt;
     * than 2nd person imperative, beginning with a verb phrase.&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries should add description beyond the method's name. The&lt;br /&gt;
     * best method names are &amp;quot;self-documenting&amp;quot;, meaning they tell you&lt;br /&gt;
     * basically what the method does.  If the summary merely repeats&lt;br /&gt;
     * the method name in sentence form, it is not providing more&lt;br /&gt;
     * information.&lt;br /&gt;
     *&lt;br /&gt;
     * Summary Examples:&lt;br /&gt;
     *   + Sets the label              (preferred)&lt;br /&gt;
     *   + Set the label               (avoid)&lt;br /&gt;
     *   + This method sets the label  (avoid)&lt;br /&gt;
     *&lt;br /&gt;
     * Below are the tags commonly used for methods.  A @param tag is&lt;br /&gt;
     * required for each parameter the method has.  The @return&lt;br /&gt;
     * and @access tags are mandatory.  The @throws tag is required if&lt;br /&gt;
     * the method uses exceptions.  @static is required if the method can&lt;br /&gt;
     * be called statically.  The remainder should only be used when&lt;br /&gt;
     * necessary.  Please use them in the order they appear here.&lt;br /&gt;
     * phpDocumentor has several other tags available, feel free to use&lt;br /&gt;
     * them.&lt;br /&gt;
     *&lt;br /&gt;
     * The @param tag contains the data type, then the parameter's&lt;br /&gt;
     * name, followed by a description.  By convention, the first noun in&lt;br /&gt;
     * the description is the data type of the parameter.  Articles like&lt;br /&gt;
     * &amp;quot;a&amp;quot;, &amp;quot;an&amp;quot;, and  &amp;quot;the&amp;quot; can precede the noun.  The descriptions&lt;br /&gt;
     * should start with a phrase.  If further description is necessary,&lt;br /&gt;
     * follow with sentences.  Having two spaces between the name and the&lt;br /&gt;
     * description aids readability.&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase, do not capitalize and do not end with a&lt;br /&gt;
     * period:&lt;br /&gt;
     *   + the string to be tested&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase followed by a sentence, do not capitalize the&lt;br /&gt;
     * phrase, but end it with a period to distinguish it from the start&lt;br /&gt;
     * of the next sentence:&lt;br /&gt;
     *   + the string to be tested. Must use UTF-8 encoding.&lt;br /&gt;
     *&lt;br /&gt;
     * Return tags should contain the data type then a description of&lt;br /&gt;
     * the data returned.  The data type can be any of PHP's data types&lt;br /&gt;
     * (int, float, bool, string, array, object, resource, mixed)&lt;br /&gt;
     * and should contain the type primarily returned.  For example, if&lt;br /&gt;
     * a method returns an object when things work correctly but false&lt;br /&gt;
     * when an error happens, say 'object' rather than 'mixed.'  Use&lt;br /&gt;
     * 'void' if nothing is returned.&lt;br /&gt;
     *&lt;br /&gt;
     * Here's an example of how to format examples:&lt;br /&gt;
     * &amp;lt;code&amp;gt;&lt;br /&gt;
     * require_once 'Net/Sample.php';&lt;br /&gt;
     *&lt;br /&gt;
     * $s = new Net_Sample();&lt;br /&gt;
     * if (PEAR::isError($s)) {&lt;br /&gt;
     *     echo $s-&amp;gt;getMessage() . &amp;quot;\n&amp;quot;;&lt;br /&gt;
     * }&lt;br /&gt;
     * &amp;lt;/code&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * Here is an example for non-php example or sample:&lt;br /&gt;
     * &amp;lt;samp&amp;gt;&lt;br /&gt;
     * pear install net_sample&lt;br /&gt;
     * &amp;lt;/samp&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * @param string $arg1 the string to quote&lt;br /&gt;
     * @param int    $arg2 an integer of how many problems happened.&lt;br /&gt;
     *                     Indent to the description's starting point&lt;br /&gt;
     *                     for long ones.&lt;br /&gt;
     *&lt;br /&gt;
     * @return int the integer of the set mode used. FALSE if foo&lt;br /&gt;
     *             foo could not be set.&lt;br /&gt;
     * @throws exceptionclass [description]&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @static&lt;br /&gt;
     * @see Net_Sample::$foo, Net_Other::someMethod()&lt;br /&gt;
     * @since Method available since Release 1.2.0&lt;br /&gt;
     * @deprecated Method deprecated in Release 2.0.0&lt;br /&gt;
     */&lt;br /&gt;
    function setFoo($arg1, $arg2 = 0)&lt;br /&gt;
    {&lt;br /&gt;
        /*&lt;br /&gt;
         * This is a &amp;quot;Block Comment.&amp;quot;  The format is the same as&lt;br /&gt;
         * Docblock Comments except there is only one asterisk at the&lt;br /&gt;
         * top.  phpDocumentor doesn't parse these.&lt;br /&gt;
         */&lt;br /&gt;
        if ($arg1 == 'good' || $arg1 == 'fair') {&lt;br /&gt;
            $this-&amp;gt;foo = $arg1;&lt;br /&gt;
            return 1;&lt;br /&gt;
        } elseif ($arg1 == 'poor' &amp;amp;&amp;amp; $arg2 &amp;gt; 1) {&lt;br /&gt;
            $this-&amp;gt;foo = 'poor';&lt;br /&gt;
            return 2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Local variables:&lt;br /&gt;
 * tab-width: 4&lt;br /&gt;
 * c-basic-offset: 4&lt;br /&gt;
 * c-hanging-comment-ender-p: nil&lt;br /&gt;
 * End:&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7048</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7048"/>
				<updated>2010-08-20T04:38:16Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 全局变量和函数命名 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 基本命名规则 ==&lt;br /&gt;
=== 全局变量和函数命名等 ===&lt;br /&gt;
* 变量&lt;br /&gt;
如果你需要定义一个全局变量的话,应当以美元符号加下划线“$_”开头，后接包名。例如,PEAR包中一个变量就作：$_PEAR_destructor_object_list。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 函数的命名&lt;br /&gt;
在PEAR的定义中，我们应当使用“驼峰”写法的代码规则，以包名加下划线为前缀。我们以“XML_RPC_serializeData()”来分析。&amp;lt;br/&amp;gt;&lt;br /&gt;
在命名中缩写词应当全部大写，如上面的XML和RPC，又如Protoss中的“RBAC”(Role-Based Access Control)。如果是几个单词连着写，那么第一个单词应当首字母小写，后面的单词首字母大写，如上面的serializeData。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* 类中的方法&lt;br /&gt;
在类中，public属性的变量或者参数应该以美元符加小写开头变量名来书写，如“$content”，“$mysqlResult”，“$protoss”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而私有的方法(private)或变量名应该冠以下划线，如“$_mysqlHandle”，“_processMethod()”，“_sort()”，“_intTree()”。&amp;lt;br/&amp;gt;&lt;br /&gt;
而protected则和public一样，不能加上下划线。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;br /&gt;
&lt;br /&gt;
== 全文示例 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for file&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for file (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 *&lt;br /&gt;
 * LICENSE: This source file is subject to version 3.01 of the PHP license&lt;br /&gt;
 * that is available through the world-wide-web at the following URI:&lt;br /&gt;
 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of&lt;br /&gt;
 * the PHP License and are unable to obtain it through the web, please&lt;br /&gt;
 * send a note to license@php.net so we can mail you a copy immediately.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    CVS: &amp;lt;?php&lt;br /&gt;
$&lt;br /&gt;
?&amp;gt; Id:$&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      File available since Release 1.2.0&lt;br /&gt;
 * @deprecated File deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This is a &amp;quot;Docblock Comment,&amp;quot; also known as a &amp;quot;docblock.&amp;quot;  The class'&lt;br /&gt;
 * docblock, below, contains a complete description of how to write these.&lt;br /&gt;
 */&lt;br /&gt;
require_once 'PEAR.php';&lt;br /&gt;
&lt;br /&gt;
// {{{ constants&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Methods return this if they succeed&lt;br /&gt;
 */&lt;br /&gt;
define('NET_SAMPLE_OK', 1);&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ GLOBALS&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * The number of objects created&lt;br /&gt;
 * @global int $GLOBALS['_NET_SAMPLE_Count']&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['_NET_SAMPLE_Count'] = 0;&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ Net_Sample&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * An example of how to write code to PEAR's standards&lt;br /&gt;
 *&lt;br /&gt;
 * Docblock comments start with &amp;quot;/**&amp;quot; at the top.  Notice how the &amp;quot;/&amp;quot;&lt;br /&gt;
 * lines up with the normal indenting and the asterisks on subsequent rows&lt;br /&gt;
 * are in line with the first asterisk.  The last line of comment text&lt;br /&gt;
 * should be immediately followed on the next line by the closing asterisk&lt;br /&gt;
 * and slash and then the item you are commenting on should be on the next&lt;br /&gt;
 * line below that.  Don't add extra lines.  Please put a blank line&lt;br /&gt;
 * between paragraphs as well as between the end of the description and&lt;br /&gt;
 * the start of the @tags.  Wrap comments before 80 columns in order to&lt;br /&gt;
 * ease readability for a wide variety of users.&lt;br /&gt;
 *&lt;br /&gt;
 * Docblocks can only be used for programming constructs which allow them&lt;br /&gt;
 * (classes, properties, methods, defines, includes, globals).  See the&lt;br /&gt;
 * phpDocumentor documentation for more information.&lt;br /&gt;
 * http://phpdoc.org/docs/HTMLSmartyConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html&lt;br /&gt;
 *&lt;br /&gt;
 * The Javadoc Style Guide is an excellent resource for figuring out&lt;br /&gt;
 * how to say what needs to be said in docblock comments.  Much of what is&lt;br /&gt;
 * written here is a summary of what is found there, though there are some&lt;br /&gt;
 * cases where what's said here overrides what is said there.&lt;br /&gt;
 * http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide&lt;br /&gt;
 *&lt;br /&gt;
 * The first line of any docblock is the summary.  Make them one short&lt;br /&gt;
 * sentence, without a period at the end.  Summaries for classes, properties&lt;br /&gt;
 * and constants should omit the subject and simply state the object,&lt;br /&gt;
 * because they are describing things rather than actions or behaviors.&lt;br /&gt;
 *&lt;br /&gt;
 * Below are the tags commonly used for classes. @category through @version&lt;br /&gt;
 * are required.  The remainder should only be used when necessary.&lt;br /&gt;
 * Please use them in the order they appear here.  phpDocumentor has&lt;br /&gt;
 * several other tags available, feel free to use them.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class Net_Sample&lt;br /&gt;
{&lt;br /&gt;
    // {{{ properties&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Potential values are 'good', 'fair', 'poor' and 'unknown'.&lt;br /&gt;
     *&lt;br /&gt;
     * @var string&lt;br /&gt;
     */&lt;br /&gt;
    var $foo = 'unknown';&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of life&lt;br /&gt;
     *&lt;br /&gt;
     * Note that names of private properties or methods must be&lt;br /&gt;
     * preceeded by an underscore.&lt;br /&gt;
     *&lt;br /&gt;
     * @var bool&lt;br /&gt;
     * @access private&lt;br /&gt;
     */&lt;br /&gt;
    var $_good = true;&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
    // {{{ setFoo()&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Registers the status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries for methods should use 3rd person declarative rather&lt;br /&gt;
     * than 2nd person imperative, beginning with a verb phrase.&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries should add description beyond the method's name. The&lt;br /&gt;
     * best method names are &amp;quot;self-documenting&amp;quot;, meaning they tell you&lt;br /&gt;
     * basically what the method does.  If the summary merely repeats&lt;br /&gt;
     * the method name in sentence form, it is not providing more&lt;br /&gt;
     * information.&lt;br /&gt;
     *&lt;br /&gt;
     * Summary Examples:&lt;br /&gt;
     *   + Sets the label              (preferred)&lt;br /&gt;
     *   + Set the label               (avoid)&lt;br /&gt;
     *   + This method sets the label  (avoid)&lt;br /&gt;
     *&lt;br /&gt;
     * Below are the tags commonly used for methods.  A @param tag is&lt;br /&gt;
     * required for each parameter the method has.  The @return&lt;br /&gt;
     * and @access tags are mandatory.  The @throws tag is required if&lt;br /&gt;
     * the method uses exceptions.  @static is required if the method can&lt;br /&gt;
     * be called statically.  The remainder should only be used when&lt;br /&gt;
     * necessary.  Please use them in the order they appear here.&lt;br /&gt;
     * phpDocumentor has several other tags available, feel free to use&lt;br /&gt;
     * them.&lt;br /&gt;
     *&lt;br /&gt;
     * The @param tag contains the data type, then the parameter's&lt;br /&gt;
     * name, followed by a description.  By convention, the first noun in&lt;br /&gt;
     * the description is the data type of the parameter.  Articles like&lt;br /&gt;
     * &amp;quot;a&amp;quot;, &amp;quot;an&amp;quot;, and  &amp;quot;the&amp;quot; can precede the noun.  The descriptions&lt;br /&gt;
     * should start with a phrase.  If further description is necessary,&lt;br /&gt;
     * follow with sentences.  Having two spaces between the name and the&lt;br /&gt;
     * description aids readability.&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase, do not capitalize and do not end with a&lt;br /&gt;
     * period:&lt;br /&gt;
     *   + the string to be tested&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase followed by a sentence, do not capitalize the&lt;br /&gt;
     * phrase, but end it with a period to distinguish it from the start&lt;br /&gt;
     * of the next sentence:&lt;br /&gt;
     *   + the string to be tested. Must use UTF-8 encoding.&lt;br /&gt;
     *&lt;br /&gt;
     * Return tags should contain the data type then a description of&lt;br /&gt;
     * the data returned.  The data type can be any of PHP's data types&lt;br /&gt;
     * (int, float, bool, string, array, object, resource, mixed)&lt;br /&gt;
     * and should contain the type primarily returned.  For example, if&lt;br /&gt;
     * a method returns an object when things work correctly but false&lt;br /&gt;
     * when an error happens, say 'object' rather than 'mixed.'  Use&lt;br /&gt;
     * 'void' if nothing is returned.&lt;br /&gt;
     *&lt;br /&gt;
     * Here's an example of how to format examples:&lt;br /&gt;
     * &amp;lt;code&amp;gt;&lt;br /&gt;
     * require_once 'Net/Sample.php';&lt;br /&gt;
     *&lt;br /&gt;
     * $s = new Net_Sample();&lt;br /&gt;
     * if (PEAR::isError($s)) {&lt;br /&gt;
     *     echo $s-&amp;gt;getMessage() . &amp;quot;\n&amp;quot;;&lt;br /&gt;
     * }&lt;br /&gt;
     * &amp;lt;/code&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * Here is an example for non-php example or sample:&lt;br /&gt;
     * &amp;lt;samp&amp;gt;&lt;br /&gt;
     * pear install net_sample&lt;br /&gt;
     * &amp;lt;/samp&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * @param string $arg1 the string to quote&lt;br /&gt;
     * @param int    $arg2 an integer of how many problems happened.&lt;br /&gt;
     *                     Indent to the description's starting point&lt;br /&gt;
     *                     for long ones.&lt;br /&gt;
     *&lt;br /&gt;
     * @return int the integer of the set mode used. FALSE if foo&lt;br /&gt;
     *             foo could not be set.&lt;br /&gt;
     * @throws exceptionclass [description]&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @static&lt;br /&gt;
     * @see Net_Sample::$foo, Net_Other::someMethod()&lt;br /&gt;
     * @since Method available since Release 1.2.0&lt;br /&gt;
     * @deprecated Method deprecated in Release 2.0.0&lt;br /&gt;
     */&lt;br /&gt;
    function setFoo($arg1, $arg2 = 0)&lt;br /&gt;
    {&lt;br /&gt;
        /*&lt;br /&gt;
         * This is a &amp;quot;Block Comment.&amp;quot;  The format is the same as&lt;br /&gt;
         * Docblock Comments except there is only one asterisk at the&lt;br /&gt;
         * top.  phpDocumentor doesn't parse these.&lt;br /&gt;
         */&lt;br /&gt;
        if ($arg1 == 'good' || $arg1 == 'fair') {&lt;br /&gt;
            $this-&amp;gt;foo = $arg1;&lt;br /&gt;
            return 1;&lt;br /&gt;
        } elseif ($arg1 == 'poor' &amp;amp;&amp;amp; $arg2 &amp;gt; 1) {&lt;br /&gt;
            $this-&amp;gt;foo = 'poor';&lt;br /&gt;
            return 2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Local variables:&lt;br /&gt;
 * tab-width: 4&lt;br /&gt;
 * c-basic-offset: 4&lt;br /&gt;
 * c-hanging-comment-ender-p: nil&lt;br /&gt;
 * End:&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7047</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7047"/>
				<updated>2010-08-20T04:23:07Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 全文示例 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 基本命名规则 ==&lt;br /&gt;
=== 全局变量和函数命名 ===&lt;br /&gt;
如果你需要定义一个全局变量的话,应当以美元符号加下划线“$_”开头，后接包名。例如,PEAR包中一个变量就作：$_PEAR_destructor_object_list.&lt;br /&gt;
&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;br /&gt;
&lt;br /&gt;
== 全文示例 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for file&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for file (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 *&lt;br /&gt;
 * LICENSE: This source file is subject to version 3.01 of the PHP license&lt;br /&gt;
 * that is available through the world-wide-web at the following URI:&lt;br /&gt;
 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of&lt;br /&gt;
 * the PHP License and are unable to obtain it through the web, please&lt;br /&gt;
 * send a note to license@php.net so we can mail you a copy immediately.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    CVS: &amp;lt;?php&lt;br /&gt;
$&lt;br /&gt;
?&amp;gt; Id:$&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      File available since Release 1.2.0&lt;br /&gt;
 * @deprecated File deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This is a &amp;quot;Docblock Comment,&amp;quot; also known as a &amp;quot;docblock.&amp;quot;  The class'&lt;br /&gt;
 * docblock, below, contains a complete description of how to write these.&lt;br /&gt;
 */&lt;br /&gt;
require_once 'PEAR.php';&lt;br /&gt;
&lt;br /&gt;
// {{{ constants&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Methods return this if they succeed&lt;br /&gt;
 */&lt;br /&gt;
define('NET_SAMPLE_OK', 1);&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ GLOBALS&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * The number of objects created&lt;br /&gt;
 * @global int $GLOBALS['_NET_SAMPLE_Count']&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['_NET_SAMPLE_Count'] = 0;&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ Net_Sample&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * An example of how to write code to PEAR's standards&lt;br /&gt;
 *&lt;br /&gt;
 * Docblock comments start with &amp;quot;/**&amp;quot; at the top.  Notice how the &amp;quot;/&amp;quot;&lt;br /&gt;
 * lines up with the normal indenting and the asterisks on subsequent rows&lt;br /&gt;
 * are in line with the first asterisk.  The last line of comment text&lt;br /&gt;
 * should be immediately followed on the next line by the closing asterisk&lt;br /&gt;
 * and slash and then the item you are commenting on should be on the next&lt;br /&gt;
 * line below that.  Don't add extra lines.  Please put a blank line&lt;br /&gt;
 * between paragraphs as well as between the end of the description and&lt;br /&gt;
 * the start of the @tags.  Wrap comments before 80 columns in order to&lt;br /&gt;
 * ease readability for a wide variety of users.&lt;br /&gt;
 *&lt;br /&gt;
 * Docblocks can only be used for programming constructs which allow them&lt;br /&gt;
 * (classes, properties, methods, defines, includes, globals).  See the&lt;br /&gt;
 * phpDocumentor documentation for more information.&lt;br /&gt;
 * http://phpdoc.org/docs/HTMLSmartyConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html&lt;br /&gt;
 *&lt;br /&gt;
 * The Javadoc Style Guide is an excellent resource for figuring out&lt;br /&gt;
 * how to say what needs to be said in docblock comments.  Much of what is&lt;br /&gt;
 * written here is a summary of what is found there, though there are some&lt;br /&gt;
 * cases where what's said here overrides what is said there.&lt;br /&gt;
 * http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide&lt;br /&gt;
 *&lt;br /&gt;
 * The first line of any docblock is the summary.  Make them one short&lt;br /&gt;
 * sentence, without a period at the end.  Summaries for classes, properties&lt;br /&gt;
 * and constants should omit the subject and simply state the object,&lt;br /&gt;
 * because they are describing things rather than actions or behaviors.&lt;br /&gt;
 *&lt;br /&gt;
 * Below are the tags commonly used for classes. @category through @version&lt;br /&gt;
 * are required.  The remainder should only be used when necessary.&lt;br /&gt;
 * Please use them in the order they appear here.  phpDocumentor has&lt;br /&gt;
 * several other tags available, feel free to use them.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class Net_Sample&lt;br /&gt;
{&lt;br /&gt;
    // {{{ properties&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Potential values are 'good', 'fair', 'poor' and 'unknown'.&lt;br /&gt;
     *&lt;br /&gt;
     * @var string&lt;br /&gt;
     */&lt;br /&gt;
    var $foo = 'unknown';&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of life&lt;br /&gt;
     *&lt;br /&gt;
     * Note that names of private properties or methods must be&lt;br /&gt;
     * preceeded by an underscore.&lt;br /&gt;
     *&lt;br /&gt;
     * @var bool&lt;br /&gt;
     * @access private&lt;br /&gt;
     */&lt;br /&gt;
    var $_good = true;&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
    // {{{ setFoo()&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Registers the status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries for methods should use 3rd person declarative rather&lt;br /&gt;
     * than 2nd person imperative, beginning with a verb phrase.&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries should add description beyond the method's name. The&lt;br /&gt;
     * best method names are &amp;quot;self-documenting&amp;quot;, meaning they tell you&lt;br /&gt;
     * basically what the method does.  If the summary merely repeats&lt;br /&gt;
     * the method name in sentence form, it is not providing more&lt;br /&gt;
     * information.&lt;br /&gt;
     *&lt;br /&gt;
     * Summary Examples:&lt;br /&gt;
     *   + Sets the label              (preferred)&lt;br /&gt;
     *   + Set the label               (avoid)&lt;br /&gt;
     *   + This method sets the label  (avoid)&lt;br /&gt;
     *&lt;br /&gt;
     * Below are the tags commonly used for methods.  A @param tag is&lt;br /&gt;
     * required for each parameter the method has.  The @return&lt;br /&gt;
     * and @access tags are mandatory.  The @throws tag is required if&lt;br /&gt;
     * the method uses exceptions.  @static is required if the method can&lt;br /&gt;
     * be called statically.  The remainder should only be used when&lt;br /&gt;
     * necessary.  Please use them in the order they appear here.&lt;br /&gt;
     * phpDocumentor has several other tags available, feel free to use&lt;br /&gt;
     * them.&lt;br /&gt;
     *&lt;br /&gt;
     * The @param tag contains the data type, then the parameter's&lt;br /&gt;
     * name, followed by a description.  By convention, the first noun in&lt;br /&gt;
     * the description is the data type of the parameter.  Articles like&lt;br /&gt;
     * &amp;quot;a&amp;quot;, &amp;quot;an&amp;quot;, and  &amp;quot;the&amp;quot; can precede the noun.  The descriptions&lt;br /&gt;
     * should start with a phrase.  If further description is necessary,&lt;br /&gt;
     * follow with sentences.  Having two spaces between the name and the&lt;br /&gt;
     * description aids readability.&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase, do not capitalize and do not end with a&lt;br /&gt;
     * period:&lt;br /&gt;
     *   + the string to be tested&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase followed by a sentence, do not capitalize the&lt;br /&gt;
     * phrase, but end it with a period to distinguish it from the start&lt;br /&gt;
     * of the next sentence:&lt;br /&gt;
     *   + the string to be tested. Must use UTF-8 encoding.&lt;br /&gt;
     *&lt;br /&gt;
     * Return tags should contain the data type then a description of&lt;br /&gt;
     * the data returned.  The data type can be any of PHP's data types&lt;br /&gt;
     * (int, float, bool, string, array, object, resource, mixed)&lt;br /&gt;
     * and should contain the type primarily returned.  For example, if&lt;br /&gt;
     * a method returns an object when things work correctly but false&lt;br /&gt;
     * when an error happens, say 'object' rather than 'mixed.'  Use&lt;br /&gt;
     * 'void' if nothing is returned.&lt;br /&gt;
     *&lt;br /&gt;
     * Here's an example of how to format examples:&lt;br /&gt;
     * &amp;lt;code&amp;gt;&lt;br /&gt;
     * require_once 'Net/Sample.php';&lt;br /&gt;
     *&lt;br /&gt;
     * $s = new Net_Sample();&lt;br /&gt;
     * if (PEAR::isError($s)) {&lt;br /&gt;
     *     echo $s-&amp;gt;getMessage() . &amp;quot;\n&amp;quot;;&lt;br /&gt;
     * }&lt;br /&gt;
     * &amp;lt;/code&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * Here is an example for non-php example or sample:&lt;br /&gt;
     * &amp;lt;samp&amp;gt;&lt;br /&gt;
     * pear install net_sample&lt;br /&gt;
     * &amp;lt;/samp&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * @param string $arg1 the string to quote&lt;br /&gt;
     * @param int    $arg2 an integer of how many problems happened.&lt;br /&gt;
     *                     Indent to the description's starting point&lt;br /&gt;
     *                     for long ones.&lt;br /&gt;
     *&lt;br /&gt;
     * @return int the integer of the set mode used. FALSE if foo&lt;br /&gt;
     *             foo could not be set.&lt;br /&gt;
     * @throws exceptionclass [description]&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @static&lt;br /&gt;
     * @see Net_Sample::$foo, Net_Other::someMethod()&lt;br /&gt;
     * @since Method available since Release 1.2.0&lt;br /&gt;
     * @deprecated Method deprecated in Release 2.0.0&lt;br /&gt;
     */&lt;br /&gt;
    function setFoo($arg1, $arg2 = 0)&lt;br /&gt;
    {&lt;br /&gt;
        /*&lt;br /&gt;
         * This is a &amp;quot;Block Comment.&amp;quot;  The format is the same as&lt;br /&gt;
         * Docblock Comments except there is only one asterisk at the&lt;br /&gt;
         * top.  phpDocumentor doesn't parse these.&lt;br /&gt;
         */&lt;br /&gt;
        if ($arg1 == 'good' || $arg1 == 'fair') {&lt;br /&gt;
            $this-&amp;gt;foo = $arg1;&lt;br /&gt;
            return 1;&lt;br /&gt;
        } elseif ($arg1 == 'poor' &amp;amp;&amp;amp; $arg2 &amp;gt; 1) {&lt;br /&gt;
            $this-&amp;gt;foo = 'poor';&lt;br /&gt;
            return 2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Local variables:&lt;br /&gt;
 * tab-width: 4&lt;br /&gt;
 * c-basic-offset: 4&lt;br /&gt;
 * c-hanging-comment-ender-p: nil&lt;br /&gt;
 * End:&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7046</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7046"/>
				<updated>2010-08-20T04:22:16Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 基本命名规则 ==&lt;br /&gt;
=== 全局变量和函数命名 ===&lt;br /&gt;
如果你需要定义一个全局变量的话,应当以美元符号加下划线“$_”开头，后接包名。例如,PEAR包中一个变量就作：$_PEAR_destructor_object_list.&lt;br /&gt;
&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;br /&gt;
&lt;br /&gt;
== 全文示例 ==&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for file&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for file (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 *&lt;br /&gt;
 * LICENSE: This source file is subject to version 3.01 of the PHP license&lt;br /&gt;
 * that is available through the world-wide-web at the following URI:&lt;br /&gt;
 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of&lt;br /&gt;
 * the PHP License and are unable to obtain it through the web, please&lt;br /&gt;
 * send a note to license@php.net so we can mail you a copy immediately.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    CVS: &amp;lt;?php&lt;br /&gt;
$&lt;br /&gt;
?&amp;gt; Id:$&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      File available since Release 1.2.0&lt;br /&gt;
 * @deprecated File deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This is a &amp;quot;Docblock Comment,&amp;quot; also known as a &amp;quot;docblock.&amp;quot;  The class'&lt;br /&gt;
 * docblock, below, contains a complete description of how to write these.&lt;br /&gt;
 */&lt;br /&gt;
require_once 'PEAR.php';&lt;br /&gt;
&lt;br /&gt;
// {{{ constants&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Methods return this if they succeed&lt;br /&gt;
 */&lt;br /&gt;
define('NET_SAMPLE_OK', 1);&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ GLOBALS&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * The number of objects created&lt;br /&gt;
 * @global int $GLOBALS['_NET_SAMPLE_Count']&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['_NET_SAMPLE_Count'] = 0;&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ Net_Sample&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * An example of how to write code to PEAR's standards&lt;br /&gt;
 *&lt;br /&gt;
 * Docblock comments start with &amp;quot;/**&amp;quot; at the top.  Notice how the &amp;quot;/&amp;quot;&lt;br /&gt;
 * lines up with the normal indenting and the asterisks on subsequent rows&lt;br /&gt;
 * are in line with the first asterisk.  The last line of comment text&lt;br /&gt;
 * should be immediately followed on the next line by the closing asterisk&lt;br /&gt;
 * and slash and then the item you are commenting on should be on the next&lt;br /&gt;
 * line below that.  Don't add extra lines.  Please put a blank line&lt;br /&gt;
 * between paragraphs as well as between the end of the description and&lt;br /&gt;
 * the start of the @tags.  Wrap comments before 80 columns in order to&lt;br /&gt;
 * ease readability for a wide variety of users.&lt;br /&gt;
 *&lt;br /&gt;
 * Docblocks can only be used for programming constructs which allow them&lt;br /&gt;
 * (classes, properties, methods, defines, includes, globals).  See the&lt;br /&gt;
 * phpDocumentor documentation for more information.&lt;br /&gt;
 * http://phpdoc.org/docs/HTMLSmartyConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html&lt;br /&gt;
 *&lt;br /&gt;
 * The Javadoc Style Guide is an excellent resource for figuring out&lt;br /&gt;
 * how to say what needs to be said in docblock comments.  Much of what is&lt;br /&gt;
 * written here is a summary of what is found there, though there are some&lt;br /&gt;
 * cases where what's said here overrides what is said there.&lt;br /&gt;
 * http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide&lt;br /&gt;
 *&lt;br /&gt;
 * The first line of any docblock is the summary.  Make them one short&lt;br /&gt;
 * sentence, without a period at the end.  Summaries for classes, properties&lt;br /&gt;
 * and constants should omit the subject and simply state the object,&lt;br /&gt;
 * because they are describing things rather than actions or behaviors.&lt;br /&gt;
 *&lt;br /&gt;
 * Below are the tags commonly used for classes. @category through @version&lt;br /&gt;
 * are required.  The remainder should only be used when necessary.&lt;br /&gt;
 * Please use them in the order they appear here.  phpDocumentor has&lt;br /&gt;
 * several other tags available, feel free to use them.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class Net_Sample&lt;br /&gt;
{&lt;br /&gt;
    // {{{ properties&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Potential values are 'good', 'fair', 'poor' and 'unknown'.&lt;br /&gt;
     *&lt;br /&gt;
     * @var string&lt;br /&gt;
     */&lt;br /&gt;
    var $foo = 'unknown';&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of life&lt;br /&gt;
     *&lt;br /&gt;
     * Note that names of private properties or methods must be&lt;br /&gt;
     * preceeded by an underscore.&lt;br /&gt;
     *&lt;br /&gt;
     * @var bool&lt;br /&gt;
     * @access private&lt;br /&gt;
     */&lt;br /&gt;
    var $_good = true;&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
    // {{{ setFoo()&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Registers the status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries for methods should use 3rd person declarative rather&lt;br /&gt;
     * than 2nd person imperative, beginning with a verb phrase.&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries should add description beyond the method's name. The&lt;br /&gt;
     * best method names are &amp;quot;self-documenting&amp;quot;, meaning they tell you&lt;br /&gt;
     * basically what the method does.  If the summary merely repeats&lt;br /&gt;
     * the method name in sentence form, it is not providing more&lt;br /&gt;
     * information.&lt;br /&gt;
     *&lt;br /&gt;
     * Summary Examples:&lt;br /&gt;
     *   + Sets the label              (preferred)&lt;br /&gt;
     *   + Set the label               (avoid)&lt;br /&gt;
     *   + This method sets the label  (avoid)&lt;br /&gt;
     *&lt;br /&gt;
     * Below are the tags commonly used for methods.  A @param tag is&lt;br /&gt;
     * required for each parameter the method has.  The @return&lt;br /&gt;
     * and @access tags are mandatory.  The @throws tag is required if&lt;br /&gt;
     * the method uses exceptions.  @static is required if the method can&lt;br /&gt;
     * be called statically.  The remainder should only be used when&lt;br /&gt;
     * necessary.  Please use them in the order they appear here.&lt;br /&gt;
     * phpDocumentor has several other tags available, feel free to use&lt;br /&gt;
     * them.&lt;br /&gt;
     *&lt;br /&gt;
     * The @param tag contains the data type, then the parameter's&lt;br /&gt;
     * name, followed by a description.  By convention, the first noun in&lt;br /&gt;
     * the description is the data type of the parameter.  Articles like&lt;br /&gt;
     * &amp;quot;a&amp;quot;, &amp;quot;an&amp;quot;, and  &amp;quot;the&amp;quot; can precede the noun.  The descriptions&lt;br /&gt;
     * should start with a phrase.  If further description is necessary,&lt;br /&gt;
     * follow with sentences.  Having two spaces between the name and the&lt;br /&gt;
     * description aids readability.&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase, do not capitalize and do not end with a&lt;br /&gt;
     * period:&lt;br /&gt;
     *   + the string to be tested&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase followed by a sentence, do not capitalize the&lt;br /&gt;
     * phrase, but end it with a period to distinguish it from the start&lt;br /&gt;
     * of the next sentence:&lt;br /&gt;
     *   + the string to be tested. Must use UTF-8 encoding.&lt;br /&gt;
     *&lt;br /&gt;
     * Return tags should contain the data type then a description of&lt;br /&gt;
     * the data returned.  The data type can be any of PHP's data types&lt;br /&gt;
     * (int, float, bool, string, array, object, resource, mixed)&lt;br /&gt;
     * and should contain the type primarily returned.  For example, if&lt;br /&gt;
     * a method returns an object when things work correctly but false&lt;br /&gt;
     * when an error happens, say 'object' rather than 'mixed.'  Use&lt;br /&gt;
     * 'void' if nothing is returned.&lt;br /&gt;
     *&lt;br /&gt;
     * Here's an example of how to format examples:&lt;br /&gt;
     * &amp;lt;code&amp;gt;&lt;br /&gt;
     * require_once 'Net/Sample.php';&lt;br /&gt;
     *&lt;br /&gt;
     * $s = new Net_Sample();&lt;br /&gt;
     * if (PEAR::isError($s)) {&lt;br /&gt;
     *     echo $s-&amp;gt;getMessage() . &amp;quot;\n&amp;quot;;&lt;br /&gt;
     * }&lt;br /&gt;
     * &amp;lt;/code&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * Here is an example for non-php example or sample:&lt;br /&gt;
     * &amp;lt;samp&amp;gt;&lt;br /&gt;
     * pear install net_sample&lt;br /&gt;
     * &amp;lt;/samp&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * @param string $arg1 the string to quote&lt;br /&gt;
     * @param int    $arg2 an integer of how many problems happened.&lt;br /&gt;
     *                     Indent to the description's starting point&lt;br /&gt;
     *                     for long ones.&lt;br /&gt;
     *&lt;br /&gt;
     * @return int the integer of the set mode used. FALSE if foo&lt;br /&gt;
     *             foo could not be set.&lt;br /&gt;
     * @throws exceptionclass [description]&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @static&lt;br /&gt;
     * @see Net_Sample::$foo, Net_Other::someMethod()&lt;br /&gt;
     * @since Method available since Release 1.2.0&lt;br /&gt;
     * @deprecated Method deprecated in Release 2.0.0&lt;br /&gt;
     */&lt;br /&gt;
    function setFoo($arg1, $arg2 = 0)&lt;br /&gt;
    {&lt;br /&gt;
        /*&lt;br /&gt;
         * This is a &amp;quot;Block Comment.&amp;quot;  The format is the same as&lt;br /&gt;
         * Docblock Comments except there is only one asterisk at the&lt;br /&gt;
         * top.  phpDocumentor doesn't parse these.&lt;br /&gt;
         */&lt;br /&gt;
        if ($arg1 == 'good' || $arg1 == 'fair') {&lt;br /&gt;
            $this-&amp;gt;foo = $arg1;&lt;br /&gt;
            return 1;&lt;br /&gt;
        } elseif ($arg1 == 'poor' &amp;amp;&amp;amp; $arg2 &amp;gt; 1) {&lt;br /&gt;
            $this-&amp;gt;foo = 'poor';&lt;br /&gt;
            return 2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Local variables:&lt;br /&gt;
 * tab-width: 4&lt;br /&gt;
 * c-basic-offset: 4&lt;br /&gt;
 * c-hanging-comment-ender-p: nil&lt;br /&gt;
 * End:&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7045</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7045"/>
				<updated>2010-08-20T04:21:17Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 变量 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 基本命名规则 ==&lt;br /&gt;
=== 全局变量和函数命名 ===&lt;br /&gt;
如果你需要定义一个全局变量的话,应当以美元符号加下划线“$_”开头，后接包名。例如,PEAR包中一个变量就作：$_PEAR_destructor_object_list.&lt;br /&gt;
&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7044</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7044"/>
				<updated>2010-08-20T04:15:10Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 变量 ==&lt;br /&gt;
&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7043</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7043"/>
				<updated>2010-08-20T04:11:19Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 文件的相关规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;br /&gt;
* 所有文件必须是unix文件格式&lt;br /&gt;
* 所有文件编码必须是UTF-8&lt;br /&gt;
* 文件以ASCII码来存储&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7042</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7042"/>
				<updated>2010-08-20T04:06:24Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 文件头部注释书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
所有需要包含在PEAR核心发布的PHP代码文件，在文件开始的时候，你必须加入以下的注释声明：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7041</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7041"/>
				<updated>2010-08-20T04:05:16Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 文件头部注释书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&amp;lt;br/&amp;gt;&lt;br /&gt;
* CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
* URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
* 常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7040</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7040"/>
				<updated>2010-08-20T04:04:11Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 文件头部注释书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
对于不在PEAR核心代码库中的文件，建议你也在文件的开始处有这样一个类似的注释块，标明版权，协议，作者等等。同时也在第一行加入VIM的MODELINE，这样在VIM中能够保持PEAR的代码风格。&lt;br /&gt;
CVS标记：&lt;br /&gt;
如上面所展示那样，在每个文件中加入CVS的ID标记，如果你编辑或修改的文件中没有这个标记，那么请加入，或者是替换原文件中相类似的表现形式（如&amp;quot;Last modified&amp;quot;等等）&lt;br /&gt;
URL样本：&lt;br /&gt;
你可以参照RFC 2606,使用&amp;quot;www.example.com&amp;quot;作为所有的URL样本。&lt;br /&gt;
常量命名：&lt;br /&gt;
常量应该尽量使用大写，为了便于理解，使用下划线分割每个单词。同时，你应该常量所在的包名或者是类名作为前缀。比如，对于Bug类中常量应该以Bug_开始。以上是PEAR的编码规则，详细的编码规则可以参考PEAR中的CODING_STANDDARD文件的说明。为了更好地理解这些编码规则，你也可以参考一下现有PEAR核心模块的代码。&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7039</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7039"/>
				<updated>2010-08-20T04:03:00Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 文件头部注释书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7038</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7038"/>
				<updated>2010-08-20T04:02:23Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 文件头部注释书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
/* vim: set expandtab tabstop=4 shiftwidth=4: */&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | PHP version 4.0                                                      |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the PHP license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available at through the world-wide-web at                           |&lt;br /&gt;
// | http://www.php.net/license/2_02.txt.                                 |&lt;br /&gt;
// | If you did not receive a copy of the PHP license and are unable to   |&lt;br /&gt;
// | obtain it through the world-wide-web, please send a note to          |&lt;br /&gt;
// | license@php.net so we can mail you a copy immediately.               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Authors: 组织机构名称                                                |&lt;br /&gt;
// |          Snake.Zero -- Orochi the Great                              |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
// $Id$&lt;br /&gt;
&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7037</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7037"/>
				<updated>2010-08-20T03:55:20Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 载入文件的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
{{notice|content=在Protoss中，不要用“include”或者“require”去包含一个按命名规则命名的类，因为当你使用new来实例化的时候，Protoss会自动载入文件。&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Protoss的上下文处理方式保证了它不会二次包含同一个文件。&amp;lt;/b&amp;gt;它所包含的文件和类都会在上下文中注册。}}&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7036</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7036"/>
				<updated>2010-08-20T03:52:00Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 载入文件的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
无论什么时候，当你需要无条件包含进一个class文件，你必须使用requre_once;当你需要条件包含进一个class文件，你必须使用include_once;这样可以保证你要包含的文件只会包含一次，并且这2个语句共用同一个文件列表，所以你无须担心二者会混淆，一旦require_once 包含了一个文件，include_once不会再重复包含相同的文件，反之亦然。&lt;br /&gt;
&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7035</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7035"/>
				<updated>2010-08-20T03:51:23Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 注释的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
对于类的在线文档，应该能够被PHPDoc转换，就象JavaDoc那样。[[http://www.phpdoc.org/ PHPDoc]]也是一个PEAR的应用程序，更详细的介绍你可以去 http://www.phpdoc.de/ 查看。除了类的在线文档，建议你应该使用非文档性质的注释来诠释你的代码，当你看到一段代码时想：哦，我想不需要在文档里去仔细描述它吧。那么你最好给这段代码作一个简单的注释，这样防止你会忘记它们是如何工作的。对于注释的形式，C的 /* */和C++的//都不错，不过，不要使用Perl或者shell的#注释方式。&lt;br /&gt;
&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7034</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7034"/>
				<updated>2010-08-20T03:48:23Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 数组的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7033</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7033"/>
				<updated>2010-08-20T03:48:04Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 定义函数的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7032</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7032"/>
				<updated>2010-08-20T03:47:45Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 定义类的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7031</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7031"/>
				<updated>2010-08-20T03:45:38Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 过长的语句要分行 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7030</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7030"/>
				<updated>2010-08-20T03:43:08Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 上下文对齐标准 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7029</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7029"/>
				<updated>2010-08-20T03:34:34Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 上下文对齐标准 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7028</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7028"/>
				<updated>2010-08-20T03:33:59Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 数组的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$some_array = array(&lt;br /&gt;
    'foo'  =&amp;gt; 'bar',&lt;br /&gt;
    'spam' =&amp;gt; 'ham',&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
数组中的对齐参照物为“=&amp;gt;”，符号左边至少要保证1个空格，而右边也需要1个空格。&lt;br /&gt;
&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7027</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7027"/>
				<updated>2010-08-20T03:32:06Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 定义函数的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
带默认值的参数应当写的参数列表的最后几个。通常都要返回有意义的值。下面来看个长点的例子：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
老规矩，每行最多80个字符。超过的话，就要换行。注意几点：&lt;br /&gt;
* 换行后的参数前要有4个空格&lt;br /&gt;
* “)”应该和关键字“function”对齐&lt;br /&gt;
* “)”和“{”之间要有1个空格&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7026</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7026"/>
				<updated>2010-08-20T03:21:59Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 定义函数的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
&lt;br /&gt;
=== 标准函数定义书写规范 ===&lt;br /&gt;
函数的定义基于K&amp;amp;R标准。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
引申：&amp;lt;br/&amp;gt;&lt;br /&gt;
Brian W．Kernighan(柯尼汉)和Dennis M．Ritchie(里奇)合著了影响深远的名著《The C Programming Language》，常常称它为‘K&amp;amp;R’。&lt;br /&gt;
&lt;br /&gt;
=== 多行函数定义书写规范 ===&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
function someFunctionWithAVeryLongName($firstParameter = 'something', $secondParameter = 'booooo',&lt;br /&gt;
    $third = null, $fourthParameter = false, $fifthParameter = 123.12,&lt;br /&gt;
    $sixthParam = true&lt;br /&gt;
) {&lt;br /&gt;
    //....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7025</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7025"/>
				<updated>2010-08-20T03:15:48Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 定义类的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
类名后的大括号“{”要换行顶格书写。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Foo_Bar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //... code goes here&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{notice|content=本节以下内容为非PEAR的书写规范，但是却是很多年经验的总结，这些经验一部分来自己我自己，另一部分也是“道上”的优秀习惯。}}&lt;br /&gt;
类的命名使用aaa_bbb这样的方法时，应当以“_”为分割符，后段为前段包内的子项，他们是上下级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
更多更详细介绍请参考：[[Protoss/目录结构#.E5.91.BD.E5.90.8D.E8.A7.84.E8.8C.83|Protoss中的类命名规范]]。&lt;br /&gt;
&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7024</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7024"/>
				<updated>2010-08-20T03:01:15Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 上下文对齐标准 ===&lt;br /&gt;
一般情况，我们这样对齐：&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$short  = foo($bar);&lt;br /&gt;
$longer = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
当上下文的两行代码的变量名都差不多长时，应当以“=”为参照物来对齐，“=”的两边都需要有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
但是如果碰到一变量名短的变态，一个长得变态时，应该不去对齐。&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
$short = foo($bar);&lt;br /&gt;
$thisVariableNameIsVeeeeeeeeeeryLong = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 过长的语句要分行 ===&lt;br /&gt;
&amp;lt;source_lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$rows[$otherrow-&amp;gt;something]-&amp;gt;somemethod-&amp;gt;returnArray&lt;br /&gt;
    =  $this-&amp;gt;xajax-&amp;gt;getJavascript(t3lib_extMgm::siteRelPath('nr_xajax'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7023</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7023"/>
				<updated>2010-08-20T02:49:59Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 多行书写格式 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行满了的情况下才需要换行，很多时候为了增加代码的可读性，我们也用换行来书写，就像上面这段这样。还是老话，注意层级关系。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
连贯查询是个不错的东西，但是同样也会造成一条语句很长，所以我们也分行来书写，规则是在每个箭头“-&amp;gt;”的位置换行，前面同样的是4个空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$condition = array(&lt;br /&gt;
    $someModel-&amp;gt;primaryKey       =&amp;gt; 123,&lt;br /&gt;
    'some_other_conditions_here' =&amp;gt; 'blabla'&lt;br /&gt;
);&lt;br /&gt;
$someModel-&amp;gt;select()&lt;br /&gt;
    -&amp;gt;where($condition)&lt;br /&gt;
    -&amp;gt;orderby('created DESC');&lt;br /&gt;
    -&amp;gt;execute()&lt;br /&gt;
    -&amp;gt;fetch();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7022</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7022"/>
				<updated>2010-08-19T08:43:00Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 多行书写格式 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&amp;lt;br/&amp;gt;&lt;br /&gt;
好了，让我们来看一个变态点的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $this-&amp;gt;someOtherFunc(&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc(&lt;br /&gt;
            'Help me!',&lt;br /&gt;
            array(&lt;br /&gt;
                'foo'  =&amp;gt; 'bar',&lt;br /&gt;
                'spam' =&amp;gt; 'eggs',&lt;br /&gt;
            ),&lt;br /&gt;
            23&lt;br /&gt;
        ),&lt;br /&gt;
        $this-&amp;gt;someEvenOtherFunc()&lt;br /&gt;
    ),&lt;br /&gt;
    $this-&amp;gt;wowowowowow(12)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
并不是说一行&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7021</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7021"/>
				<updated>2010-08-18T11:04:05Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7020</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7020"/>
				<updated>2010-08-18T10:07:56Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 函数调用的书写规范 ==&lt;br /&gt;
=== 单行调用函数 ===&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 多行书写格式 ===&lt;br /&gt;
当一行书写超过&amp;lt;b&amp;gt;80&amp;lt;/b&amp;gt;个字节的时候，请分开成多行来书写，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;someObject-&amp;gt;subObject-&amp;gt;callThisFunctionWithALongName(&lt;br /&gt;
    $parameterOne, $parameterTwo,&lt;br /&gt;
    $aVeryLongParameterThree&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
因为不是每个人都有很宽的显示器的，一般来说，如果看代码需要横向滚屏的话，会很不爽，因此需要分多行书写。为了方便阅读，一些很长的变量名(所以大蛇不建议你用很长的变量名)最好另起一行，同时几个参数写在同一行也是允许的，但是相对所属的调用函数这一级前面要加4个空格的缩进。&amp;lt;br/&amp;gt;&lt;br /&gt;
另外，要记得行末的“,”要跟着它前面的参数，且中间不能有空格。&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7019</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7019"/>
				<updated>2010-08-18T04:04:03Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：/* 函数调用的书写规范 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
为了增加可读性，我们也可以在函数/类的方法调用时，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;callSomeFunction('param1',     'second',        true);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('parameter2', 'third',         false);&lt;br /&gt;
$this-&amp;gt;callSomeFunction('3',          'verrrrrrylong', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7018</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7018"/>
				<updated>2010-08-18T04:00:24Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
所有的[[http://cn.php.net/manual/en/language.operators.php 运算符(包括算术运算符、赋值运算符、位运算符、比较运算符等等)]]的左边和右边都需要有一个空格。&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
函数调用时，函数名与“(”之间不能有空格；中间的第个参数与其之前的参数后的“,”之间要有一个空格，但是参数自己后面的“,”之间不能有空格；最后一个参数与“)”之间不能有空格。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
如上面的代码所表述的，“=”的两边都需要有空格，但是如果情况特殊，上下文中都是类似的函数调用操作时，应当以“=”为参照物来对齐，如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7017</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7017"/>
				<updated>2010-08-17T12:03:46Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件简单时 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
=== 条件复杂时 ===&lt;br /&gt;
这种写法可以强调第一个条件，同时也属于中规中矩的写法。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (($condition1&lt;br /&gt;
    || $condition2)&lt;br /&gt;
    &amp;amp;&amp;amp; $condition3&lt;br /&gt;
    &amp;amp;&amp;amp; $condition4&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
下面这种写法是将多个条件对齐。好处显而易见，这样可以方便的一眼扫完所有条件，而且结构清晰。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (   $condition1&lt;br /&gt;
    || $condition2&lt;br /&gt;
    || $condition3&lt;br /&gt;
) {&lt;br /&gt;
    //code here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$is_foo = ($condition1 || $condition2);&lt;br /&gt;
$is_bar = ($condition3 &amp;amp;&amp;amp; $condtion4);&lt;br /&gt;
if ($is_foo &amp;amp;&amp;amp; $is_bar) {&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 三元运算符 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$a = $condition1 &amp;amp;&amp;amp; $condition2&lt;br /&gt;
    ? $foo : $bar;&lt;br /&gt;
&lt;br /&gt;
$b = $condition3 &amp;amp;&amp;amp; $condition4&lt;br /&gt;
    ? $foo_man_this_is_too_long_what_should_i_do&lt;br /&gt;
    : $bar;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	<entry>
		<id>http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7016</id>
		<title>Protoss/规范/代码规范</title>
		<link rel="alternate" type="text/html" href="http://wiki.blueidea.com/index.php?title=Protoss/%E8%A7%84%E8%8C%83/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83&amp;diff=7016"/>
				<updated>2010-08-17T07:51:58Z</updated>
		
		<summary type="html">&lt;p&gt;SnakeZero：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;写在前面：&lt;br /&gt;
本规则基于PEAR的代码书写规范，但是又有些许改进，在不同的地方会指出。&amp;lt;br/&amp;gt;&lt;br /&gt;
== 缩进规则与行书写规范 ==&lt;br /&gt;
所有代码中，均使用4个空格作为缩进标准，不允许使用制表符(tab)。&amp;lt;br/&amp;gt;&lt;br /&gt;
这样做的好处是：不管什么系统或者编辑器下看，代码都是整齐的。在使用SVN、CVS等工具或者查看diff时，不会对编码和阅读人员带来困难。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是的Emacs编辑器，请设置“indent-tabs-mode”。&amp;lt;br/&amp;gt;&lt;br /&gt;
如果你使用的是大蛇所钟爱的Vim(GVim)的话，请在_vimrc中作如下设置：&amp;lt;br/&amp;gt;&lt;br /&gt;
set expandtab&amp;lt;br/&amp;gt;&lt;br /&gt;
set shiftwidth=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set softtabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
set tabstop=4&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== 控制结构书写规范 ==&lt;br /&gt;
Control Structures，多译作控制结构，可以参考[[http://cn.php.net/manual/en/language.control-structures.php PHP手册]]。&amp;lt;br/&amp;gt;&lt;br /&gt;
其实说白了就是if, for, while, switch这些啦。&amp;lt;br/&amp;gt;&lt;br /&gt;
一般不是很复杂的条件判断写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意上面这段代码中，if与“(”之间有个空格，两个条件与符号间有空格。“)”与“{”之间有空格，&amp;lt;b&amp;gt;并且是在同一行&amp;lt;/b&amp;gt;。&amp;lt;br/&amp;gt;&lt;br /&gt;
else和elseif的前后大括号“}”和“{”都在同一行。&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
如果是switch的话，写成这样：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
注意case和switch的缩进级别是一致的。&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 函数调用的书写规范 ==&lt;br /&gt;
== 定义类的书写规范 ==&lt;br /&gt;
== 定义函数的书写规范 ==&lt;br /&gt;
== 数组的书写规范 ==&lt;br /&gt;
== 注释的书写规范 ==&lt;br /&gt;
== 载入文件的书写规范 ==&lt;br /&gt;
== 文件头部注释书写规范 ==&lt;br /&gt;
== 文件的相关规范 ==&lt;/div&gt;</summary>
		<author><name>SnakeZero</name></author>	</entry>

	</feed>