当前位置: 首页 > 后端技术 > PHP

如何分析和学习PHP开源项目

时间:2023-03-30 02:17:09 PHP

在我们进行项目开发的过程中,难免会用到一些开源软件程序,因为使用开源程序可以缩短我们的开发周期,降低研发成本。但是,在使用的过程中,难免会遇到各种坑。这时候就要求程序员有分析开源项目的能力,因为并不是所有的开源项目都会有稳定的维护团队和完善的文档(毕竟开源项目很复杂)。利润较低)。在开发PHP的过程中,我们可以使用以下5种方式来分析代码:看文档Xdebug用内置函数做调试(debug_backtrace,debug_print_backtrace,var_export,var_dump,get_included_files)SocketLog(其中ajax,api,var_dump不能是var_dump看不见的地方,cron脚本,队列)思维安排(UML,思维导图)为什么要把阅读文档放在第一位?当我们第一次拿到一个开源程序的代码时,很多人会先看它的源代码,但是如果我们想了解它的编程思想,我们应该从编程思想的角度看文档或者看代码。这有多容易?如果不理解开源代码的功能就只看代码,其实很难理解他的编程思路。有时开源程序不提供文档,我们可以使用PHPDocumentor将注释提取到文档中。PHPDocumentor:http://www.phpdoc.org/使用Xdebug调试代码我们可以使用Xdebug结合IDE,通过断点调试来减慢代码执行过程。当程序执行到用户指定的断点时,可以停在那个位置,然后通过输出这个变量中的值,就可以一步步分析代码了。如果你遇到困难的代码,你可以使用这个表格来调试代码。Xdebug:https://xdebug.orgPHP自带打印调用栈的函数:debug_backtrace();debug_print_backtrace();如果我们自己看执行过程,我们要一步步跟着函数走,但是如果我们使用调用栈,我们就可以清楚地看到。array(5){["function"]=>string(5)"index"["class"]=>string(26)"app\index\controller\Index"[“object”]=>object(app\index\controller\Index)#3(0){}[“type”]=>string(2)“->”[“args”]=>array(0){}}[1]=>array(7){["file"]=>string(70)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/library/think/App.php"["line"]=>int(343)["function"]=>string(10)"invokeArgs"["class"]=>string(16)"ReflectionMethod"["object"]=>object(ReflectionMethod)#4(2){["name"]=>string(5)"index"["class"]=>string(26)"app\index\controller\Index"}["type"]=>string(2)"->"["args"]=>array(2){[0]=>object(app\index\controller\Index)#3(0){}[1]=>array(0){}}}//.....省略}我们可以分析一下ThinkPHP5.0的调用步骤:?在入口文件第17行调用并加载start.php,并在start.php第19行执行thinkApp::start()方法然后应用内exec()方法在.php中执行...debug_backtrace显示详细信息。如果想简单的查看调用,可以使用debug_print_backtrace函数直接打印出栈的调用信息,这样我们就可以分析出ThinkPHP的执行过程只需要四五分钟。当我们需要输出变量时,应该使用var_dump(),因为var_dump可以直观的看到数组的结构。当我们将数组输出到日志文件时,我们可以使用var_export()进行输出。1,1=>2,2=>array(0=>'a',1=>'b',2=>'c',),)*/另外我们可以使用get_included_files来获取当前脚本文件加载了哪些文件。array(23){[0]=>string(56)"/Users/maksim/Downloads/thinkphp_5.0.20/public/index.php"[1]=>string(58)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/start.php"[2]=>string(57)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/base.php"[3]=>string(73)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/library/think/Loader.php"[4]=>string(75)"/Users/maksim/Downloads/thinkphp_5.0.20/vendor/composer/autoload_static.php"[5]=>string(72)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/library/think/Error.php"[6]=>string(73)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/library/think/Config.php"[7]=>string(63)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/convention.php"[8]=>string(70)"/Users/maksim/下载/thinkphp_5.0.20/thinkphp/library/think/App.php"[9]=>string(74)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/library/think/Request.php"[10]=>字符串(62)“/我们ers/maksim/Downloads/thinkphp_5.0.20/application/config.php"[11]=>string(64)"/Users/maksim/Downloads/thinkphp_5.0.20/application/database.php"[12]=>string(67)"/Users/maksim/Downloads/thinkphp_5.0.20/application/extra/queue.php"[13]=>string(71)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/library/think/Hook.php"[14]=>string(60)"/Users/maksim/Downloads/thinkphp_5.0.20/application/tags.php"[15]=>string(62)"/Users/maksim/Downloads/thinkphp_5.0.20/application/common.php"[16]=>string(70)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/library/think/Env.php"[17]=>string(59)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/helper.php"[18]=>string(71)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/library/think/Lang.php"[19]=>string(63)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/lang/zh-cn.php"[20]=>string(61)"/Users/maksim/Downloads/thinkphp_5.0.20/application/罗ute.php"[21]=>string(72)"/Users/maksim/Downloads/thinkphp_5.0.20/thinkphp/library/think/Route.php"[22]=>string(78)"/Users/maksim/Downloads/thinkphp_5.0.20/application/index/controller/Index.php"}上面的函数是用来进行代码分析的,下面我们来讲解一下如何使用SocketLog来分析源码,SocketLog可以将我们的一些日志发送到调试工具上浏览器的,比如SQL语句,点击后可以查看调用栈,通过这些信息我们可以快速定位到我们要修改的代码,其实微信调试也可以使用SocketLog详细使用方法可以在github上查看:https://github.com/luofei614/...我们可以使用一些思维导图工具来帮助我们分析业务逻辑,也可以通过UML图形来组织类之间的关系.大家可以看《大象UML 》来学习UML建模。