如何将对象 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,','))
$ssh
是一些 class 的实例。您在上面将其用作 $ssh->exec(...)
。您应该检查 returns (可能是一个字符串)和 strripos()
的值,而不是 $ssh
.
strripos()
returns FALSE
如果它找不到子字符串或数字(可以是 0
)。但在布尔上下文中,0
与 false
相同。这意味着此代码无法区分逗号 (,
) 是字符串的第一个字符还是根本没有找到的情况。
假设$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 代码)。
如何将以下对象转换为字符串:
$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,','))
$ssh
是一些 class 的实例。您在上面将其用作$ssh->exec(...)
。您应该检查 returns (可能是一个字符串)和strripos()
的值,而不是$ssh
.strripos()
returnsFALSE
如果它找不到子字符串或数字(可以是0
)。但在布尔上下文中,0
与false
相同。这意味着此代码无法区分逗号 (,
) 是字符串的第一个字符还是根本没有找到的情况。
假设$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 代码)。