PHP_CodeSniffer or PHP-CS-Fixer?
Should PHP_CodeSniffer or PHP-CS-Fixer be used to get code "in shape"? Should both tools even be used together?
PCOV or Xdebug?
Should you use PCOV or Xdebug to collect code coverage data? Sebastian Bergmann gives a personal answer.
PHPUnit Code Sprint: March 2024
Sebastian Bergmann recollects his experience at the PHPUnit project's most recent code sprint.
O Brother, where art thou?
Why do individual changes not bring the desired success?
Domain-Driven Design with PHP
More focus on the domain: You should know and be able to apply these design patterns from Domain-Driven Design.
PHP 7: Security Support Ends. Now what?
Security support for PHP 7 has ended. What does this mean for you?
How I manage test fixture
Sebastian Bergmann ponders why he no longer writes setUp() methods.
How do you name constructors?
PHP does not support constructor overloading. Named constructors provide a remedy. But what is the best way to name them?
Ready Or Not, Here It Comes
Is your software ready for PHP 8.1? Now is the time to find out.
Ready, Preload, Go
Preloading can significantly improve performance. Let's see how it works.
Ketchup or Mayo?
A French fries stand offers a few dishes and drinks. That means founding can't be particularly difficult, can it?
Athletes and Software Development
Do you know the difference between software developers and professional athletes?
Do not mock what you do not own
Programming is all about abstraction. But there is a big difference between owning an abstraction and using somebody else's.
Happy 25th Anniversary, PHP!
Happy 25th anniversary, PHP. Your birthday present arrived just in time.
Caching makes everything faster. Right?
Sebastian Bergmann takes a look at an interesting problem that came up while working on PHPUnit.
Unfortunately we have no framework
A framework of your own, or better a standard solution? We approach the question by looking at the history of PHP frameworks.
Developer wanted, maintainer found?
It is very difficult to find good developers. Ever tried to look for a maintainer instead?
Failing IT Projects
Sebastian Bergmann explains how you can learn from failed IT projects.
Saved to be ruined
Arne Blankerts explains why you should keep your dependencies up-to-date.
Who wound the clock?
Sebastian Bergmann explains why PHPUnit no longer looks at the clock.
High-Resolution Monotonic Timer
We explain why looking at the clock may not be a good idea when you want to measure time.
Goodbye, IT Conference
With the coronavirus pandemic raging, the future of IT conferences is at stake. Or is it?
Improve Your Design with CQRS
Getters read and setters write. What happens when you apply this idea to the architecture of an application?
Automating Edge Cases
The coronavirus pandemic keeps pushing the boundaries of what we consider "edge cases". This leads to interesting IT problems.
PHPUnit: A Security Risk?
Sebastian Bergmann explains why PHPUnit must not be installed on a webserver.
Migrating to PHPUnit 9
Sebastian Bergmann provides guidance on how to migrate from PHPUnit 8 to PHPUnit 9.
Help! My tests stopped working
Sebastian Bergmann provides guidance on how to avoid frustration when upgrading to a new major version of PHPUnit.
Blast from the Past
Honestly, we did not expect to ever write about PEAR again. Yet here we are.
Who pays for PHP?
With no formal backing by any company or non-profit organisation, who pays for the development and maintenance of PHP - and how?
Faster Code Coverage
Sebastian Bergmann and Sebastian Heuer share how they made PHPUnit's code coverage functionality faster.
The Future of Zend
Some pivotal persons have announced that they are going to leave Rogue Wave. Is the future of PHP at stake?
Indirect Invocation Considered Harmful
There is a bug in PHP that allows bypassing type safety checks. You would not do that, though, would you?
Putting PHP 8 on the Roadmap
Some problematic PHP features are scheduled for removal in PHP 8. If you are dealing with Unicode strings, you may need to act now.
Why Magic Quotes are gone in PHP 7
With the release of PHP 7, some features that were traditionally widely used have been removed from the language. We explain why magic quotes have been removed from PHP, and how to deal with this when getting ready to migrate to PHP 7.
Microservices for Lunch
Getting the decomposition right is a crucial success factor for microservice architectures. Here is why.
Conferences: for Fun or Profit?
How much money conference speakers in the PHP community actually make.
Don't call instance methods statically
In PHP 7, instance methods cannot be called statically any more. We explain how to deal with this.
Why Developers Should Not Code
A surprising answer to the question why program code is so hard to understand.
Testing Keeps Me From Getting Things Done
Writing unit tests takes time. Is it really worth the effort?
The Death Star Version Constraint
Sebastian Bergmann explains why using a too wide version constraint may cause trouble.
Refactoring to PHP 7
How do you adapt an existing codebase to PHP 7, and what are the benefits? Our friend Tim talks about his experiences when getting an e-commerce platform ready for PHP 7.
PHP 5: Active Support Ends. Now what?
Active support for PHP 5 has ended. What does this mean for you?
Typed Arrays in PHP
As a community, we can only make progress when somebody pushes the boundaries. This can be done by questioning established best practices, or by coming up with new ideas.
Questioning PHPUnit Best Practices
Best practices are not set in stone and need to be questioned and then adapted, if need be, every once in a while.
How to Validate Data
Validating data seems to be one of the most important tasks of an application. After all, you cannot trust data from external sources.
On Hackathons
Hackathons are fun and very educational. But do they teach the right values?
Dependencies in Disguise
Passing around a service locator is a bad practice. But how can it be avoided?
20 Years of PHP
Arne Blankerts recollects how he first came into contact with PHP.
20 Years of PHP
Stefan Priebsch recollects how he first came into contact with PHP.
20 Years of PHP
Sebastian Bergmann recollects how he first came into contact with PHP.
Driving Change
You are not entirely happy with how things go in your team or organisation? There is a simple way to start driving change.
PHP Breaks Backwards Compatibility
For a major release such as PHP 7, some backwards compatibility breaks are expected to happen. Breaks like these are always a double-edged sword.
Joomla PHPUnit Code Sprint
Sebastian supported the Joomla project in their testing effort.
TYPO3 PHPUnit Code Sprint
Sebastian Bergmann participated in a code sprint to make the PHPUnit TYPO3 extension better.
Disintegration Testing
Sebastian Bergmann uses NASA's Mars Climate Orbiter as a hook to discuss different scopes of testing.
Continuous Integration
At what project size is continuous integration worthwhile in PHP projects?
Man Is What He Eats
Sebastian Bergmann uses the staff of a professional kitchen as a metaphor for a development team that wants to deliver high-quality software.
Educating Children
Stefan Priebsch, father of three-year-old twins, shares some parental insights while he explains what we can learn about software development from watching children grow up.
Integration Testing
Integration testing bridges the gap between unit testing and system testing by focusing on the interfaces between components and ensuring that their interaction works as expected.
Trust Me: Our Adservers Are Secure
Online adverts aren't just annoying: They open up a number of technical issues too, says thePHP.cc's security expert.
Urban Legends and Error Handling
We have all heard those stories that begin with "I know somebody" or "I have heard of somebody" before. Are they true, or just an urban legend?
Day-to-Day Fraud Detection
Looking at how credit cards are used in everyday life, it's amazing that such an inherently insecure system survived as it is violating almost every rule there is in terms of security.
Trust
Sebastian Bergmann uses a car driver's blind trust in a navigation unit as a metaphor to discuss how quality goals define the architecture of an application.
Level Crossings and Traffic Jams
Stefan Priebsch uses the traffic planning of a small city as a metaphor to discuss experiment-driven development.
Physical Security Fail
Arne Blankerts uses the physical security of appartments (and a recent burglary at his own appartment) as a metaphor to explain the hardening of PHP system architectures.
Software Development Fluxx
Sebastian Bergmann uses the card game Star Fluxx as a metaphor to discuss agile software development, object-oriented design, and quality assurance.
Data, Persistence, and My Frying Pan
Stefan Priebsch uses his frying pan as a metaphor to explain the difference between relational and non-relational databases.
Do not enter!
Arne Blankerts uses traffic laws as a metaphor to explain the difference between just having rules for security and actually enforcing them.
When it gets hot
Sebastian Bergmann uses the air conditioning system of Germany's InterCity Express (ICE) trains to explain service-level agreements that product owner and developers negotiate for quality goals such as scalability and performance.
Soccer Lessons for Project Managers
Stefan Priebsch uses soccer as a metaphor to explore how projects can be managed in such a way that you are prepared for the obstacles that you are likely to run into.
Spaces or Tabs?
Developers are nice people. Just remember to never ask a group of developers which operating system is the best, or whether spaces or tabs should be used for indentation.
Do you have our loyalty card?
Do you collect miles? Are you a member of our saver's club? What's your frequent flyer number? Is it just me or is it getting really annoying that every time you shop you get asked for it.
Sixty Percent Quality
Sebastian Bergmann uses hotel ratings as a metaphor to explain quality goals for software projects.
Seeing the Bigger Picture
Mankind has been constructing buildings for over 5000 years. The Great Pyramid of Giza for example, undoubtedly a masterpiece of architecture and engineering, has been built around 2600 BC.
Assumptions
Our world is based on assumptions. It may not always be obvious, but the majority of decisions you and I make every day, the very core of our interactions are almost always based on assumptions.