
PHP Must Die - nreece
http://www.steike.com/code/php-must-die/
======
jacquesm
PHP like any other language has its shortcomings and its strong points.

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.

~~~
chrischen
If PHP is to be improved, the new language must be easy enough a 13 year old
can do it and web oriented.

These are I think its two strongest points.

~~~
jacquesm
That and the ease of deployment, which is possibly the strongest factor. Most
hosting companies will provide you with PHP on apache even if you don't ask
for it.

~~~
chrischen
Oh, and good documentation too. PHP.net is awesome. It's probably the largest
contributing factor to PHP being easy to use.

~~~
scotty79
I'd say that greatest data structure in all languages is PHP array().

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.

~~~
bhiggins
You must be joking.

~~~
scotty79
Nope. I honestly think that that this is one of the main reasons PHP is
popular and is able to power even the most complex websites with ease.

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.

------
Luyt
The site itself is implemented with PHP. Why doesn't the author draw a
conclusion from his insight, abandons PHP, and starts eating his own dogfood?

~~~
jrockway
In a world where you have to eat, sleep, and work, sometimes you have to live
with a bit of imperfection. If the code works, and you will never need to
modify it, it doesn't matter how clean it is. (This is why I use UNIX. It
sucks, but it is pretty easy to paper over the suckage. If I used a properly-
designed OS, I wouldn't be able to browse the web, program, etc., etc.)

------
derefr
I think there's a more relevant issue here: can we please stop designing
languages that use prefix-zero to signify octal? It's a horrible trap lying in
wait for those just learning their first language, and then you have to keep
it in mind whenever you learn another one, to see whether it's "supported" in
this new one as well.

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.)

~~~
thristian
Python 3 has, I believe, done away with the 0 prefix for octal and uses a
consistent prefix system for different-base literals: "0x" for hex, "0o" for
octal, "0b" for binary.

------
csomar
I think "PHP Must Die" is a lot exaggerated, I think "PHP should be improved"
is a better title!

~~~
docgnome
The problem is most of the broken behavior in PHP is never going to be fixed
because it would break compatibility.

~~~
jacquesm
Printing a warning would be easy enough, you could disable the warning if you
want it to work like this. Leave that for one generation with a 'deprecated'
attached to it, remove in the major release after that.

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).

------
nir
If you don't like PHP, you're allowed not to use it.

~~~
greyfade
I disagree. One who must use it on a regular basis has every right to despise
it.

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.

------
jrockway
PHP's yacc grammar is a good read, just as an example of how not to implement
a yacc grammar. Changing one constant, for example, would make PHP's parse
error messages about 1000x easier to understand and resolve. (I sent a patch
for this many years ago, but it apparently never made it in.)

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.

~~~
jacquesm
Hehe, don't get me started :) How about:

\- 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.

~~~
jrockway
PHP appeals to the people that don't really understand programming, so I doubt
making the language better in a programming-language-designer way is going to
convert users. The next language that's as popular as PHP will be "easier" in
some way that's appealing to average users.

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.

~~~
jacquesm
PHP is used by plenty of people that (at least think they do, looking at
myself ;) ) do understand programming, they just use it because they literally
got used to it.

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.

~~~
jrockway
Community is important, and that is the main reason why I tolerate Perl's
various annoyances. There are simply a lot of Perl programmers that give me
excellent code for free (see <http://github.com/languages>) and that makes it
all worthwhile.

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.

------
yaacovtp
Go to his home page, this link is from 2004!

Sep 1 2004 PHP Must Die A comparison of how different scripting languages
treat their users.

------
radu_floricica
Title is troll, and not even original.

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.

------
baddox
I chuckled at the subtle unspoken complaint about the required semicolons.

------
ErrantX
As one of my favourite friends (also a programmer) once said:

"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

------
edw519
This reminds me of that old joke:

"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.

~~~
jrockway
People make mistakes. Computers don't. So people program computers to catch
their mistakes, before those mistakes become problems like "crashing" or
"losing money".

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.

~~~
potatolicious
True, but in this case PHP _corrected_ its error (it now returns null for this
use case, as it should)... this is why you don't rely on undocumented
behaviour as canonical. If it says it should return null, but returns zero
instead, _check this result always_.

