Php 如何将对象类转换为字符串
如何将以下对象转换为字符串:Php 如何将对象类转换为字符串,php,string,object,ssh,ssh2-exec,Php,String,Object,Ssh,Ssh2 Exec,如何将以下对象转换为字符串: $ssh->exec('tail -1 /var/log/playlog.csv'); 因此,我可以将字符串作为strripos()中的第一个参数进行解析: 与当前运行脚本时一样,我收到以下错误消息: strpos() expects parameter 1 to be string 我见过类似的问题,包括这一个,但我似乎仍然不能想出一个解决办法 这行代码有两个问题: if($idx = strripos($ssh,',')) $ssh是某个类的实例。您
$ssh->exec('tail -1 /var/log/playlog.csv');
因此,我可以将字符串作为strripos()中的第一个参数进行解析:
与当前运行脚本时一样,我收到以下错误消息:
strpos() expects parameter 1 to be string
我见过类似的问题,包括这一个,但我似乎仍然不能想出一个解决办法 这行代码有两个问题:
if($idx = strripos($ssh,','))
$ssh
是某个类的实例。您可以将其作为$ssh->exec(…)
使用。您应该检查它返回的值(可能是一个字符串)和stripos()
,而不是$ssh
0
)时找不到它,则返回FALSE
。但是在布尔上下文中,0
与false
相同。这意味着当逗号(,
)作为字符串的第一个字符被找到或根本找不到时,此代码无法区分大小写$ssh->exec()
以字符串形式返回远程命令的输出,编写此代码的正确方法是:
$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()快一点。
另一种方法 获得相同结果的另一种方法是使用将
$output
拆分为多个片段(用逗号分隔),并获取最后一个片段(使用或)作为错误代码:
$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
?您应该对$ssh->exec()
返回的值使用stripos()
,而不是$ssh
。这就是我试图实现的目标,我正在考虑将$ssh
变量(类型对象)的输出转换为字符串,然后将该字符串解析为stripos()
@axiac可能是,我想我们需要看看OP是否回复。@chris85该函数是一个全局函数,问题中发布的代码使用了某个类的方法(可能包装了PHP扩展提供的函数)。它们不能相同。@axiac我同意stripos($ssh
不起作用,因为$ssh
不是字符串,所以它不起作用。没有$ssh
定义虽然很难说,但除了说分配返回值之外。如果返回值是一个对象,或者甚至是空值,分配返回值将不起作用。我想我会删除该注释,直到他们的exec
做的事情清楚。Ass将输出从exec
触发到变量,例如$output
,这是我的目标,因此我现在可以将其解析为stripos()
,但您的stripos()是
函数在最后一个“,”之后没有输出任何内容。我知道这与我的原始问题无关,但如果您能提供帮助,我可以上传相关代码,因为我似乎无法找出我的错误所在。尽管如此,我仍然会接受您的回答,因为这是原始问题的解决方案。我不明白您的意思。如果$idx
不是FALSE
thensubstr($output,$idx+1)
返回在最后一个逗号之后开始的$output
片段。当然,如果逗号是$output
中的最后一个字符,它将返回一个空字符串。这就是我的$output
返回的内容:2018-03-22 12:43:21,NM\u Test.h264,-2
。在最后一个逗号之后总是有一个数字,我有一个sw因此,我试图让我的stripos()
函数查看“,”之后的最后一个输出,并将其与ReturnError(res)
函数中的一个大小写进行匹配。$output
的值可能以新行结尾。您应该将错误代码转换为整数。请检查此处:
$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
}