Я думаю, что следующий фрагмент кода должен работать, но это не так (отредактировано: теперь работает в PHP 5.5+) :
if (!empty($r->getError()))
Где getError()
просто:
public function getError()
{
return $this->error;
}
Все же я в конечном итоге с этой ошибкой:
нельзя использовать возвращаемое значение метода в контексте записи
Что это значит? Разве это не просто чтение?
empty
: wiki.php.net/rfc/empty_isset_exprsif ( !$e->find('div') )
который проверяет, является ли текущий элемент HTML DOM пустым или нет. Я использую его внутри цикла, чтобы распечатать только один Div без внутреннего Div внутри.Ответы:
empty()
должен получить доступ к значению по ссылке (чтобы проверить, указывает ли эта ссылка на что-то существующее), а PHP до 5.5 не поддерживал ссылки на временные значения, возвращаемые функциями.Однако настоящая проблема, с которой вы столкнулись, заключается в том, что вы используете ее
empty()
вообще, ошибочно полагая, что «пустое» значение отличается от «ложного».Пустой это просто псевдоним для
!isset($thing) || !$thing
. Когда проверяемая вещь всегда существует (в PHP всегда присутствуют результаты вызовов функций),empty()
функция является ничем иным, как оператором отрицания .В PHP нет понятия пустоты . Значения, которые оцениваются как ложные, являются пустыми, значения, которые оцениваются как истинные, не являются пустыми. Это то же самое. Этот код:
и это:
во всех случаях всегда имеет одинаковый результат для всех типов данных (поскольку
$x
определяетсяempty()
как избыточный).Возвращаемое значение из метода всегда существует (даже если у вас нет
return
оператора, возвращаемое значение существует и содержитnull
). Следовательно:логически эквивалентно:
источник
(boolean) var
, за исключением того, что предупреждение не генерируется, когда переменная не установлена».""
,0
и т. Д. "Пусто", но не равно нулю.Это ограничение empty () в версиях PHP ниже 5.5.
Вы должны изменить это
источник
isset()
. то есть:isset($this->foo->getBar())
приведет к той же проблеме.Согласно документации PHP :
Вы не можете
empty()
напрямую использовать возвращаемое значение функции. Вместо этого установите return изgetError()
переменной и запуститеempty()
переменную.источник
Я обычно создаю глобальную функцию is_empty (), чтобы обойти эту проблему
Тогда везде, где я бы обычно использовал empty (), я просто использую is_empty ()
источник
!
оператор для этого? :)Как отмечают другие, это (странное) ограничение empty ().
Для большинства целей сделать это равносильно вызову empty, но это работает:
источник
empty()
охватывает гораздо больше возможностей, чем просто пустая строкаПроблема в том, что вы хотите знать, если ошибка не пуста.
Добавление метода isErrorSet () решит проблему.
Теперь это будет хорошо работать с этим кодом без предварительного уведомления.
источник
Альтернативный способ проверить, является ли массив пустым:
У меня работает без этой ошибки
источник