2012-06-18 6 views
1

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

function get_info_by_WatIAM($WatIAM, $info) { 
    $users_info = array(); 
    exec("uwdir -v userid={$WatIAM}", $users_info); 
    foreach ($users_info as $user_info) { 
     $exploded_info = explode(":", $user_info); 
     if (isset($exploded_info[1])){    
      $infoArray[$exploded_info[0]] = $exploded_info[1]; 
     } 
    } 
    return $infoArray[$info]; } 

Вот что вызов функции:

} elseif ( empty(get_info_by_WatIAM($_POST['ownerId']))) { ... 

Я бы очень признателен за любые предложения. Огромное спасибо!

Если код не имеет смысла, вот еще одно объяснение: exec использует программу, которая хранит информацию обо всех пользователях в школе. К ним относятся такие вещи, как факультет, имя, идентификатор пользователя и т. Д. $_POST['ownerId'] - это имя пользователя - идея состоит в том, что при вводе имени пользователя вся информация пользователя автоматически заполняется

+0

При включении встроенного кода в сообщения на SO всегда заключите в обратные метки ('), чтобы он был правильно подсвечен. –

ответ

7

Вам не нужно empty вокруг вызовов функций, на самом деле empty работает только с переменными и не функции (как вы видите). Вам нужно только empty, если вы хотите протестировать переменную , которая не может быть установлена ​​ для thruthiness. Это бесполезно вокруг вызова функции, поскольку этот вызов функции должен существовать. Вместо этого просто используйте:

} else if (!get_info_by_WatIAM($_POST['ownerId'])) { ... 

Он делает то же самое. Для подробного объяснения см. The Definitive Guide To PHP's isset And empty.

+0

Ты очень прав - исправил это! Отличное объяснение, большое спасибо – nv39

3

empty может использоваться только для переменных, а не на выражениях (таких как результат вызова функции). На странице документации есть предупреждение:

Note:

empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)) .

Только один из лучших причудливых особенностей PHP.

Один способ обхода - сохранить результат в переменной и вызвать empty, хотя это неуклюже. В данном конкретном случае, вы можете также использовать

if (!get_info_by_WatIAM(...)) 

... хотя в целом, if (empty($a)) и if(!$a) не эквивалентны.

+0

Извините, я должен сделать это для последнего предложения. :) – deceze

+0

@deceze: Не стоит беспокоиться. Но это нехорошая идея, чтобы ИМХО представила альтернативу «!» Без явного предупреждения о том, что она не эквивалентна. – Jon

+0

Несомненно, они не эквивалентны при разговоре о * переменных *. 'empty' не вызывает ошибку, если переменная не существует. В противном случае они делают то же самое. Что касается * вызовов функций *, 'empty' просто неприменим вообще. – deceze

-1

получить значение этого

$a = get_info_by_WatIAM($_POST['ownerId']) 

затем Chack

empty($a) 

он будет работать

Смежные вопросы

 Смежные вопросы