Join Jon Peck for an in-depth discussion in this video Dereferencing strings and arrays, part of PHP 5.5 First Look.
- View Offline
One of the pieces of functionality that's been available in many different languages, but was missing from PHP, was the ability to dereference strings and array literals. Dereferencing means the ability to get the address of an item that's stored elsewhere. Dereferencing strings is a great way to obfuscate code. Meaning it makes it hard to read. So be careful when choosing whether or not to use it. I'm going to use array dereferencing to get a random element of a one off array without using a variable. I'm going to navigate to classes, Log.php and then open the generate method.
I use this to generate fake log entries. Currently action is blank. There are three possible actions. Actions equals array, filled with draw, pass, and fold. I'm going to do this the old fashioned way first. I'm going to create a new variable, random action, and assign it to a random element from the actions array. Random action equals actions array rand actions, including setting the key this is three lines of code and generated two unnecessary variables.
I could save a line and just assign action to a random element but there's still leftover. Now with PHP 5.5 I can do this in one line. I'm going to delete actions and random action and I'm going to create a one off array then dereference it using brackets and a key that I wish to access, which is a random number between zero and two. So, actions equals array, draw, pass, fold. I'm going to dereference accessing a random index key using rand, zero, two.
If I wanted to strings can be de-referenced in the same way, but for this application there really isn't much need. Something like echo hello 1, and this would just return e. Remove the echo and save the file. This feature probably isn't going to see a lot of use, but it makes php more consistent. Regardless, now that I have a way of generating log entries, I going to write them to the database very quickly, and that can be kind of a sensitive operation.
- Using generators to create simple iterators
- Dereferencing strings and arrays
- Enhancing security with the password hashing API
- Replacing APC with OPcache
- Normalizing Boolean and unpack() behavior
- Surveying the removed, incompatible, and deprecated functionality