Что не так с этой функцией, которая использует php если еще, если? - PullRequest
1 голос
/ 30 января 2012

У меня есть этот код, но он не работает, и я не знаю почему ...

function link_next($local_id, $link_type) {
  if ( !is_numeric($local_id) )      die(); 
  elseif ($link_type = 'a-href')   { $something = 'a-href'; }
  elseif ($link_type = 'link-rel') { $something = 'link-rel'; }
  else                             { $something = 'blablabla'; } 

  return $local_id.'-'.$something;
} 

$id ='14678';
echo link_next($id, 'link-rel');

// редактировать

Функция всегда отображает 14678-a-href

Ответы [ 7 ]

8 голосов
/ 30 января 2012

вы используете = в проверке состояния. Вам нужно использовать == или === (строгое сравнение)

1 голос
/ 30 января 2012

Ваш код неверен. Вы используете оператор '=' в условиях if-else вместо оператора '=='.Это назначит значение типу ссылки.Вам нужно изменить код:

function link_next($local_id, $link_type) {

    if (!is_numeric($local_id)) 
           return false;

    if ($link_type == 'a-href') {
        $something = 'a-href';
    } elseif ($link_type == 'link-rel') {
        $something == 'link-rel';
    } else {
        $something = 'blablabla';
    }
    return $local_id.'-'.$something;
} 

Надеюсь, это поможет

0 голосов
/ 30 января 2012

У вас есть три проблемы:

  1. Ваш код не читается - структурируйте его так, чтобы его можно было прочитать
  2. Вы используете назначение (=) вместо равенство (==) для сравнения строк - вот что ломает код

-

function link_next($local_id, $link_type) {

    // early exit
    if (!is_numeric($local_id)) die();

    if ($link_type == 'a-href') {
        $something = 'a-href';
    } elseif ($link_type == 'link-rel') {
        $something == 'link-rel';
    } else {
        $something = 'blablabla';
    }
    return $local_id.'-'.$something;
} 
0 голосов
/ 30 января 2012

Вы используете оператор присваивания =, а не оператор сравнения == или === (строгий).

Кроме того, правильная установка отступа для кода помогает легко определить его.ошибки.

function link_next($local_id, $link_type) {
 if ( !is_numeric($local_id) ){ 
       die(); 
    }
 elseif ($link_type == 'a-href') {
      $something = 'a-href'; 
    }
 elseif ($link_type == 'link-rel') { 
    $something = 'link-rel';
    }
 else { 
    $something == 'blablabla'; 
    } 

 return $local_id.'-'.$something;
} 

 $id ='14678';
 echo link_next($id, 'link-rel'); 
 echo link_next($id, 'link-rel');
0 голосов
/ 30 января 2012

Вы должны использовать два знака равенства:

elseif ($link_type == 'a-href')   { $something = 'a-href'; }
elseif ($link_type == 'link-rel') { $something = 'link-rel'; }

В противном случае вы устанавливаете $link_type для указанной строки!

0 голосов
/ 30 января 2012

Вы используете оператор присваивания вместо оператора эквивалентности. Ака вы используете = вместо ==.

Вы можете использовать присваивание в if, но тогда вы говорите: «Присвойте переменной значение, и тогда условие будет истинным, если переменная не пустая». (где пусто 0, false, '', null и т. д.)

РЕДАКТИРОВАТЬ: получил ниндзя. Наверное, потому, что я более многословен.

0 голосов
/ 30 января 2012

Попробуйте это:

function link_next($local_id, $link_type) { 

if ( !is_numeric($local_id) ){ 
    die(); 
} elseif ($link_type == 'a-href') { 
    $something = 'a-href'; 
} elseif ($link_type == 'link-rel') { 
    $something = 'link-rel'; 
} else { 
    $something = 'blablabla';
}

return $local_id.'-'.$something;

}

Я только исправил тот факт, что при первой проверке {} не было, не уверен, что это будет иметь значение, но, эй, стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...