In less than 12 months, Drupal 7 will be end-of-life and no longer supported. Plan your upgrade to Drupal 10 now.

Is zero unlimited?

Something I've seen in code is the unclear use of zero when adding limits, such as loading items from a database.

In some instances, setting zero will return all items - essentially, an 'unlimited' value in disguise - rather than returning no results, which is what I'd expect.

I imagine the code looks something like this:

if ($limit > 0) {
  $query->range(0, $limit);
}

If $limit is greater than one, add it to the query.

For me, using 0 as the unlimited value doesn't seem like the best option.

I'd prefer to use a null value as the default and only add the limit if it's set - i.e. an integer or not null.

It means the value could be either an integer or null, but I think the intent of the code is more explicit.

This would make the code look like this:

if (is_int($limit)) {
  $query->range(0, $limit);
}

Whilst this is clearer, it doesn't cover all use cases.

Presumably, the limit should only be a positive integer.

It wouldn't make sense to set a negative number as the limit or, as the unlimited value is null, setting it to zero.

This is the end code I'd likely write:

if (is_int($limit)) {
  if ($limit < 1) {
    throw new InvalidArgumentException('A limit must be a positive integer.');
  }

  $query->range(0, $limit);
}

If the limit is not an integer, nothing happens.

It throws an Exception if the value is invalid - i.e. less than one.

The limit is applied if the limit is greater than or equal to one.

While it's more complex as there are more checks to perform and different types in use, I think this is clearer and easier for someone reading or implementing the code to understand what it does and use it correctly.

- Oliver

P.S. Need help or want another pair of eyes on your code? Book a 1-on-1 consulting call or an online pair programming session with a 100% money-back guarantee.,

Was this useful?

Sign up here and get more like this delivered straight to your inbox every day.

About me

Picture of Oliver

I'm an Acquia-certified Drupal Triple Expert with 17 years of experience, an open-source software maintainer and Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.