You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调试问题:使用Psysh无法触发断点,提示Psy\sh()函数未定义

解决Psy\sh()函数未定义的问题

这个问题的核心原因很明确:虽然你全局安装了Psysh,并且能在终端直接运行交互式Shell,但你的PHP脚本并没有加载Psysh的自动加载器,所以脚本无法识别Psy\sh()这个函数。终端里的psysh命令是一个独立的入口脚本,它已经自动处理了依赖加载,但你自己的PHP脚本默认不会包含这些内容。

下面是几个可行的解决方案:

方案1:引入全局Composer的自动加载器

全局安装的Psysh依赖全局Composer管理的自动加载器,你需要在脚本开头手动引入它。

首先,用这个命令获取全局Composer的vendor目录绝对路径:

composer global config vendor-dir --absolute

假设输出是/home/yourname/.composer/vendor,那么在你的PHP脚本最顶部添加:

require '/home/yourname/.composer/vendor/autoload.php';

// 现在可以正常调用断点函数了
Psy\sh();

方案2:在项目本地安装Psysh(推荐)

如果这是一个有Composer管理的项目,更稳妥的方式是在项目内本地安装Psysh:

composer require --dev psy/psysh

然后在脚本里引入项目根目录的自动加载器:

require __DIR__ . '/vendor/autoload.php';

Psy\sh();

这种方式不会依赖全局环境,团队协作时也能保证所有人的环境一致。

方案3:用Psysh命令直接运行脚本

不需要修改脚本,直接用Psysh的命令来执行你的PHP文件,它会自动加载所有必要的依赖并触发断点:

psysh your-file.php

当脚本执行到Psy\sh()的位置时,会自动进入交互式调试环境。

额外排查点

  • 确认你的PHP版本满足Psysh的要求(可以运行psysh -V查看版本,然后对照Psysh的文档确认兼容的PHP版本)
  • 检查Psy\sh()的拼写是否正确,注意大小写(PHP命名空间是区分大小写的)

内容的提问来源于stack exchange,提问作者user6347891

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:10:18