如何运行/调试你的PHP代码


Posted in PHP onOctober 23, 2020

前言

没有任何一名程序员可以一气呵成、完美无缺的在不用调试的情况下完成一个功能或模块。调试实际分很多种情况。本篇文章我分享下自己在实际开发工作中的经验,我个人理解,调试分三种,注意我所讲的是调试并非测试

  • 功能调试
  • 组件调试
  • 片段调试

功能调试是指在完成一个功能或者正在完成功能的过程中进行的错误、逻辑、结果的测试

组件调试是指将一个正在开发测试的插件、类进行错误、逻辑和结果的测试

片段调试是指将一段代码片段、函数、变量的预期和结果的测试

接下来我们看下本章列出的一些调试方法

暴力调试

这种方式简单粗暴,一般PHP程序员都会用,那就是浏览器调试,在编辑器内写完代码后随后打开万能的浏览器输入地址开始调试代码。

断点调试

说实在的,这种方式如果仅仅是看看输出结果,完全没必要,看似高大上实际浪费时间经历,一般我都会在代码块写好之后跑一遍debug,检查一下流程和结果是否在我的预期内或者遇到了某些逻辑问题无法察觉,还是选择断点调试比较靠谱,省时省力。最厉害的程序员也有懵逼的一刻不是吗?

命令调试

如果你在官网或者github上下载了一段代码片段,急于调试但还不愿意将代码片段放入项目中或者新开辟一个目录,完全可以使用php命令去执行这个代码块

php -f filename.php

如果代码片段较短,你可以使用

php -r "code ..."

执行运行PHP代码

片段调试

当你突然想起一个方法或者算法急于去验证它,但又不愿意打开编辑器或者执行php自带的命令行的话。你可以选择使用psysh工具去执行验证你的想法,这个工具安装十分简单

Psy Shell v0.8.17 (PHP 7.1.14 — cli) by Justin Hileman
New version is available (current: v0.8.17, latest: v0.9.6)
>>> date('Y-m-d H:i:s',time())
=> "2018-08-09 14:18:10"
>>>

下载地址 : https://psysh.org/

测试调试

这是一个严肃的调试方法,很多程序员都认为功能模块、组件开发完就结束的任务,随后交给测试人员去测试就好了。其实并不然,有些隐藏的bug或者致命错误、逻辑错误、系统错误(例如开启了无用的线程,未使用的变量、方法、类等等)是无法被测试出来的。实际作为一名程序员,开发功能的流程是这样的。

理解需求 -> 分解需求 -> 整理逻辑 -> 设计代码 -> 敲代码 -> 调试 -> 测试

如果最后一步你从来没有做过,那你只能是半个程序员。 测试我推荐使用PHPunit,更好的去理解自己的代码,才是一个合格的程序员。

编辑器调试

感觉讲这个有点废话了,如果你感觉打开命令行然后输入 php xxxx 特别费劲的话,你也可以选择使用编辑器自带的调试,一般像sublime,visual Studio Code , PHPStrom 都会自带的调试工具,其原理依旧是调用 php -r 但总比打开命令行输入命令要快的多。

致谢

这并不是一篇酝酿了很久的文章,是在我日常的开发中经常使用的几种调试方法。
感谢你看到这里,希望本篇文章可以帮助到你,有什么问题可以在评论区留言。谢谢

以上就是如何运行/调试你的PHP代码的详细内容,更多关于运行/调试 PHP代码的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
PHP新手上路(十三)
Oct 09 PHP
php split汉字
Jun 05 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
php下通过IP获取地理位置的代码(小偷程序)
Jun 09 PHP
PHP与SQL注入攻击防范小技巧
Sep 16 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
php curl 上传文件代码实例
Apr 27 PHP
php限制文件下载速度的代码
Oct 20 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
PHP开发实现快递查询功能详解
Apr 08 PHP
laravel 解决多库下的DB::transaction()事务失效问题
Oct 21 PHP
php redis setnx分布式锁简单原理解析
Oct 23 #PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 #PHP
php使用event扩展的io复用测试的示例
Oct 20 #PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 #PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 #PHP
php实现记事本案例
Oct 20 #PHP
Laravel统一错误处理为JSON的方法介绍
Oct 18 #PHP
You might like
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
php实现的漂亮分页方法
2014/04/17 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
实例教学如何写vue插件
2017/11/30 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
原生js实现购物车功能
2020/09/23 Javascript
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
Python代码调试的几种方法总结
2015/04/15 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
python获取地震信息 微信实时推送
2019/06/18 Python
Python如何转换字符串大小写
2020/06/04 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
如何解决python多种版本冲突问题
2020/10/13 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
教师优秀党员事迹材料
2014/08/14 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
《小小的船》教学反思
2016/02/18 职场文书
运动会主持人开幕词
2016/03/04 职场文书