截断函数中的“未定义变量”通知,但仅在传入某些字符串时

时间:2011-05-17 15:56:28

标签: php string truncate

我有这个函数来截断比指定参数更长的字符串。 它适用于我从现在开始传递给它的所有字符串。但是当我使用以下字符串进行测试时,我遇到了问题:

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;

由于 卢卡

2 个答案:

答案 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) {
    ....