我有这个函数来截断比指定参数更长的字符串。 它适用于我从现在开始传递给它的所有字符串。但是当我使用以下字符串进行测试时,我遇到了问题:
Fifth post is the worst ever.Dont you believe?Just read it!
它说:
"Undefined variable:string"
功能是:
public function limitString($message,$position,$limitString)
{
if(strlen($message)<$position)
$string=$message;
else
{
$post = substr($message,$position,1); // Find what is the last character displaying.
if($post !=" ")
{
for($i=$position-1;$i>0;$i--)
{
$post = substr($message,$i,1);
if ($post ==" ")
{
break;
}
}
$string=substr($message,0,$i).$limitString;
}
}
return $string;
}
这就是我所说的:
limitString($string,33,"...")
我哪里错了?
已解决:正如你们让我注意到的,返回的$ string值未在
之外定义if($post!==' ')
所以我添加了一个else语句,将$ string定义为:
$string=substr($message,0,$position).$limitString;
由于 卢卡
答案 0 :(得分:2)
问题是,在某种情况下,永远不会定义$string
变量,例如:
public function limitString($message,$position,$limitString)
{
if(strlen($message)<$position)
$string=$message;
else
{
$post = substr($message,$position,1); // Find what is the last character displaying.
//$string is not defined here.
if($post !=" ")
{
for($i=$position-1;$i>0;$i--)
{
$post = substr($message,$i,1);
if ($post ==" ")
{
break;
}
}
$string=substr($message,0,$i).$limitString;
}
//$string is not defined here
}
return $string;
}
解决方案是在函数顶部定义$ string:
$string = "";
这样您的return
语句将始终返回某些内容。
答案 1 :(得分:1)
以下测试失败时会发生这种情况:
if(strlen($message)<$position)
和
if($post !=" ")
$ string仅在这两个块中定义。要解决此问题,您应该在条件语句之前定义$ string:
$string=$message;
if(strlen($message)<$position) {
....