宇扬信息科技工作室

PHP自动优化处理程序开发详解

发布: 2013-03-21 09:31:59 | 作者: 不详 | 来源: 本站整理 | 查看: 1214

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的开发者殿堂了。
本教程没有涉及到的内容:世界上不存在完美的事物,我们的这个教程也是如此。本教程编写的过程中,尽管我想方设法希望尽量多地包含更多的内容,但是最好,它仍然没有涉及到文件的上传及数据库的操作。如果今后有可能,并且您也愿意阅读我写的这些简陋的话语,我希望能再次为您编写它的续集。

评论 0 次    最新评论(评论内容只代表网友观点,与本站立场无关!)
发表评论
点击更换验证码  

·本站大部分文章和内容来自互联网,如果您觉得我们侵犯了您的权益,请告诉我们!

·您在本站发表的作品,本站有权在网站内转载或引用!

·本站所提供的设计,摄影及其它作品,如需使用,请与原作者联系,版权归原作者所有。

About 宇扬联系我们付款方式友情链接网站地图版权声明投稿须知帮助