Larry Garfield is a prominent speaker in the PHP community and has a lot of experience delivering talks. He’s one of the many top speakers that attended this conference. And, well, the message is quite clear: never* use arrays.
(*) in public

Why? Because it’s kind of a hack. Because values are not guaranteed to be of the same type. Because they have poor performance. And because PHP doesn’t have them... *gasp*

What Larry means is that the definition of an “array” is an ordered sequence of values of the same type, while in PHP arrays are associative arrays without type guarantees. Numeric arrays, where you don’t provide the key in the assignment, are a hack and behave weird (the keys are not always sequential).

Then he mentioned one of the greatest bugs of the last few years, namely Drupageddon (2014), which was also due to some code expecting numerical keys, but was (in certain conditions) causing an SQL injection risk.

So… What’s better? Purpose-built data structures! Do you know where he’s getting at? Yep, objects of course. And that’s where PHP has already everything you need. Did you know there’s an ArrayObject? Extend it to create a “TypedArray”. Or use the IteratorAggregate, Countable and Traversable interfaces to create sequences, sets, etc. They can be made to be unique, ordered, typed and everything you want.

But objects are slower, right? Nope…

Technique

Runtime (s)

Memory (bytes)

Associative array

9.4311 (n/a)

541,450,384 (n/a)

stdClass

11.2173 (+18.94%)

589,831,120 (+8.94%)

Public properties

8.2172 (-12.87%)

253,831,584 (-53.12%)

Private properties

11.0881 (+17.57%)

253,833,000 (-53.12%)

Anonymous class

8.1095 (-14.07%)

253,832,368 (-53.12%)

Check Larry’s slides for the benchmark he used, but the conclusion above is mind-blowing. 

Related

This article is part of the PHPBNL20 blogs

More insights

Address register & GEOpunt API

Have you ever had to decide whether you should use Google maps, openstreetmaps, or another GIS provider for address suggestions? If you only need Belgian addresses, be sure to read on!

Author: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
Logo vlaamse overheid

Next.js: Just another framework?

About every 10 years, new technology emerges that brings about a change in the way we develop software. Is Next.js this new technology?

Author: Dries Cappon
UX, Design, React.js, Next.js
Dries Cappon
Next.js

Laravel 10 release

The release of Laravel 10: The king of types. Alles wat je moet weten over de nieuwe major release!

Author: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
laravel 10 banner

Saloon - Package / SDK API integrations

API integrations for a range of services. Little to no reusable code? With Saloon you turn it into a compact/clean SDK/Package that you can reuse in all your projects and maintain in one place.

Author: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
Saloon hero image

Codana wins Digital Champ of the year award 2022

Codana is the winner of the FeWeb Digital Champ award 2022! 

Author: Joris De Groot
Strategic Director and Managing Partner
Joris De Groot
FeWeb Digital Champ award Codana

Life as a React developer at Codana: 1 year in service

"You can start working with us as a React developer!". Bliss! Needless to say, I was super happy to hear this! But, I had never written a line of React before.

Author: Thomas Timmermans
Frontend Developer
Thomas Timmermans
Ik na 1 jaar in dienst