事实上, Kayo 认为纵然一个 PHP 开拓者完备不该用面向工具,他也能开拓出很出色的 PHP 程序,我们可以想象, Web 页面的解析本身就很过程化,在 HTML 中嵌入面向过程处理的代码是非常自然的手段,因此不能说面向工具是一种比面向过程更加精良的编程办法,只是另一种编程选择,当然这里说的是 PHP 中的情形。
对付 PHP 中面向过程和面向工具各自的优缺陷,相信在网上稍查一下就会很清楚了,面向过程开拓周期短,发布快,效率较高,面向工具开拓周期长,效率较低但易于掩护,改进,扩展和开拓 API 。显然易见,我们很难说哪一个办法会更精良,与其辩论哪一种编程办法更精良,不如只管即便发挥出两种编程办法各自的上风。
再次给大家明确一下PHP程序员进阶路线方案,和技能教程,免费分享,点击下文标题链接即可全套laravel框架、ThinkPHP框架全套教程分享,PHP程序员福利!
PHP开拓三年只懂增编削查?那是你没有方案好php学习路线
回到 PHP 的面向工具编程,在利用面向工具的过程中还是很随意马虎就感想熏染到它的上风,最明显的地方是代码功能更加清晰,数据处理,用户上岸,内容呈现等各写成一个类,在页面中只需包含这些类、实例化工具,然后再用简洁的语句运用工具就行,这与面向过程中把数据处理,用户上岸,还有内容等部分写在一起比较,前者的编程思路肯定更加清晰和易于理解,相信团队开拓中该当更为倾向于面向工具编程。
下面举一个大略的例子解释一下面向过程和面向工具两种办法各自的优缺陷
在处理表单或接管 url 参数时,为了防止 SQL 注入等问题, PHP 开拓者常常须要过滤字符串。
在面向过程的办法中,我们会在须要过滤字符串的语句中调用各种过滤字符串的库函数或自定义函数,这样下来,页面中就会涌现很多不同的过滤函数乃至还有繁芜的正则表达式,纵然在页面中写了足够的注释难免还是比较混乱,下面看看面向工具的处理办法。
首先是定义了一个大略的处理字符串的类,把各种繁芜的字符串处理写成方法(关于 PHP 面向工具的知识可以 Google ,本文不其余阐述。)
<?php/ 字符串处理类 参数$length用作判断字符串是否超过指定长度 转义 SQL 语句中利用的字符串中的分外字符 正则限定字符串内只能为数字 判断字符串是否为空 判断字符串长度 / // 创建字符串处理类class StringFiltration { // 属性 var $length; // 方法 // 布局方法 function __construct($the_length = NULL){ $this->length = $the_length; } // 转义 SQL 语句中利用的字符串中的分外字符 function realEscapeString($the_string){ return mysql_real_escape_string($the_string); } // 正则限定字符串内只能为数字 function eregNumber($the_string){ if( ereg(\"大众^[0-9]+$\"大众,$the_string) ) return true; else return false; } // 判断字符串是否为空 function strlenString($the_string){ return strlen($the_string); } // 判断字符串长度 function ifOverStrlenLength($the_string){ if( strlen($the_string) > $this->length ) return true; else return false; } } ?>然后在须要过滤字符串的页面中实例化该类$string = new StringFiltration();接着在过滤或判断字符串时调用类中定义好的方法,于是页面中会涌现一些调用方法的语句。$email = $string->realEscapeString($_POST['email']);$postId = $string->eregNumber($id);
在上面的例子中,我们可以看到,在面向工具处理字符串之前,我们必须定义一个类,然后再在须要的页面中实例化这个类并调用这个类中的方法,这里看来,面向工具的效率比较面向过程是低了,而且也很麻烦,不过这样的上风也很明显,实际处理或判断字符串的语句都写在类的内部,在调用方法的页面并不会涌现各种繁芜的自定义函数和诸如正则表达式这样繁芜的语句,页面的构造乃至全体网站的构造更加清晰了,并且在写好一个类后,日后进行 PHP 开拓时都可以再利用这个类,从长远来看效率反而高了。因此一贯都在进行 PHP 面向过程编程的开拓者不妨换种思路,试试面向工具。