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

Was this interesting?

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.