专栏首页PHP在线PsySH——PHP交互式控制台

PsySH——PHP交互式控制台

[导读] 今天在Github上发现了一个挺有意思的PHP项目:PsySH。 百度了一番,发现没有任何关于它的中文文章,经过研究,决定写本篇博文来讲述一下。 如果对你有所帮助,请留下你的回复

PsySH is a runtime developer console, interactive debugger and REPL for PHP.

PsySH是一个PHP的运行时开发平台,交互式调试器和Read-Eval-Print Loop (REPL)。

说的简单点,就像你用firebug的console调试你的JavaScript代码一样。

PsySH官网

安装

官网介绍了3种安装方式:

  • 直接下载
  • Composer安装
  • 直接cloneGitHub仓库的代码

我比较建议选择Composer安装,因为这个项目还有其他的依赖项目,用Composer很好解决这个问题。

以下教程以OS X和Windows 10为例,假定已经安装phpComposer并已经将它们设置为系统环境变量:

OS X

先用Composer下载PsySH,这里用的是全局安装: $ composer global require psy/psysh

安装完毕后,PsySH已经安装到/Users/{用户名}/.composer/vendor/psy/psysh目录下

此时,你可以直接运行: $ /Users/{用户名}/.composer/vendor/psy/psysh/bin/psysh 为了使用方便,建议将它加入到环境变量: $ echo 'export PATH="/Users/{用户名}/.composer/vendor/psy/psysh/bin:$PATH"' >>~/.bashrc $ source ~/.bashrc

Windows

同样地,使用Composer安装,按win键+R键,输入cmd,打开windows控制台,然后:

composer global require psy/psysh

安装完成后,PsySH被安装到C:\Users\{用户名}\AppData\Roaming\Composer\vendor\psy\psysh

因为bin/psysh文件并不是windows的可执行文件,所以需要使用以下命令运行PsySH php C:\Users\{用户名}\AppData\Roaming\Composer\vendor\psy\psysh\bin\psysh 为了使用方便,在C:\Users\{用户名}\AppData\Roaming\Composer\vendor\psy\psysh\bin目录下新建一个名为psysh.bat的文件,其内容如下: @ECHO OFF php "%~dp0psysh" %* 此时,把C:\Users\{用户名}\AppData\Roaming\Composer\vendor\psy\psysh\bin加入到系统的环境变量PATH,以后可以直接在cmd下运行psysh了: C:\Users\Vergil>psysh Psy Shell v0.6.1 (PHP 5.6.8 — cli) by Justin Hileman >>>

特性

上面说过,PsySH是一个交互式的PHP运行控制台,在这里,你可以写php代码运行,并且可以清楚看到每次的返回值:

并且,它很智能地知道你的代码是否已经结束

自动完成

PsySH可以像控制台那样,按下两次[tab]键自动补全,帮你自动完成变量名,函数,类,方法,属性,甚至是文件:

文档

在运行时忘记参数怎么办?PsySH的文档功能可以让你即时查看文档。

PsySH的文档存放在~/.local/share/psysh/。(windows系统存放在C:\Users\{用户名}\AppData\Roaming\PsySH\

文档下载地址:

下载中文文档:

$ cd ~/.local/share $ mkdir psysh $ cd psydh $ wget http://psysh.org/manual/zh/php_manual.sqlite

OK,完成后重新打开PsySH

而且还自带分页功能(和more命令一样)

当然,自定义的对象也可以有相关功能:

比如,test.php这个文件有如下内容:

运行PsySH:

查看源代码

轻松展现任何用户级的对象,类,接口,特质,常数,方法或属性的源代码:

接着上一个例子:

查看show的帮助,使用help show命令:

反射列表

list命令知道所有关于你的代码 - 和其他人的。轻松地列出并搜索所有的变量,常量,类,接口,特点,功能,方法和属性。

更多用法,可以输入help list命令查看。

获取最后的异常信息

如果忘记catch异常,可以使用wtf命令(wtf是what the fuck的意思么?)查看异常的信息:

历史记录

可以像类Unix系统的history命令一样,在PsySH可以查看你运行过的PHP代码或命令。详情运行help history命令查看。

退出

使用exit命令退出你的PsySH

help

最好用的命令,help或者?,它能帮助你了解一切的命令

在内置web server中调试

本来想用Laravel做示例,但debugging的内容经常过多要分页查看。 而且说好的中文文章,好吧,那就用ThinkPHP为例:

首先,安装一下ThinkPHP

然后,用Composer局部安装一下PsySH:

因为ThinkPHP的dump()函数和symfony/var-dumperdump()函数有重名冲突,所以需要把其中一个重命名。个人建议把TP的改掉。为啥?因为symfony的好用多了。。。

在入口文件index.php添加如下3句代码:

在项目根目录下,用PHP的内置web服务器启动: php -S localhost:8080

然后即可在浏览器访问你的应用: http://localhost:8080

你将会看到以下画面,PsySH启动了

其他操作,和CLI操作差不多。例如:ls ls -al \Think\Model

show \Think\Model::find

doc \Think\Model::save

当然,那句\Psy\Shell::debug()不一定要放在入口文件,它可以放在你一切想要debug的地方 例如,我放在默认的首页控制器:

重新运行php内置server并访问页面,然后输入命令: ls -al

打开PsySH后,输入get_defined_vars()试试?

本文分享自微信公众号 - php(phpdaily)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP 判断数组是否为空的5大方法

    本文介绍了PHP开发中遇到的数组问题,这里介绍了判断PHP数组为空的5种方法,有需要的朋友可以借鉴参考一下。 转载自:PHP100 原文地址:http://ww...

    wangxl
  • 坐在马桶上看算法(2):邻居好说话,冒泡排序

    原文出处: 纪磊 简化版的桶排序不仅仅有上一节所遗留的问题, 更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2...

    wangxl
  • 5个值得深思的 PHP 面试问题

    文章所罗列的问题虽然看似简单,但是每个背后都涵盖了一个或几个大家容易忽视的基础知识点,希望能够帮助到你的面试和平时工作。 Q1 ? 正确运行的输出结果: "y...

    wangxl
  • .Net多线程编程—任务Task

    1 System.Threading.Tasks.Task简介 一个Task表示一个异步操作,Task的创建和执行是独立的。 只读属性: 返回值 ...

    甜橙很酸
  • java并发编程(五)

    阻塞队列:在某些情况下,会挂起线程,一旦条件满足,被挂起的线程会自动唤醒。而阻塞队列无需关心什么时候阻塞,什么时候唤醒。

    疯狂的KK
  • 旅游网项目总结1

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    多凡
  • Mybatis selectOne查询空指针异常NullPointerException

    上述代码在进行查询的时候如果没有查询到任何值,那么selectOne会返回null,并把null赋值给user对象。这样赋值的时候是不会报错的也不会有任何异常,...

    崔笑颜
  • 腾讯研发文化升级,宣布加入Linux基金会TODO工作组

    ? 近日,腾讯正式加入Linux基金会旗下TODO工作组,这标志着腾讯开源将进一步与国际接轨,与合作伙伴携手打造技术开放、协同共赢的开源生态。 腾讯副总裁、腾...

    腾讯开源
  • 腾讯开源国际化新突破,将紧密参与全球开源治理

    ? 近日,腾讯正式加入Linux基金会旗下TODO工作组(TODO Group)(https://todogroup.org/),这标志着腾讯开源将进一步与国...

    腾讯技术工程官方号
  • JavaScript设模式---单例模式

    1,单体模式用于创建命名空间,将系列关联的属性和方法组织成一个逻辑单元,减少全局变量。  逻辑单元中的代码通过单一的变量进行访问。

    wfaceboss

扫码关注云+社区

领取腾讯云代金券