PHP中的源代码签名(PHP源码学习快速方法)
2011-11-11 11:46
316 查看
E文地址:http://www.codediesel.com/php/source-code-signatures-in-php/
这篇文章是基于Ward Cunningham的名为Signature Survey: A Method for Browsing Unfamiliar Code 的文章的。Ward建议,当学习新的、不熟悉的源码时,对代码结构获取直观的感受是很重要的。Ward建议了一种方法,通过从每个源文件中逐行获取标点进行总结。他称此为文件签名。这将会帮助开发者考量代码基础的复杂性。
例如,如果我们只考虑使用'{}'和';'——PHP编程中的公共标点元素。程序员可以对源文件的结构有个了解。在php中括号划定了函数或块的范围,在其他许多语言中也大多如此,所以这将告诉程序员该代码块或函数的尺寸大小(长还是短)。
以Wordpress系统的源文件为例,以括号和分号作为选择标点字符,WordPress的签名通过以下方法得到:
样本WordPress源文件——wp-blog-header.php:
得到的上面代码的签名如下:
这说明了该文件有一个块部分(可以是函数,类或其他的),包含了四条语句。如果我们在签名中还包含圆括号'()'的话,我们会获得以下的。但是,这看上去一点复杂,并且也不如前一个直观。
下面我们给出更多的WordPress根文件的签名:
产生签名除了Ward在其文中提到的perl脚本,还可以使用一下的shell脚本或php程序。
Shell脚本
PHP程序实现函数签名
此外,我们还可以通过输出成HTML,并带有每个源文件的链接,来使得输出更吸引人、更友好。
这篇文章是基于Ward Cunningham的名为Signature Survey: A Method for Browsing Unfamiliar Code 的文章的。Ward建议,当学习新的、不熟悉的源码时,对代码结构获取直观的感受是很重要的。Ward建议了一种方法,通过从每个源文件中逐行获取标点进行总结。他称此为文件签名。这将会帮助开发者考量代码基础的复杂性。
例如,如果我们只考虑使用'{}'和';'——PHP编程中的公共标点元素。程序员可以对源文件的结构有个了解。在php中括号划定了函数或块的范围,在其他许多语言中也大多如此,所以这将告诉程序员该代码块或函数的尺寸大小(长还是短)。
以Wordpress系统的源文件为例,以括号和分号作为选择标点字符,WordPress的签名通过以下方法得到:
样本WordPress源文件——wp-blog-header.php:
<?php /** * Loads the WordPress environment and template. * * @package WordPress */ if ( !isset($wp_did_header) ) { $wp_did_header = true; require_once( dirname(__FILE__) . '/wp-load.php' ); wp(); require_once( ABSPATH . WPINC . '/template-loader.php' ); } ?>
得到的上面代码的签名如下:
wp-blog-header.php : {;;;;}
这说明了该文件有一个块部分(可以是函数,类或其他的),包含了四条语句。如果我们在签名中还包含圆括号'()'的话,我们会获得以下的。但是,这看上去一点复杂,并且也不如前一个直观。
wp-blog-header.php : (()){;(());();();}
下面我们给出更多的WordPress根文件的签名:
index.php : ;;
wp-atom.php : ;;;
wp-blog-header.php : {;;;;}wp-comments-post.php : {;;;;};;;;{;;};;{;;}{;;}{;;}{;;}{;};;;;;{;;;;
{{;;}}}{;};{;;};;;;;{;;;;};;;;
wp-commentsrss2.php : ;;;
wp-config-sample.php : {};;;;;;{};;;;;;;;;;;;;
wp-config.php : ;{};;;;;;{}}{{{;{};;{;;{;{};{{{;{;}{;;;;;;
wp-cron.php : ;;;{;};;;;{;{{;{;;};;}}};
wp-feed.php : ;;;
wp-links-opml.php : ;;;;{;;};;;;;;;;;;;;;;;;
xmlrpc.php : ;;{;};;{;;;;};;;;;;{;{;;;;;};};;;;;
wp-load.php : ;;{;}{;}{;;;;;;;;;;;;}
wp-pass.php : ;;;;;
wp-rdf.php : ;;;
wp-register.php : ;;;
wp-rss.php : ;;;
wp-rss2.php : ;;;
wp-login.php : ;{{;;}{;;}}{;;;;;;;;;;;;;;;;{;;;;{;}{;}}{{;}};;{;;;}{;;
;};;{;;}{;;{;{;;}};;}}{;;;{;;}{};;;}{;;{;{;}{;{;;}}};{;}{;}{;;{{;};}{{
;;}{}}}{;;;;;};}{;;;{;;}{;;};;{;;};;;;;;;;{;;;};;;;;;;;;;;;;}{;;;;;;;}
{;;;}{;;;{;}{;;}{;}{;}{;;;}{;};;;;;{;;;};;;};;;;;;;{;;;};;;;;{;;;;;;{;
{;;;}};;;;;;;;;;;;;{;;};{;}{;;;;};;;;;;;;;;;{;;}{;;};;{;;;{;;;}};;;;;;
;;;;;{;{{;;}}}{;;}{;};;;;{{;;{};;;}{;;;};;};;;;;;;;;;;;;;;;;;{}{;}{;}{
{{{;;}{;{;}};;}{}};}{;};;;}
wp-mail.php : ;;;;;;;;;;;;;;{;;;};;{;;;;;;;;;;{;{;}{{;;;;{;;};}{;;;;;}
{;;;}{;;{;}{;};;}{;;;{;;{;}{;;}}{;}}{;;{;};;;;;;;;;;{{;}};;;;;}}}{;;}{
;};{;;{;;};};;{;}{;};;;;;;;;;;;;;;;{;;;}{;}};
wp-settings.php : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;{;;}{;};;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;{;;;};{;};{{;};};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;{;
;};;;;;{{;;};};
wp-signup.php : ;;;{;;}{;};{;}{;;}{;;};{{;;}{;}{;;;;;}{;;;}{;;}{;;;;}{;
}{;;;;;}};;;{;;;{};;{;;;}{};;{};{};;}{;;;}{;{;};;;{}{;};}{;}{;;{;};;;;;
{;};;{{;;}};;;}{;;;;;{;;};;;;;;}{{}{}{};;;}{;;;;;;;;;;;{}{}{}}{;;{;;}{;
;};;;}{;;}{;;;;;;;;;;}{;;{;;};;{;;};;;;;;}{{}{}{};;;;;};;;;;;;;;;;;{;}{
;;;;}{;{;;;;;;;;;;;;;;{;;;};}};;
wp-trackback.php : {;;}{;;{;;;;;;}{;;;;}};{;;};;;;;;;;{;;;};;;;;{;;}{;;
;;;;;;;;;;;;;;;}
wp-activate.php : ;;;{;;};;{;};{{;}{;;}{;}{;}{;;;;;}};;{;}{;;{{;;;{;;
;}{;;;};}{;;}}{;;;;;;;;;;}};;;
产生签名除了Ward在其文中提到的perl脚本,还可以使用一下的shell脚本或php程序。
Shell脚本
for i in *.php; do echo -n "$i: " sed 's/[^{};]//g' $i | tr -d '\n' echo done
PHP程序实现函数签名
<?php /* Get all PHP files in the current directory */ $dir = './*.php'; /* Use the SPL Iterator class */ $files = new GlobIterator($dir); /* Get the signature of each file */ foreach ($files as $file) { $data = file_get_contents($file); preg_match_all('/[{};]/',$data,$out); $signature = ''; foreach($out[0] as $line) { $signature .= $line; } echo $file->getFilename() . " : " . $signature . "\n"; }
此外,我们还可以通过输出成HTML,并带有每个源文件的链接,来使得输出更吸引人、更友好。
相关文章推荐
- 基于 Android NDK 的学习之旅----- Java 方法映射到C中的签名(附源码)
- 基于 Android NDK 的学习之旅----- Java 方法映射到C中的签名(附源码)
- 基于 Android NDK 的学习之旅----- Java 方法映射到C中的签名(附源码)
- 基于 Android NDK 的学习之旅----- Java 方法映射到C中的签名(附源码)
- zepto源码--核心方法(类数组相关)--学习笔记
- CAFFE源码学习之优化方法solver
- php中不借助IDE快速定位行数或者方法定义的文件和位置
- 快速学习COSMIC方法之十:系统登录功能案例分析
- 【JavaEE学习笔记】SpringMVC_01_快速搭建一个环境,简介,常用方法
- STL源码学习--vector使用方法总结
- Java对PHP服务器hmac_sha1签名认证方法的匹配实现
- 方法接口spring源码学习之路---深入AOP(终)
- PHP下SSL加密解密、验证、签名方法(很简单)
- 快速学习AOPR使用方法的小技巧
- Linux php 中文乱码的快速解决方法
- PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
- 韩顺平_php从入门到精通_视频教程_第19讲_网站推荐_定位_学习笔记_源代码图解_PPT文档整理
- PHP辅攻_[学习资料收集]PHP连接SQLServer2005方法
- PHP网页游戏学习之Xnova(ogame)源码解读(一)
- PHP网页游戏学习之Xnova(ogame)源码解读(四)