PHP: избыточная проверка для пустого массива / коллекции? - PullRequest
0 голосов
/ 24 апреля 2019

Я унаследовал проект Laravel, и я все еще продолжаю изучать его.Я вижу, что в коде есть проверка для запуска блока, только если есть $patient->records, но проверка для него:

if(! empty($patient->records) && $patient->records->count() > 0)

это избыточно или пусто и считать() проверять две разные вещи?

РЕДАКТИРОВАТЬ: исправлено с > 1 до > 0

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Если существует вероятность того, что $ Patient или записи (предполагается, что это свойство $ Patient) могут быть неопределенными, то empty($patient->records) полезно, потому что $ Patient-> records-> count () само по себе приведет к фатальная ошибка: Uncaught Error: Call to a member function count() on null in ...

С помощью empty($patient->records) в предложении if этой фатальной ошибки можно избежать даже в том случае, если $ пациента или записи не определены.

Пусто проверяет, что $ Patient-> records определено, а не пусто, в то время как часть count () является более конкретной проверкой результата метода count. Этот метод недоступен в случае, когда $ пациент или записи не определены.

1 голос
/ 24 апреля 2019

Я думаю, что это избыточно.$ Patient-> Records - это коллекция.Я использую вот так.

if($patient->records->count()) 
{
// has records
}
0 голосов
/ 24 апреля 2019

Да, это избыточно.

Тогда почему кто-то может написать код таким образом?

Может быть, перед проверкой длины коллекции он хотел убедиться, что это не null, хотя в этом случае я предпочитаю использовать метод is_null() или isset(). Даже если это (нулевой сейф) было в его уме, все равно это не нужно. Потому что, если отношения между patient и records определены правильно (один ко многим => hasMany()), тогда $patient->records всегда будет возвращать коллекцию, но никогда не будет нулевым. Даже если это пустая коллекция, вы все равно можете безопасно использовать метод count(), даже не проверяя, является ли records нулевым или нет, потому что он никогда не будет нулевым, если мы вернем отношение hasMany().

Что может быть лучшим решением

Вы можете просто использовать это же условие, удаляя пустую проверочную часть, как показано ниже:

if($patient->records->count() > 0)

Чтобы сделать его более читабельным, коллекция Laravel предлагает нам очень хороший метод под названием isNotEmpty():

if($patient->records->isNotEmpty())

Это то, что я предпочитаю использовать. Потому что мы пишем код, чтобы сделать его читаемым для других программистов / нас, а не для компьютера. Компьютер может даже понимать двоичный код, но мы не пишем двоичный.

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