Почему я должен присвоить результат функции массива end () в PHP переменной, чтобы воздействовать на результат? - PullRequest
1 голос
/ 27 октября 2009

Я попытался удалить, возможно, пустую последнюю запись массива следующим образом, но получаю ошибку: «Не удается использовать возвращаемое значение функции в контексте записи»:

  if (empty(end($crontabEntryList))) {
    array_pop($crontabEntryList);
  }

Если я сначала назначу возвращаемое значение конца переменной (как внизу), я смогу удалить эту последнюю запись, если она пуста. Согласно ручной записи для end () он «возвращает значение последнего элемента или FALSE для пустого массива». Посредством поиска в Google я нашел возможное объяснение : логические значения не "доступны для записи".

Однако тогда может показаться, что эта ошибка возвращается, в моем конкретном контексте, и, возможно, других, документированных здесь на SO , просто потому, что возможно , что логическое значение может быть возвращено , Потому что массив в моем случае определенно был не пустым, и поэтому вместо false end () «возвращает значение последнего элемента».

Верны ли мои предположения? В каком случае это не противоречит слабо типизированной природе PHP? Или это потому, что последний элемент массива «недоступен для записи»? В каком случае, что именно составляет «контекст записи» в PHP?

  $last = end($crontabEntryList);
  if (empty($last)) {
    array_pop($crontabEntryList);
  }

Ответы [ 3 ]

3 голосов
/ 27 октября 2009

empty () так странно. Я только что научился принимать это и обходить его там, где это возможно (с предоставленным вами решением).

Если вы просто пытаетесь очистить пустые значения из массива, попробуйте array_filter ()

2 голосов
/ 28 октября 2009

Это не имеет ничего общего с end () или "доступностью для записи" логических значений.

empty() и isset() не являются функциями, это языковые конструкции.

С документы для empty():

Примечание: empty () проверяет только переменные как все остальное приведет к разбору ошибка. Другими словами, следующее не будет работать: пусто (trim ($ name)).

Опять же: только переменные могут быть переданы в empty().

2 голосов
/ 27 октября 2009

Могу ли я предложить просто использовать отрицательную проверку возвращаемого значения end ()? На мой взгляд, end () либо возвращает значение последнего элемента, либо FALSE, если он пуст. Таким образом, вместо использования дополнительного кода для создания другой переменной для проверки с пустым, просто протестируйте возврат end ():

/* Edited */
if(!(trim(end($crontabEntryList)))) {
   array_pop($crontabEntryList);
}

Я проверил это на моей системе с массивом строк, и, похоже, он дал желаемый эффект.

...