7 ms·
High Quality PHP
- nkuttler 13y agoI'm speechless that "phpBB, Drupal, Wordpress" are supposed to be the "great" examples of "high quality PHP".
- endijs 13y agoIt's not what is said there. Read again: "The focus of PHP has always been on "getting things done" and the language’s developers still value this goal highly. This practicality has spawned great open-source software such as phpBB, Drupal, Wordpress and various other well known applications that are hosted on millions of servers worldwide" So - "getting things done" have spawned great tools like phpBB, Drupal, Wordpress. They are great, because they address problem for end users and are used by millions. It's not said that they are high quality PHP projects if we look at code level.
- nkuttler 13y agoThe author loses a lot of credibility by calling those three apps "great". If the article is about high quality PHP I'm interested in that, and not the poster children for PHP's popularity. As a user, phpBB is a nightmare to use, as a developer, WordPress is spaghetti code at it's worst. Edit: What's even worse is that we don't get examples of PHP code that was actually written with proper development procedures from the ground up. I mean, I was genuinely hooked by the headline..
- debacle 13y agoWordPress is great software, even if it isn't written well - from the end user's point of view, it is exceptional.
- d23 13y agoUntil you upgrade a plugin. Whoops, your whole site is broken!
- berkes 13y ago> from the end user's point of view, it is exceptional. I beg to differ. Disclaimer: I am an ex-drupal-developer, now-ruby-developer working at a startup for managed WordPress hosting. Many people use WordPress because they know of nothing else. They don't find it good, exceptional or bad: they find nothing of it: it is all they know. They can't compare. Again many people have severe issues with WordPress, ranging from security-holes, infected code, poorly maintained plugins to, most often, poorly implemented themes and horrible performance. Then, some, really like it. But those are a minority. I've heard many WordPress-developer and -user utter the same words Dries (after Boris Mann) wrt Drupal has uttered: "This CMS sucks least". You'll have to dig deep in order to find developers, users and other stakeholders, with the ability to compare it to many other alternatives, and who find it "exceptional". I've yet to meat one; eventhough all our customers are WordPress users.
- scarecrowbob 13y agoHey, I'm a guy who has done projects in several other PHP frameworks (Joomal, Drupal, Zend/Magento/aMember, cake, EE, CI) as well as some work in python/django and who tries, each quarter or so, to at least play with some other languages and frameworks (I've done the rails book tutorials, and tutorials with several of the JS MV-ish frameworks). If you're working with one of the larger WP-oriented managed hosts, we have the same clients and I have likely worked with your hosting. So, well, here I am, nice to meet you :). I agree... most people doing this kind of work don't have a lot of other options to choose from-- it is just what they know. They certainly neither know nor care to learn some other framework. Many of the people in this line of work are selling low or mid end projects to smallish businesses premised on leveraging functionality built by the large WP community. That said, even though I could do projects in other systems: I am usually working with agencies/consultancies who _want_ WP because, it is super easy to find folks who can work with WP on some level, their clients are familiar with WP, and it is trivial to meet a bunch of marketing or CMS goals with it. So while WP doesn't "suck the least" (I know of stuff I like better), it's still a good tool for a lot of reasons that have little to do with the code. For marketing objectives, you're going to have a hard time finding something objectively better for the total cost of ownership (there are, of course, better eCommerce, community forum, and application systems). And your position self-selects for a particular kind of client... you're probably not seeing the folks who are doing the $10K-100K projects I see, in which the server management isn't farmed out to a hosting company.
- exizt88 13y agoWordpress isn't the prettiest blog engine out there, but once you get its way of doing things, it's remarkably easy to get things done with it without your code devolving into an unmaintainable mess.
- Iftheshoefits 13y agoA thing doesn't devolve into a state it starts in.
- nkuttler 13y agoAs somebody who has made a living writing WordPress code for a few years I strongly disagree. I know how to get things done with it, but I know that the way of doing things is clumsy. Once you want to do something that's not totally common you have to interact with opaque core code that's a horrid mess and never returns useful error codes for example. Yes, it's not hard to make trivial stuff, but it's nearly impossible (and certainly a waste of time) to do complex things.
- bdg 13y agoJust nose around the symfony2 source. It's clean, readable, consistent, tested, and works.
- deckiedan 13y agoactually, it's examples of "high quality software", I believe. And, problematic and freaking annoying as those can be at times, they also have been, historically, extremely easy software to set up for enabling people to get stuff done.
- dotBen 13y agoAcquia is the commercial company behind the development of Drupal, so understandably they're going emphasize Drupal as a great example of PHP ;)
- Ergomane 13y agoIs _a_ commercial company behind the development. The most important, for sure, but not the only one.
- beberlei 13y agoI mention Wordpress only as great example of "getting this done" approach of PHP. Never did i mention it as example of "high quality PHP code". phpBB and Drupal have their problems, but they both improved their code-base alot, moving from legacy PHP software to software that is much more maintainable. The road to "high quality software" is long, but throwing software out of the window instead of slowly improving it is not the right solution either. Both projects have high numbers of unit-tests and can guarantee backwards compatibility and regression free releases in a much better way than most of the software out there in any company, written in any language.
- programminggeek 13y agoIt is really easy to talk smack about PHP because as a language it is not the prettiest, best designed, or cleanest language out there. It often leads to some very gross code. However, programmers write ugly code in every language and even in a much more beautiful language like Ruby, there are so many projects that end up with ugly codebases, poor performance, etc. that PHP by no means holds an exclusive ownership of terrible coding practices. Writing high quality code in any language takes significant effort on an ongoing basis. Practices like TDD, code review, pairing, etc. can help, but only if they are applied with significant effort.
- evilduck 13y agoThis argument makes no sense. You're conflating people and behavior with tools. Bad tools make it easier to do a bad job in any field of work. Novices with good tools will still do a bad job. This is a weak justification for promoting bad tools.
- ThomPete 13y agoBad tools? In what alternative universe is PHP a bad tool? It is one of the easiest to get started with, most documented, best supported and flexible tools out there for 90% of the things you see on the internet today.
- spellboots 13y agoObligatory http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/ http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-de... I spent many years doing PHP. I am very glad that those years are behind me. Even if you allow for it being easy to setup - which is debatable - setup only happens once and is not very hard in any language. If you find it hard to install a programming language by following instructions, you are an amateur pretty much by definition.
- ThomPete 13y agoAnd how do you think most people get started? As pros? Again php is great for 90% of the things that is done on the internet today and its popular exactly because it's not claiming to be more than it is and easy to get started with. No other language not even python especially not ruby does that as well. And then we haven't even talked about how easy it is to use php with javasrcipt, html and css.
- polysics 13y agoI left PHP about 3 years ago, and I have recently had to look into it again due to a new course I am preparing to teach. The PHP I knew is no more, and it is leaps and bounds ahead of what it used to be. But using Drupal as an example is really a bad choice. Talk about Laravel, Composer, new language features, but not crappy giant codebases.
- girvo 13y agoIt's great isn't it? Variadic functions is about to land, as is splats, and some other neat features like "use function", which will mean a simple module setup with namespacing without classes. Oh and phpdbg built in! I went to leave PHP this year, and didn't end up doing it, because of how much has changed lately. It's a good language, with awesome tooling know. I can write well-tested, easily readable, maintainable code using small composable libraries, and big frameworks when needed, without fighting against the dumb parts of the language. It makes me happy :)
- venomsnake 13y agothe main problem with that is that most of the big php deployments are moving at their own pace. So ... anything new can trickle down in years. And you rarely have the luck of finding clean slate php project nowadays.
- jiggy2011 13y agoThe big difference that the PHP ecosystem seems to have vs the ruby/python ecosystems is an emphasis on providing complete stand-alone solutions to problems vs providing developers with the most flexible and powerful tooling to develop their own solutions. Whenever I find myself wanting a photo-gallery, an eCommerce platform or a forum I always seem to find that the most mature solutions are based on PHP. The advantage of this is that semi-technical webmasters can easily deploy complete websites without writing a line of code, thus the underlying code quality is of secondary importance to the functionality provided.
- polysics 13y agoThat is not necessarily an advantage, considering the same semi-technical people leave their websites available for any kind of security breach. This is not 2001 any more, people should know what they are doing.
- jiggy2011 13y agoit is what it is, if they weren't using PHP they would be using something else. Having said that it shouldn't really be an expert level activity putting a few webpages online.
- 8ig8 13y agoFor context, Acquia[1] was founded by Dries Buytaert, the founder and lead dev of Drupal. [1] http://en.wikipedia.org/wiki/Acquia http://en.wikipedia.org/wiki/Acquia
- justinph 13y agoThe irony is not lost on me.
- thomasfedb 13y agoOf course you can write crappy code in any languages, and conversely you can write nice code in most languages (perhaps not in INTERCAL or Whitespace). Personally I prefer Ruby over PHP for precisely the same reason I don't begin my day by shooting myself in the foot.
- losethos 13y agoPhD? God picked me for His temple. He infused me with divine intellect. Go see. http://www.templeos.org http://www.templeos.org If you don't like it, yer a nigger. God says... informed heal seems enlightening list daughters Lo sharper veiled readable wishing mouth drawn stayed spiritual an hand belongeth tamedst led oracle Powers lust sights achieve exaltedness treachery greeted off WARRANTY mountains Eve horns instinct incommutable indigent wedlock disquiet regular MERCHANTABILITY slackness resend
- beberlei 13y agoAuthor here. I wrote this article as a guestblogger for Acquia, which is the company behind Drupal. I don't work at Acquia. The article obviously uses Drupal as an example, PHPBB and Wordpress as comparison because they are all in the off-the-shelf, customizable category of PHP applications. Both Drupal and phpBB (contrast to Wordpress) have massively modernized their code bases in the last years and improved the quality of their code. Coming from their original level, this is obviously a huge undertaking and still far away from being "high quality code" as an absolute measure. However their efforts in this space are remarkable. Given that they have so huge installed code-basis that they have to take backwards compatibility seriously (which is also something that contributes to quality of software), explaining why it takes so long to improve the quality of truly old legacy software. Compare this with many companies that use PHP, that still don't know what automated testing and quality assurance is. The article tries to highlight how PHP open source software use tools for quality assurance, what tools exist and that you should use them in your PHP projects.
- WiseWeasel 13y agoFYI, there's currently a typo in the first paragraph ('loosing' => 'losing',) which made me cringe; you have to bury the typos further down where they'll have less influence on my perception of the piece. [edit]It's since been fixed. That was an impressively quick response.[/edit]
- beberlei 13y agosomeone else mentioned it on twitter before, thanks for the hint :)
- SkyMarshal 13y agoThanks for putting all this together. I recently find myself working with PHP again after last looking at it in 2003, and have been digging around getting up to speed. All sorts of interesting things happening in this space, especially PHP-FPM and HHVM. The language design and code quality/organization capabilities may not yet be up to snuff with Python and Ruby, but the runtime options are as good or better.
- usamec 13y agoHigh quality PHP does not exists, since PHP is ultra low quality language: http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/ http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-de...
- nkuttler 13y agoYou're right, but the post wasn't really about PHP itself. Of course, with this in mind, PHP apps can never reach high quality.
- fowkswe 13y agoI think a valid point to make here is that what has propelled Ruby, Python, JS, etc, forward has not been the language, but the frameworks that have put context and boundaries around using those languages. Its entirely possible to write a poorly organized bowl of spaghetti using Ruby if you leave Rails out of the picture. I would venture to say the same is true for any programming language. PHP was born before the idea of an open source framework had been propagated, it spread around the web before many of the paradigms and patterns had evolved to what they are today, and unfortunately it failed to gain acceptance by the elite programmers that have carved a community out using those other languages. The other languages' respective frameworks have large, organized communities which have attracted very smart people that have put large swaths of functionality in place, before you ever have to write a line of code. Its playing catch-up now, but there are good examples of PHP out there and it most certainly can be used in an elegant, high-quality manner.
- sixthloginorso 13y ago> Its entirely possible to write a poorly organized bowl of spaghetti using Ruby if you leave Rails out of the picture. I would venture to say the same is true for any programming language. You can easily write one with Rails over just a few months of maintenance. I hate, hate having to do a damned autopsy to trace all the @instance (read, global) variables copied and inserted into the objects that you never create yourself, -because Rails devs are apparently above having to endure the savagery of passing arguments to their methods- and having to grep every single function that gets automatically included from everywhere in the project into the namespace.
- heron87 13y agoI believe "high quality PHP" is an oxymoron. It's just impossible to be aware of all the pitfalls PHP contains. Here is just one example among many: > if( '33333333333333333333' == '33333333333333333334' ) echo "equal"; Output: "equal" The "reason" for this very odd behaviour is that the two strings are automatically converted into integers, which leads to an int overflow, which PHP ignores (ignoring errors is very PHP specific) by guessing that the two "numbers" must be equal. I'm sure they even call this a feature...
- blindhippo 13y agoI would argue this isn't odd behavior - it's doing exactly what you asked it to do, and giving you the proper result. If this is incorrect, do it properly. If you're encountering this pitfall, the problem isn't the tool being used, but the person writing the code.
- jiggy2011 13y agoI just tested this (PHP 5.4) and I don't get this behaviour. In this example the two are compared as strings not integers so are not equal. PHP does not automatically convert types unless you do something like this: if( 33333333333333333333 == '33333333333333333334' ) But here the problem is the integer overflow not specifically the type conversions. You are going to get weird behaviour no matter what you do because you don't have enough bits to store that number. If you want to use numbers this size then you are going to need some type other than the standard int.
- DCoder 13y agoNot entirely true. PHP definitely tries to perform a numeric comparison on two strings if it thinks they are both numerical strings, but this behaviour changed in PHP 5.4 [0]. heron87's scenario was reported as a bug [1], changed in PHP 5.4 and caused new problems [2]. See the string comparison routine in 5.3 [3] and 5.4 [4]. The new implementation still inspects the strings to see if they are numeric and then tries to do a numeric equality check rather than string equality check, leading to amusing tricks like var_dump("0xFF" == "255.0"); // true! But if both values overflow the long type and their double representations are equal, the new implementation falls back to actual string equality. A quick check at [5] shows that both values heron87 compared have identical double representations, assuming (sizeof double == 8), so the new representation detects the long overflow, then it sees that double representations are also identical, and then it returns to string equality rather than numeric equality. The old implementation did not consider long overflow and ended up comparing the numeric values. [0] http://3v4l.org/a0nKq http://3v4l.org/a0nKq [1] https://bugs.php.net/bug.php?id=54547 https://bugs.php.net/bug.php?id=54547 [2] https://bugs.php.net/bug.php?id=62097 https://bugs.php.net/bug.php?id=62097 [3] https://github.com/php/php-src/blob/PHP-5.3/Zend/zend_operators.c#L1992 https://github.com/php/php-src/blob/PHP-5.3/Zend/zend_operat... [4] https://github.com/php/php-src/blob/5.4/Zend/zend_operators.c#L2039 https://github.com/php/php-src/blob/5.4/Zend/zend_operators.... [5] http://babbage.cs.qc.cuny.edu/IEEE-754/index.xhtml http://babbage.cs.qc.cuny.edu/IEEE-754/index.xhtml
- mekoka 13y agoIt still baffles me that whenever an article like this comes up, people still justify choosing PHP because of its ease of setup compared to other languages. Seriously? What are you going to tell me next, that you chose Ruby because the "Hello World" tutorial was 15 minutes shorter, than the Java one? Come on now. Yes, the fact that PHP is easy to setup may explain its popularity, it doesn't however justify choosing it, considering that you may spend 2 or 3 days setting up a tool that you'll end up using day in and day out for the next couple of years, to do much more difficult things than just greeting the world on a blank web page.
- Tloewald 13y agoThere's a big difference between easy to set up (requires no setup) and a bit harder to setup (requires a different and more expensive ISP and then a bunch of extra effort). The reason I picked PHP for a project years ago wasn't because it was easier for me to set up, but because it would be easier for users of my code to set up. If you're writing code to work on your servers that's a different thing altogether. Similarly I picked PHP for a later project simply because it was available and configured, whereas anything else would have had to go through approval and tech support. For my personal stuff I use a shared server (dreamhost) which is pretty typical for low-end providers. PHP isn't merely easier, it's possible. Now my professional stuff goes on dedicated servers, so that's great. But the problem with them is that when I want to tinker, I want something really simple and foolproof to work with. If I come back after not looking at a side project for several years, I'd like to not have to spend days figuring out the runtime setup. We are getting close to a better world. I see a lot of pretty cheap/free and convenient options for hosting node and rails projects, but usually database access is yet another stumbling block.
- enimodas 13y agoLots of hate for php in this thread, but this has me thinking: does anyone know a better solution to solve my problem? I have to build a CRUD-like webapp for some database, and with a bunch of authentication and authorization. Lots of forms and reports, think MS access. I was planning to use symfony2 and a generator bundle for this, as symfony2 has those things build in and the generator will write a lot of the code i need. I'm also pretty time constrained (2 weeks), but I'm still curious what other options there are out there or how other people would solve this.