I’m going to start this post off with a disclaimer: technically speaking, comparing .NET and PHP isn’t exactly fair. Microsoft’s .NET is actually an application framework, which is an environment for building applications. PHP, on the other hand, is a programming language, the script that an application is written in. It isn’t quite apples to oranges, more like apples to apple pie. However, many of our clients have to make the choice between the two when building a web application, so even though the comparison isn’t totally equal, it is a very important discussion.
Speaking in broad generalities, PHP is a simpler programming language. Originally developed for creating dynamic web pages, PHP excels at smaller high-performance websites and web applications that are not overly complex. In fact, it powers over 20 million webpages and integrates directly into HTML. However these advantages run out at high levels and PHP generally scales poorly for enterprise-level applications.
The language and tools are maintained by a large open source community which means that it is continually growing and expanding its capabilities, but also that there are no licensing agreements (with the exception that PHP cannot appear in the name of your product without previous permission). However it also has its downsides as updates are slower to occur and features are improved based on popularity rather than need (such as performance improvements instead of security tools).
From a development perspective, PHP is less capable “out-of the-box” though skilled PHP developers are often able to create workarounds that allow it to do almost anything you could do in any other language. However this may require much more extensive time and/or investment and is not a recommended approach if you have the option of choosing a more robust language like .NET or Java.
One other challenge with PHP is that there is no single entity controlling the entire stack, meaning that between your server, operating system, and website you have to be very careful to balance proper versions and compatibilities so as to ensure everything works properly. This tends to be (though not always) more problematic with PHP and can lead to higher support and maintenance costs on medium-complexity and high-complexity applications.
Similar to the above, .NET can do everything PHP can do, but it does it a little bit better or easier in most enterprise-level scenarios. At low levels or for smaller applications, it is really a matter of preference between the two technologies, but for any high-growth and high-scalability application, .NET is the strong preference.
One of the benefits is that .NET is supported by Microsoft which means it has a very large and fulltime development team that is continually creating high quality tools and has built out the language so that it can do just about anything you might need. It also means that it has established compatibilities with development tools, servers, operating systems, etc and will have been heavily tested prior to any update or release – something you don’t always get with PHP. This helps reduce compatibility errors and reduce ongoing support and maintenance costs.
Another benefit is that it is multi-tenant, meaning that it can run multiple languages as well, such as C#, C++, F#, Visual Basic, etc. This gives the benefit of using other technologies as shortcuts – something that would be done faster or better in another language – rather than forcing everything into one. It also all but guarantees forward compatibility as new technologies are developed and implemented making it an even safer choice for long-term development and growth.
When starting, it is really a toss-up between PHP and .NET and it is important to understand and consider your long term business objectives. However as you grow, there will almost never be a case where enterprise-level developers will say “I wish we had built this in PHP.” Have companies done it, and done it successfully? Definitely. However generally speaking, .NET gives you more high-end capability, doesn’t cost as much to maintain over the long run.
In terms of capability, it is also a close call. A top PHP and a top .NET developer could probably both find ways to accomplish the same goal, however generally PHP requires a bit more work or a less efficient workaround. It is a question of “what will it take to get there, and what will it cost to keep running”
As an analogy, consider a 4-Runner and a Highlander. Both look generally similar, but under the hood they are completely different. The 4-Runner is built on a truck frame (as opposed to the Highlander’s car frame) and with a different engine, wheels and transmission the 4-Runner is the obvious choice for off-roading. However you could certainly modify the Highlander to be a great off-roading vehicle, but it would take a lot more time and money. Similarly, you could modify the 4-Runner to be an equally great highway vehicle, if you had some skill and investment. The question isn’t really “which is better” but which will do what I need, and what will it take to get it there.
In general, we highly recommend .NET as a complete solution with great scalability, security and performance. Even so, we do have a great PHP development team and have been very successful with it is well. It depends on the business, the short-term and long-term goals, the budget and the experience of the development team. But for most clients and most applications, we heavily recommend .NET and have yet to see anyone regret that choice.