如何统计出 PHP 自带系统函数使用情况?
即除去自定义函数外,统计出 PHP 脚本自带函数使用频率。例如:
count 1000
substr 999
time 990
.....
P.S. 觉得没意义的人可以不用回答,我个人认为用的频率高的函数,说明更应该多看看,多学习下,对于初学者很有用啊。暂时觉得可以统计常见的wordpress drupal等程序看看函数使用情况。
也许能用Google的Big Query去统计github上的php代码。
真的去写了个bigquery:
#standardSQL CREATE TEMPORARY FUNCTION parseFunction(src STRING) RETURNS ARRAY<STRING> LANGUAGE js AS """ var result = []; var regex = /(\\w+?)(?:\\()/g; var match; while (match = regex.exec(src)) { result.push(match[1]); } return result; """; SELECT function_name, COUNT(function_name) AS count FROM ( SELECT parseFunction(c.content) AS function_name FROM `bigquery-public-data.github_repos.contents` c JOIN ( SELECT id FROM `bigquery-public-data.github_repos.files` where path like '%.php' ) f ON f.id = c.id) f2, UNNEST(function_name) AS function_name WHERE function_name IS NOT NULL GROUP BY function_name ORDER BY count DESC LIMIT 20
然而我没钱跑,估计要10刀。
补充,发现有两个小点的数据集, bigquery-public-data.github_repos.sample_files
和bigquery-public-data.github_repos.sample_contents
,也有30.2GB内容,结果参考一下。
代码和原始结果在Gist。
parseFunction
不完善,忽略掉语言的关键字、自定义函数就是结果了:),下面开头是一部分:
函数 | 数量 |
isset | 175229 |
empty | 99502 |
count | 60322 |
substr | 44073 |
is_array | 37004 |
sprintf | 36639 |
unset | 32378 |
strlen | 32261 |
chr | 29128 |
str_replace | 26654 |
preg_match | 24955 |
trim | 24159 |
strpos | 22880 |
explode | 21990 |
in_array | 21797 |
array_merge | 20610 |
implode | 19293 |
strtolower | 17261 |
function_exists | 15598 |
dirname | 14930 |
require_once | 14572 |
preg_replace | 14560 |
class_exists | 13500 |
list | 13455 |
is_null | 13286 |
array_key_exists | 13245 |
file_exists | 13216 |
pack | 11704 |
is_string | 11634 |
date | 11366 |
header | 11000 |
怎么会有这么无聊的需求?
先定义一个数组列表文件,把默认函数名全部录入。然后把PHP文件源码当文本,查找匹配,统计。
毫无意义,每个项目的业务逻辑都不一样, 实现的方式也都是多边的, 完全跟开发者的开发风格有关系, 这种统计没用吧
你修改php源代码,不然你说怎么实现
奇葩的问题,我也想知道。
也可以换一个问题,如何爬取所有github上的php源码,然后进行统计,按照自带函数使用频率进行排序?
感觉这是个了不起的事
实际上phpstrom就能做出这个事情,find in path 能找出某个东西,用了多少次数。
如果弄成程序的话,也可以做匹配