PHP网页编程之PHP 编码标准
HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。编码|标准缩进
缩进利用4个空格,而不是 tab。假如你利用 Emacs 编纂 PEAR 代码,你应当设置 indent-tabs-mode 为 nil。上面是一个 mode hook 的示例,用于设置 Emacs 合适缩进尺度(你必需确保在编纂 PHP 文件时,这些设置产生感化):
(defun php-mode-hook ()
(setq tab-width 4
c-basic-offset 4
c-hanging-comment-ender-p nil
indent-tabs-mode
(not
(and (string-match "/\\(PEAR\\|pear\\)/" (buffer-file-name))
(string-match "\.php$" (buffer-file-name))))))
这里是一律后果的 vim 划定规矩:
set expandtab
set shiftwidth=4
set softtabstop=4
set tabstop=4
--------------------------------------------------------------------------------
掌握布局
掌握布局包括 if、for、while、switch 等。这里有一个 if 语句的示例和一个 switch 语句的示例:
if 语句的示例:
<?php
if ((condition1) || (condition2)) {
action1;
} elseif ((condition3) && (condition4)) {
action2;
} else {
defaultaction;
}
?>
switch 语句的示例:
<?php
switch (condition) {
case 1:
action1;
break;
case 2:
action2;
break;
default:
defaultaction;
break;
}
?>
掌握语句应当在掌握关头词和入手下手的圆括号之间应当有一个空格,以此和函数挪用停止区分。
激烈建议你老是利用花括号将掌握布局各局部标识出来。即便是在手艺上可以不利用花括号的中央。这可以增添代码的可读性,同时防止在布局局部增添新行后引入逻辑上的毛病。
原始代码:
if (condition)
return true;
else
return false;
修正后的代码:
if (condition)
do something; // 呈现逻辑毛病
return true;
else
return false;
准确的做法:
if (condition) {
do something;
return true;
} else {
return false;
}
--------------------------------------------------------------------------------
函数挪用
挪用函数时,函数名和入手下手的括号之间不该该有空白字符。参数和入手下手及停止的括号之间不该有空格。而除第一个参数外,其他参数都应当用一个空格分隔。这里有一个示例:
<?php
$var = foo($bar, $baz, $quux);
?>
像下面的示例代码,赋值运算等号双方都应当利用一个空格。假如是相干的赋值运算,应当采取上面的模式以供应更好的可读性:
<?php
$short = foo($bar);
$long_variable = foo($baz);
?>
--------------------------------------------------------------------------------
函数界说
依照“one true brace”商定声明函数:
<?php
function fooFunction($arg1, $arg2 = '')
{
if (condition) {
statement;
}
return $val;
}
?>
“one true brace”商定就是入手下手的花括号独自占一行,而不是跟在其他语句前面。
具有默许值的参数应当位于参数列表的前面(现实上 PHP 言语界说也请求如斯)。假如合适,函数应当老是前往一个成心义的值。这里有一个略微长一点的示例:
<?php
function connect(&$dsn, $persistent = false)
{
if (is_array($dsn)) {
$dsninfo = &$dsn;
} else {
$dsninfo = DB::parseDSN($dsn);
}
if (!$dsninfo || !$dsninfo['phptype']) {
return $this->raiseError();
}
return true;
}
?>
--------------------------------------------------------------------------------
正文
类型(class)的联机文档应当合适 PHPDoc(相似于 JavaDoc)的商定。更多关于 PHPDoc 的信息可以会见 http://www.phpdoc.de/ 取得。
另外,激烈勉励利用非文档正文。普通性划定规矩是关于那些轻易健忘感化的代码添加冗长的引见性正文。
保举利用 C 款式的正文(/* */)和尺度 C++ 正文(//),而不该该利用 Perl/shell 款式的正文(#)。
--------------------------------------------------------------------------------
包括代码
不管在甚么中央无前提包括一个类型文件,应当利用 require_once()。假如有前提的包括一个类型文件(例如利用工场办法),应当利用 include_once()。利用二者中的任何一个都可以确保类型文件只包括一次。它们同享一个文件列表,因而你不需求忧虑搅浑他们 ―― 一个文件利用 require_once() 包括后不会在 include_once() 中再一次被包括。
备注:include_once() 和 require_once() 是一个声明,而不是函数。你不需求利用圆括号将文件名扩起来(不外利用括号也不会呈现毛病)。
--------------------------------------------------------------------------------
PHP 代码标志
老是利用 <?php ?> 来界定 PHP 代码,而不要利用 <? ?> 速记体例。这是为了合适 PEAR 分歧性所必需的,同时也是在分歧操作体系和分歧装置设置情况下移植 PHP 代码所请求的。
--------------------------------------------------------------------------------
头正文块
PEAR 宣布的一切源代码文件头部都应当包括上面的正文块:
<?php
/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | PHP version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2002 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Original Author <author@example.com> |
// | Your Name <you@example.com> |
// +----------------------------------------------------------------------+
//
// $ Id $
?>
这里没有硬性划定要将一个代码奉献者的名字添加到文件正文的作者列表中。普通情形下,他们的更改属于“substantial”目次(意味大约10%到20%的代码被改写)。有一个破例就是代码奉献者重写了函数或奉献了新的法式逻辑。
复杂的代码重组和 bug 修复不该该增添新作者,这是不得当的。
不在中心 PEAR 仓库中的文件应当有一个相似的正文块来讲明版权、允许协定和作者。一切文件应当包括一个形式行(modeline,用于 vim 和 emacs)以确保分歧性。
--------------------------------------------------------------------------------
利用 CVS
这个大节的内容仅仅合用于 cvs.php.net 上利用 CVS 的包。
在每个文件中包括 $Id $(两个 $ 符号之间的关头字不克不及够有空格,但因为此文档也是用 CVS 办理,因而只好加个空格,防止被 CVS 交换失落) CVS 关头字,以便检查文件以后形态和最初修正工夫等信息。假如已存在“Last Modified:”如许的信息,则交换为 $Id $ 标志。
这个大节的其他内容假定你有关于 CVS 标志和分支(branches)的根基常识。
CVS 标志用于标识你包中的文件释放之前所作的修订。上面的列表是必须利用和建议利用的 CVS 标志:
RELEASE_n_n
(必须的)用于标志一个释放版本。假如你没有利用这个标志,他人就没有举措在你宣布一个释放版本时从 CVS 办事器获得你的包。
QA_n_n
(分支,可选)假如你感觉在宣布释放版本之前要供应一个候选释放版本,那末一个好主张就是增添一个分支。这个分支可让你将释放版本隔离出来,并在正式宣布释放版本之前可觉得这些分支独自使用更新。时代,正常的开辟任务可以在骨干上持续停止。
MAINT_n_n
(分支,可选)假如你需求创立一个较小修正的释放版本(例如在 1.2 以后宣布 1.2.1)。那末你可以创立一个分支来到达目标。
唯一 RELEASE 标志是必需的,其他标志为了便利保举你利用。
上面是一个若何为 "Money_Fast" 包 1.2 释放版本增添标志的示例:
$ cd pear/Money_Fast
$ cvs tag RELEASE_1_2
T Fast.php
T README
T package.xml
经由下面的操作,就能够在 PEAR Web 网站上获得你的一系列释放版本了。
这里是一个若何创立 QA 分支的示例:
$ cvs tag QA_2_0_BP
...
$ cvs rtag -b -r QA_2_0_BP QA_2_0
$ cvs update -r QA_2_0
$ cvs tag RELEASE_2_0RC1
...and then the actual release, from the same branch:
$ cvs tag RELEASE_2_0
"QA_2_0_BP" 标志是一个 "branch point" 标志,用于标志分支的入手下手。老是用如许的标志来标明分支的入手下手是一个好主张。MAINT 分支可使用 RELEASE 标志作为它的分支出发点。
--------------------------------------------------------------------------------
示例中的 URL
一切示例顶用到的 URL 地址都应当是 "example.com"、"example.org"、"example.net"。
--------------------------------------------------------------------------------
定名商定
普通而言,class、函数和变量的名字应当老是可以描写让代码浏览者可以轻易的晓得这些代码的感化。
Classes
class 应当具有一个描写性的名字。能够时应当防止利用缩写。class 名字应当老是用一个大写字母入手下手。从 class 名字中也可以反应出 PEAR class 的条理。条理中的每一个级别都用下划线停止分隔。好的 class 名字示例以下:
Log
Net_Finger
HTML_Upload_Error
函数和办法
函数和办法应当利用 "studly caps" 款式定名。函数应当将地点包的名字作为前缀,以免与其他包的函数产生名字抵触。名字的受字母(前缀以后)应当是小写,每个新单词应当以大写字母开首。上面是一些示例:
connect()
getData()
buildSomeWidget()
XML_RPC_serializeData()
公有 class 成员和属性(意味着 class 成员和属性只应当由统一个 class 中声明的成员利用。不外 PHP 其实不撑持强迫性的公有定名空间)应当用一个下划线开首。示例:
_sort()
_initTree()
$this->_status
常数
常数应当老是全体利用大写字母定名,用下划线来分隔单词。常数名字的前缀应当利用大写的 class/包 名字。例如:DB:: 包利用的一切常数都已 DB_ 开首。
全局变量
假如你的包需求界说全局变量,那末应当用下划线跟上包的名字和另外一个下划线作为开首。例如,PEAR 包利用一个全局变量名为 $_PEAR_destructor_object_list。
预界说的值 true、false 和 null
PHP 的内建值 true、false 和 null 必需全体用小写字母书写。
实现固定数量的几张图片的上传;再如调试软件ZendStudio的使用,看了很多次老师的应用,但总感觉用的不顺手,不懂那么多的数据值,到底哪一个才是真正的问题所在;还有如数据库语句的封装,我只会用简单的函数来进行封装。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 本文当是我的笔记啦,遇到的问题随时填充 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, 有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
页:
[1]