Уведомление «Неопределенная переменная» в функции усечения, но только когда определенные строки передаются в - PullRequest
0 голосов
/ 17 мая 2011

У меня есть эта функция, чтобы обрезать строки длиннее указанного параметра.Он работает со всеми строками, которые я передал ему с этого момента. Но когда я тестирую со следующей строкой, у меня возникают проблемы:

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=substr($message,0,$position).$limitString;

Спасибо Luca

Ответы [ 2 ]

2 голосов
/ 17 мая 2011

Проблема в том, что есть случай, в котором ваша переменная $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 голос
/ 17 мая 2011

Это произойдет, если не пройдут следующие тесты:

if(strlen($message)<$position)

и

if($post !=" ")

$ string определяется только в этих двух блоках. Чтобы это исправить, вы должны определить $ string перед условными операторами:

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