如何将对象 class 转换为字符串

How to convert object class into string

如何将以下对象转换为字符串:

$ssh->exec('tail -1 /var/log/playlog.csv');

所以我可以将字符串解析为 strripos() 中的第一个参数:

if($idx = strripos($ssh,','))//Get the last index of ',' substring 
{
$ErrorCode = substr($ssh,$idx + 1,(strlen($ssh) - $idx) - 1); //using the found index, get the error code using substring
echo " " .$Playlist.ReturnError($ErrorCode); //The ReturnError function just replaces the error code with a custom error
}

目前,当我 运行 我的脚本时,我收到以下错误消息:

strpos() expects parameter 1 to be string

我见过类似的问题,包括这个问题 Object of class stdClass could not be converted to string,但我似乎仍然无法想出解决方案。

这行代码有两个问题:

if($idx = strripos($ssh,','))
  1. $ssh 是一些 class 的实例。您在上面将其用作 $ssh->exec(...)。您应该检查 returns (可能是一个字符串)和 strripos() 的值,而不是 $ssh.

  2. strripos() returns FALSE 如果它找不到子字符串或数字(可以是 0)。但在布尔上下文中,0false 相同。这意味着此代码无法区分逗号 (,) 是字符串的第一个字符还是根本没有找到的情况。

假设$ssh->exec() returns远程命令的输出为字符串,则这段代码的正确写法是:

$output = $ssh->exec('tail -1 /var/log/playlog.csv');

$idx = strrpos($output, ',');        //Get the last index of ',' substring 
if ($idx !== FALSE) {
    // The value after the last comma is the error code
    $ErrorCode = substr($output, $idx + 1);
    echo ' ', $Playlist, ReturnError($ErrorCode);
} else {
   // Do something else when it doesn't contain a comma
}

不需要使用strripos()。它执行 case-insensitive 比较,但您正在搜索一个不是字母的字符,因此 case-sensitivity 对它没有任何意义。

您可以改用 strrpos(),它会产生相同的结果,而且比 strripos() 快一点。


另一种方式

获得相同结果的另一种方法是使用 explode() to split $output in pieces (separated by comma) and get the last piece (using end() or array_pop()) 作为错误代码:

$output = $ssh->exec('tail -1 /var/log/playlog.csv');

$pieces = explode(',', $output);
if (count($pieces) > 1) {
    $ErrorCode = (int)end($pieces);
    echo ' ', $Playlist, ReturnError($ErrorCode);
} else {
   // Do something else when it doesn't contain a comma
}

这不一定是更好的方法。但是,它比 PHP 更具可读性和惯用性(使用 strrpos()substr() 的代码更类似于 C 代码)。