Opitimize Indent V0.1
PHP缩进自动优化处理程序
开发详解
2009.10.06
前言
感谢您在百忙中抽出您宝贵的时间来阅读本教案。
为了保证您将时间花费在确实该花的地方,在编写本教案之初,作者做了一个武断的设定:我们假设,您曾经阅读过基本的PHP教程,了解PHP的基本语法,了解HTML的相关知识。只是,作为入门者的您,希望获得一份手把手教您分析开发任务的目标及流程,然后根据分析的结果一步步去实现该目标的过程。
如果您已经是一个PHP开发的高手,本教程对您可能毫无益处甚至会让您贻笑大方。如果您对PHP一无所知,那么本教程也并不适合您阅读,至少,本教程不是一个浅显的、引导您入门的PHP教材。
首先,我们来看下面这几个程序片段:
程序片段1:
functionScanVincula(){global$file;for($i=0;$i<sizeof($file);$i++){if((strpos($file[$i],'}')===0)&&(strpos($file[$i],'{')===(strlen($file[$i])-1))){$file[$i]=repeatstr("\t",$indent-1).$file[$i];}elseif(strpos($file[$i],'}')===0){$indent--;$file[$i]=repeatstr("\t",$indent).$file[$i];}elseif((strpos($file[$i],'{')===0)||(strpos($file[$i],'{')===(strlen($file[$i])-1))){$file[$i]=repeatstr("\t",$indent).$file[$i];$indent++;}else{$file[$i]=repeatstr("\t",$indent).$file[$i];}}}
程序片段2:
function ScanVincula()
{
global $file;
for ($i=0; $i<sizeof($file); $i++ )
{
if ((strpos($file[$i],'}') === 0) &&(strpos($file[$i],'{') === (strlen($file[$i])-1)))
{
$file[$i] = repeatstr("\t",$indent-1) . $file[$i];
}elseif (strpos($file[$i],'}') === 0)
{
$indent --;
$file[$i] = repeatstr("\t",$indent) . $file[$i];
}elseif( (strpos($file[$i],'{') === 0) || (strpos($file[$i],'{') === (strlen($file[$i])-1)) )
{
$file[$i] = repeatstr("\t",$indent) . $file[$i];
$indent ++;
}else{
$file[$i] = repeatstr("\t",$indent) . $file[$i];
}
}
}
程序片段3:
function ScanVincula()
{
global $file;
for ($i=0; $i<sizeof($file); $i++ )
{
if ((strpos($file[$i],'}') === 0) &&(strpos($file[$i],'{') === (strlen($file[$i])-1)))
{
$file[$i] = repeatstr("\t",$indent-1) . $file[$i];
}elseif (strpos($file[$i],'}') === 0)
{
$indent --;
$file[$i] = repeatstr("\t",$indent) . $file[$i];
}elseif( (strpos($file[$i],'{') === 0) || (strpos($file[$i],'{') === (strlen($file[$i])-1)) )
{
$file[$i] = repeatstr("\t",$indent) . $file[$i];
$indent ++;
}else{
$file[$i] = repeatstr("\t",$indent) . $file[$i];
}
}
}
程序片段4:
//处理 {} 花括号
function ScanVincula()
{
global $file;
//从头开始扫描,处理 {} 花括号
for ($i=0; $i<sizeof($file); $i++ )
{
if ((strpos($file[$i],'}') === 0) &&(strpos($file[$i],'{') === (strlen($file[$i])-1)))
{
//遇到}else{ 就会增加一个缩进
$file[$i] = repeatstr("\t",$indent-1) . $file[$i];
//} 花括号开头 这个如果不是第一个处理,
}elseif (strpos($file[$i],'}') === 0)
{
$indent --;
$file[$i] = repeatstr("\t",$indent) . $file[$i];
}elseif( (strpos($file[$i],'{') === 0) || (strpos($file[$i],'{') === (strlen($file[$i])-1)) )
{
//{ 花括号处于开头或结尾
$file[$i] = repeatstr("\t",$indent) . $file[$i];
$indent ++;
}else{
//其它情况,缩进量不变化
$file[$i] = repeatstr("\t",$indent) . $file[$i];
}
}
}
也许,细心的你早已发现:这四个程序片段,都是写的同样的语句,实现的是同一个函数。基本可以这么说:它们是一样的。
确实:从功能上来说,它们是一样的。同样的语句,执行它们当然我们会得到同样的结果。
但是,对于我们任何一个阅读它的人来说,这四个程序片段它们又确实是不一样的。至少,对于我这样一个智力及阅历都比较平常的普通人来说,觉得它们的差异还是特别明显的:
1)程序片段1,一眼看上去基本上是什么也看不清楚,要想阅读它是非常困难的事情,要想充分理解他,我祈祷万能的主能将爱因斯坦的大脑暂时借我使用片刻。
2)程序片段2,能看清,也能够流畅地阅读,但是想理解却也是比较费力的。
3)程序片段3,程序看上去十分清晰,阅读轻松,因为有良好的书写格式,理解也不是很困难。
4)程序片段4,程序清晰、阅读轻松,再加之有完备的行间注释,也十分易于理解。
从上面的例子,我们不难发现:良好的程序书写格式,对于我们阅读、理解该程序,以及继续开发、维护等工作,都将带来极为有效的帮助。使用有意义的变量名及函数名,保持良好的缩进,书写必要的行间注释,这几个好习惯是每个写程序的人都应该养成的。
注释,这玩意如果想用机器自动处理的话,我想实现的难度太大,否则具备自主学习、思考能力的智能机器人早就遍地跑了。而对于书写格式的整理,就如实现程序片段3那样的良好的缩进,应该不是什么难题。那么,让我们尝试一下,让程序来自动处理所有的缩进吧。
我们的教程,也就从这里开始,借着为大家开发一个处理缩进的程序的过程,讲解有关PHP的变量、魔术变量、常量、表单、文件读写、数组操作、字符串操作、递归、正则表达式、session、用户认证、模板使用等方面的知识。只要你加以练习,便可轻松迈步进入PHP的开发者殿堂了。
本教程没有涉及到的内容:世界上不存在完美的事物,我们的这个教程也是如此。本教程编写的过程中,尽管我想方设法希望尽量多地包含更多的内容,但是最好,它仍然没有涉及到文件的上传及数据库的操作。如果今后有可能,并且您也愿意阅读我写的这些简陋的话语,我希望能再次为您编写它的续集。
·本站大部分文章和内容来自互联网,如果您觉得我们侵犯了您的权益,请告诉我们!
·您在本站发表的作品,本站有权在网站内转载或引用!
·本站所提供的设计,摄影及其它作品,如需使用,请与原作者联系,版权归原作者所有。