Here you can find my latest blog posts as well as any useful tips & tricks, opinions, or other miscellaneous things I might share.
You might be aware that one Gmail account could have an almost unlimited number of email addresses associated with it, to no effort of the user who owns the account. If you’re not aware of this, check out my post below explaining it:
If you’re thinking to yourself “how can I protect against users abusing this in my own applications?” - you’re in luck, because that’s exactly what we’ll be covering here.
When creating UIs with TailwindCSS, I often find myself writing the same few utilities together on the same elements all the time. This is why I often end up composing some common components, like a
In my mind, however, a “component” is a fully-formed set of styles for an element - something like a button may affect the colours, padding, border radius, text size and more - styles that are not necessary to be coupled together to still have a usable element.
But what do you do if you want to modify something that’s tightly coupled together, like the colours? If your default element has black text and you set a dark background utility, you probably don’t want it to keep having black text - coupling another text-colour utility to it.
You might think you know PHP, but if you dig below the surface you might find it can do more than you knew. Beyond the documented features, there lies a world of tricks, hacks and other techniques that can allow PHP to go a step further.
In this talk we’ll look outside the box at some things PHP provides like references, autoloading and magic methods and explore how using them in an unconventional way can benefit our own code.
Do you enjoy using TailwindCSS, AlpineJS, Laravel and Livewire together?
Well you’re in luck! Along with Dan Harrin and Ryan Chandler, we’ve just released a preset that can provide all of this out-of-the-box with sensible defaults to get you up and running with these technologies in a flash.
“Static constructors” are a concept a lot of object-oriented programming languages support - although, unfortunately, PHP does not.
If you’re not familiar with the concept, a static constructor is just a method the developer can define on a class which can be used to initialise any static properties, or to perform any actions that only need to be performed only once for the given class. The method is only called once as the class is needed.
The C# guide about static constructors is a good resource to see how another language handles these, however we’ll cover the important bits below.
Laravel offers some very useful ways to test that your pages are being rendered with the right content by making assertions directly on the response object.
It’s such an elegant and fast way to be sure your application is doing what you want, but doesn’t necessarily always do what you might want.
A test doing this in Laravel may look like the following, creating an article then making sure the title of that article shows on the listing page:
Have you ever wished that a PHP class had another method on it that you’d like to use? Laravel makes this dream come true through its concept of “Macroable” classes.
Macroable itself is the name of a trait Laravel comes with that is applied to many of the framework’s own classes.
This trait allows you to call a static “macro” method at runtime to add a new method to the class by executing a closure. Behind the scenes, it will use the magic
__callStatic() methods PHP provides to make the method work as if it were really on the class.
Black Friday and Cyber Monday deals have already started for 2019, and if you’re a PHP or specifically Laravel developer, there’s a lot to look forward to, especially if you’re looking to expand your knowledge and pick up some new skills on the cheap.
In this page I’ll be keeping you up-to-date with the best and latest deals to keep an eye on - it’s the only time of year with these kinds of huge price drops, so don’t miss out.
If you want to see the kind of deals that were up for grabs last year and what you can expect to come over the next few days, check out last year’s post.
If you’ve ever tried to build a custom component to wrap around the
<textarea> element with Vue, you’ll find that it’s not as simple as you first think to keep the behaviour the same as the native element.
In this post I’m going to quickly show the problem that you’ll likely run into, and a simple solution for it.
Let’s take a look…
Sometimes when working on a project, I’ll always want to run a handful of commands at the same time, some of which may return when they’re done, others might be long-running, like watchers or services actively exposing ports.
This is something that might seem simple to do with a basic Bash script at first, but what if your script has multiple processes running side-by-side and you want to be able to stop them all at once too?
Here we’re going to take a look at how we can achieve this with Bash traps and the single-ampersand operator.
Private constructors are a pattern found in object-oriented programming languages that prevents the class from being instantiated, except by itself.
The first time I saw this pattern in my programming career, I was confused. It wasn’t immediately apparent why such a feature would ever be beneficial in the real world. How are you meant to use the class if it can’t be instantiated? Why even bother defining a constructor at all if it can’t be called?
It turns out there are a handful of uses that private constructors can lend themselves to. Here I’m going to go over a few purposes they serve. The examples are in PHP but should transfer to any language that supports this feature.
Back when I started using PHP properly in the early 5.0 days, it felt like the language was pretty basic. Other languages were making leaps and bounds every year, and as time went on, PHP seemed to have stagnated. The language wasn’t bad, but it wasn’t as good as it could’ve been.
That all changed this decade. PHP has come an awful long way in the last few years and is once again proving that it’s got what it takes to be a programming language people should take seriously, even outside the web. I’m hugely happy with the direction PHP has taken and the amazing work of the core contributors and the entire ecosystem.
That said, there are a handful of things I would love to see PHP implement at some point in the future. These are a few things that I would’ve liked to be able to use every now and again when the circumstances for them come up.
As you can see because you’re already on it, I have a new site that I’ll be posting blog content to at liamhammett.com!
My reason for this change was pretty simple; I want more control over my content.
Medium seems to be given a lot of shit lately, but it holds a special place in my heart for getting me interested in writing. Here I’m going to talk about some pros and cons with the platform that made me come to my decision to move away from it.
isset() is one of the most important tools at your disposal to validate data in PHP. Like the name implies, it is designed to verify if a variable given to it is set, returning a boolean value based on the result.
However, it has some quirks and behaviours that are very much worth knowing as they can easily catch out even experienced developers.
Let’s take a look through how it behaves and what’s so special about it. Even if you’re a veteran PHP developer, hopefully, you’ll pick up something new here.
PHP is a loosely typed language. It doesn’t care what types you throw around. Unless you want it to care.
The language has come a long way in the last several years to bring in a robust type system, allowing developers to enforce types in both function parameters and what a function’s return value is.
For everything else, there’s docblocks, ugly sanitisation and assertion code, and crossing your fingers to hope your function’s API holds up in practice.