2011-05-17 56 views
0

我有此函数截断比指定参数长的字符串。 它与我通过它,因为now.But当我用下面的字符串测试的所有字符串我有问题:截断函数中的“未定义的变量”通知,但只有当某些字符串被传入时

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,"...") 

我错在哪里?

解决:正如你们让我看到的

if($post!==' ') 

之外定义返回$字符串值wasnt所以我添加定义$字符串作为else语句:

$string=substr($message,0,$position).$limitString; 

谢谢 Luca

+0

其中是$字符串定义它被传递到limitString? – 2011-05-17 15:59:55

+0

如果我正确理解你想用这个函数做什么,你有没有考虑使用:http://php.net/manual/en/function.wordwrap.php? – Yoshi 2011-05-17 16:12:33

+0

[将多字节字符串截断为n个字符](http://stackoverflow.com/questions/2154220/truncate-a-multibyte-string-to-n-chars) – Gordon 2011-05-17 16:24:04

回答

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 = "";

使您return声明WIL我总是返回东西

1

当下列测试失败时会发生这种情况:

if(strlen($message)<$position) 

if($post !=" ") 

$串仅被定义在这两个区块。为了解决这个问题,你应该在条件语句之前定义$字符串:

$string=$message; 
if(strlen($message)<$position) { 
    ....