如何将对象类转换为字符串?及SSH执行结果转字符串用于strripos
解决对象转字符串与SSH执行结果处理的问题
先针对你的两个需求和代码问题逐一说明:
1. 如何将对象类转换为字符串?
在PHP中,要让自定义对象能被转换为字符串,你需要在类中实现**__toString()魔术方法**。这个方法会在你尝试将对象当作字符串使用时(比如echo $obj、强制类型转换(string)$obj)自动调用,你可以在方法里定义对象要输出的字符串格式。
举个简单例子:
class MyClass { private $data = "Hello from MyClass"; // 实现__toString魔术方法 public function __toString() { return $this->data; } } $obj = new MyClass(); // 直接echo对象,会调用__toString echo $obj; // 输出: Hello from MyClass // 强制转换为字符串 $str = (string)$obj;
如果没有实现这个方法,直接把对象当作字符串使用会触发E_RECOVERABLE_ERROR错误。
2. 处理SSH执行结果并用于strripos()
你当前代码的核心问题是:把$ssh对象直接传给了strripos(),而不是$ssh->exec()的执行结果。另外,ssh2_exec()返回的是一个资源流(resource),不是直接的字符串,需要先读取流内容才能得到字符串。
正确的处理步骤:
- 执行SSH命令并获取资源流
- 使用
stream_get_contents()读取流内容,转换为字符串 - 预处理字符串(比如去除多余的换行、空格)
- 再传入
strripos()使用
修正后的代码示例:
// 执行SSH命令,获取资源流 $stream = $ssh->exec('tail -1 /var/log/playlog.csv'); // 等待命令执行完成(避免流内容不完整) ssh2_stream_set_blocking($stream, true); // 读取流内容为字符串 $sshResult = stream_get_contents($stream); // 关闭流 fclose($stream); // 预处理:去除字符串首尾的空白字符(比如换行、空格) $sshResult = trim($sshResult); // 现在再执行你的字符串处理逻辑 if ($idx = strripos($sshResult, ',')) { $ErrorCode = substr($sshResult, $idx + 1); // 这里可以简化substr:从idx+1开始到末尾,不需要第二个长度参数 echo " " . $Playlist . ReturnError($ErrorCode); } else { // 处理没有找到逗号的情况,避免逻辑出错 echo "未找到错误码分隔符"; }
关键说明:
ssh2_exec()返回的是资源,必须用stream_get_contents()读取才能得到字符串- 加上
ssh2_stream_set_blocking($stream, true)确保命令执行完毕再读取内容 trim()可以去除结果首尾的换行、空格,避免这些干扰字符影响strripos()的判断- 原代码中
substr的长度参数可以省略,因为substr($str, $start)默认会取到字符串末尾
内容的提问来源于stack exchange,提问作者Kai
相关产品推荐
相关产品推荐

