PHP Must Die
steike.com
steike.com
The market place decides. If you want to get rid of PHP (or 'kill' it) you will have to displace it with something better.
The other alternative is to send in a patch for this bug or simply report it. I've used PHP for many years and while I certainly don't love some of its more subtle problems you can build an amazing amount of stuff in it.
I have personally had good success reporting bugs to the PHP devs.
That's a lot more productive than 'blogging' about it.
In case it isn't clear why the 08 does not print anything, the 8 is an illegal character in an octal string and is discarded.
A suitable error message would be 'invalid character in octal sequence' instead of a silent discard.
Mainly because I have to. And I often have to, since many el-cheapo web providers only offer PHP+MySQL. PHP isn't too bad, I don't get bitten often by strange bugs. I see PHP as a common workhorse.
http://bugs.php.net/bug.php?id=46578
Fixed within 6 days, with an email to my address about where to get and how to apply the patch, which was a nice touch.
The other one was technically my fault but it would have been nice to see the 'expected' response from a language I've been using for such a long time.
These are I think its two strongest points.
It's actually an ordered dictionary with default implicit natural number keys. Efficient enough to represent concepts such as arrays, sets, queues, stacks, trees, graphs without bothering with hashtables, linked lists, reallocations and other underlying data structures tailored for specific purpose.
Before PHP I did Basic (Atari), 6502 Assember, Logo, ACTION!, Pascal (Kyan, Turbo), C++ (Turbo, Borland) , Java, C#. After PHP I did JavaScript and Python.
First I've met PHP-like arrays in awk and was astonished with its versatility.
I still believe that data structure that allows person to make a queue, stack, tree, even graph easily without knowing any theory and planning anything is one of the greatest things I've encountered in programming languages.
I am very dissatisfied that python does not have standard ordered dictionary and strongly differentiates between tuple, array, set and dict even though they provide just overlapping subsets of odict functionality.
And since a probable fix without breaking stuff is likely a patch would be all it takes (and a note in the changelog, for the unlikely case that someone did depend on it, not that they'll read the changelog ;) ).
Octal not being the popular thing it once was I doubt it would matter much.
I think more people are 'bitten' by this totally unexpected behaviour of leading 0's suddenly doing wildly interesting things to numbers (what?? there are more numberbases than just decimal???) than there are that expect illegal characters in octal numbers to throw errors.
Perhaps, instead, we can come up with some unified representation of a way to attach a base to a number, such as, say, [base]b[number], e.g. 2b0110001 or 16bFF, and use it in every language? (I'd say something about subscripts and their natural use née mathematics, but I'll hold that comment until the iTablet's soft keyboard layout makes people start rethinking APL-like languages.)
clisp -q -x "(print 08)" 8
An octal number has the prefix #o, as in #o3
1. Using something else for an individual project (maybe a good idea) 2. Replacing all PHP with something else (impossible)
Since a massive amount of the web runs on PHP, "starting off with a clean slate" would definitely NOT be easier. In fact, it would be impossible.
Lots of things that were wrong have been changed like that.
The biggest one remaining of the 'old' bugs which I think really would break too much is the strpos return value in case of no match (which is 'false' but 0 is a legal return value as well, -1 would have been a far better choice).
On the other hand, if you've never used it, you have no right to an opinion in the first place.
So long as your opinion is tempered with experience, you have every right to it.
But, then, I'm also of the opinion that if you like PHP, you have no right to write code of any sort.
The number of things that work by coincidence, like support for octal numbers, is shocking. It's clear that PHP is optimized for something other than correctness.
- naming conventions
- globals (or, better yet, scope in general)
- 'objects' (I use the term lightly)
And a host of other things.
They could do a lot better still, but as long as nobody comes along and starts to make serious inroads into their user base I doubt this will change much.
What is surprising is not how much is broken, but how far they made it with so much stuff as broken as it is.
I've always thought that if python would have used braces, dropped the whitespace bullshit and came with a ready to go plug-in for apache with a similar ease of deployment that it would have kicked PHPs ass long ago.
Perl was there first; you could "require 'cgi-lib.pl'" and start writing a web application.
Then PHP made that even easier, by making HTML pages valid programs. (You could add code "later"; your scripts didn't have to live in cgi-bin isolated from plain HTML files.)
The average users jumped ship from Perl to PHP pretty quickly, despite Perl having more features, more modules, a better runtime, etc. They wanted to know as little about programming as possible, and PHP got them there. Inexperienced programmers want to micro-optimize for things like deployment or runtime speed, and PHP gives them that.
The next Popular Language will make one of those things even easier.
(Ruby on Rails almost did this, but it went overboard with the advanced programming language concepts, and is now a small niche again. It alienated the experienced programmers, who went with Merb, and the inexperienced programmers, who couldn't wrap their head around concepts like exceptions and just stuck with PHP, which lets you ignore errors if you prefix the line with an @ sign.)
Anyway, what I'm getting at is, "just leave the PHP users alone". Those that want something better will find it. Those that don't, won't.
The perl community was pretty abrasive when I first looked in to it, the PHP community was the opposite so I ended up programming a large amount of stuff in PHP.
But before that I already coded my way around for about 15 years or so in lots of other languages, projects including cad systems, low level communcations drivers for weird bits of hardware, an OS and a whole slew of other stuff.
Basically my take on it was 'it's good enough for what it's for', web programming and making money.
To this day a good part of http://ww.com/ (possibly nsfw so don't go there if you are on your boss' line) is written in PHP, I've recently gone over the whole thing in order to clean it up readying it for a port to something a little bit more clean.
It was quite amusing to see how many hoops we had to jump through 11 years ago when it was first built compared to how easy you could do some of that today.
For plenty of people it is just a means to earn a living, language aesthetics and purity or expressiveness don't enter in to the equation, it is whatever their boss tells them to use, C#, PHP or Java.
And perl definitely suffered because of the attitude perl aficionados take, both with respect to other languages as well as to those that do not fully grok perl just yet.
Community is a huge part of any programming environment, possibly even more important than the language itself.
The same does not appear to be true of PHP. PHP's community is more talkative ("How to cut-n-paste code to hash passwords"), where Perl's is more programming-oriented ("Authen::Passphrase"). As a programmer, I prefer to stick with the programming-oriented community.
Interesting how the "feel" of a community dictates the choice of language. I thought I'd be immune to this effect after programming for 15 years but I recently chose not to use Clojure on an (eventually to be opensourced) project because of the "dumb fanboi" tone of a part of its community.(eg: http://www.bestinclass.dk/index.php/2009/10/python-vs-clojur... HN reaction: http://news.ycombinator.com/item?id=881642).
I chose to use Haskell instead (I like the "vibe" of its mailing lists and irc and blog posts and so on) and have been feeling a smidgen guilty about dismissing Clojure (which I think is really nice - I admire Rich Hickey's tech skills and design sensibility) for its community's stridency.
Seems I am not alone in my weirdness!
Of course, those cases aren't interesting to HN, but they're common, and PHP legitimately wins in them.
What should die is not PHP but the use of PHP in circumstances where another language would be a better choice.
I've written a 'media-player-annex-file-sharing-service' ( http://mxchg.com/ ), the thing has a web based front-end written in PHP and a C based back end for audio fingerprinting (so you don't end up storing 10 copies of each possible audio file).
When the time rolled around to write the scripts that glue everything together in the back-end I chose to do it in PHP instead of python for several reasons:
- it reduced the number of dependencies
- it removed the need to rewrite part of the code in yet another language
(mostly library stuff)
- it removed the need for yet another skill in people wishing to modify it apt-get install libapache2-mod-php5
a2enmod php
Installing mod_perl: apt-get install libapache2-mod-perl2
a2enmod perl
But, in general, running app code in the webserver is a bad idea. This is why everyone uses fastcgi in production, and why every web framework (except PHP) ships a standalone dev server for development work.PHP is the one that's hard to use now, unless you are developing on an already-configured system.
Sep 1 2004 PHP Must Die A comparison of how different scripting languages treat their users.
A more interesting discussion would be how more advanced, especially functional, patterns can be used in php. Right now I'm returning in php after many years of java and some time with lisp and clojure, and I'd be very curious to know if any of you managed to apply a more lispish mindset to it.
"languages are like women; if you dont treat them in ways they like then prepare for unpredictability"
:)
EDIT: replaced "designed" with "like" - much better phrasing
"Doctor, doctor, every time I lift my arm it hurts! What should I do?"
Doctor: "Don't lift your arm."
Instead:
"Every time I get lazy and expect Language <x> to catch my problems, it doesn't respond the way I think it should. What should I do?"
Don't be so lazy. Code it right in the first place.
If you give the compiler invalid input, a subtly-broken program should not be the output. The output should be an error pointing you to your mistake.
Isn't this advice better applied to the developers of PHP, in this case?
So, yeah, they did screw up here and there. But very few projects were remotely as successful as theirs.