Tom Butler's Programming Blog - PHP, MVC and Best Practices
Welcome to my infrequently maintained and often forgotten blog. I'm a web developer andUniversity Lecturer with an interest in OOP, coding best practices and a huge advocate of convention over configuration and separation of concerns. I started this blog to reduce the need to repeat myself in discussions regarding MVC, however the response has been very positive over the years so I've expanded it gradually to other topics which have sparked my interest.
I've released some moderately successful open source software:
- Transphporm: A novel templating system which is unique in that it genuiely separates logic from markup
- Dice: A rule based Dependency Injection Container
- Maphper: an ORM with a focus on extensibility
I recently completed my PhD in Software Engineering in which I developed a novel metric for grading software flexibility based on frequency of bad practices detected. As part of my research I developed the tool Insphpect which uses a mix of static and dynamic analysis techniques to identify programming practices which hinder flexiblity, grades the code and offers recommendations on how it can be improved. As proof of concept in a number of cases it can also offer automated fixes.
Latest updates
- 09/07/2024 - Evict Your Darlings: Banish dotfiles from your home directory
- 12/04/2021 - v.je - an Easy to set up development environment for Docker
- 12/04/2021 - Why are you still using XAMPP?
- 03/02/2021 - Setting Up a Modern PHP Development Environment with Docker (published on sitepoint.com)
- 20/12/2020 - It's probably not time ditch CentOS for your server
- 23/04/2020 - How to get sendmail working in docker PHP
- 08/03/2020 - 11 things you may have overlooked when you made your website live
- 17/03/2019 - Eliminate Render Blocking CSS using HTTP/2 Push
- 17/03/2019 - Forcing a browser CSS cache reload with HTTP/2 Server Push
- 10/03/2019 - Immutable MVC in PHP (Part 2) - Immutable CRUD application
- 20/02/2019 - Immutable MVC: MVC In PHP 2019 Edition (Part 1)
- 13/11/2018 - Guide: Using Let's Encrypt SSL Certificates for local or network server
- 13/11/2018 - Routing all traffic through an OpenVPN client on a CentOS 7 NAT
- 29/09/2018 - Put the pro in programmer: A guide to writing better code
- 17/08/2018 - Inheritance vs Composition: Composition wins by knockout
- 01/08/2018 - Immutability vs Encapsulation: Schrödinger's immutability
- 07/06/2018 - Git Forked: The decentralised but better connected git ecosystem I'd like to see
MVC Related Articles
- Model-View-Confusion
- MVC In PHP
- MVVM
Best Practices
Programming Philosophy
Other
- PHP & MySQL - Novice to Ninja, now available!
- 4 reasons you should not have logic in your database (cascade delete, foreign key constraints, triggers, etc)
- Google Analytics And Fonts Are Probably Costing You In Lost Sales
- v.je - a 97mb minimal web development virtual machine
- A better solution to coding standards
- PHP Autoloaders should not be case sensitive
- PHP: PSR-0: Pretty Shortsighted, Really
- Find every combination of an array
- Why I don't have a comments section