But I've seen just as awful code in other languages throughout my career so far. I wish people would drop this elitist attitude towards PHP.
Perhaps you're confusing HHVM with hack?
Cause, ya know, 4 years later there's probably nothing that is changed or improved. Better to just write it off completely than to do your own research and use relevant facts to shape an argument.
* It's 2016 and PHP still doesn't have a module system, Python had one in '91, Perl had one in '94, Ruby had one in '95
* inequality operators still have no === equivalent
* sorting is still indeterministic when you have null values because NULL < -1, and NULL == 0
* arrays are the only containers in the language and they simultaneously act as sets, lists, and associative arrays which fucks up almost all array functions because you don't know what they will do
* PHP has had exceptions for almost 10 years now and a lot of functions still require you to use their specific error function to tell if it failed. So if you don't call say json_last_error, your code will SILENTLY return the wrong thing
Composer is widely adopted and has been the standard for years now. It's not baked into the language, it's a community driven effort that has been wildly successful.
> * inequality operators still have no === equivalent
Still true. Pretty easy to deal with since there are functions for handling equality of all scalar types.
> * sorting is still indeterministic when you have null values because NULL < -1, and NULL == 0 > * arrays are the only containers in the language and they simultaneously act as sets, lists, and associative arrays which fucks up almost all array functions because you don't know what they will do
Both of these things are true. Neither of these things regularly snag me in my development, but like many other dynamic languages, they do need to be carefully designed for. Unit testing, strongly typed scalar vars (new in PHP7), or using SPL object data structures instead of language primitive help here.
* PHP has had exceptions for almost 10 years now and a lot of functions still require you to use their specific error function to tell if it failed. So if you don't call say json_last_error, your code will SILENTLY return the wrong thing
I can't think of a function I regularly use besides json_encode that has this problem.
Much of that article was originally a disagreement with the approach PHP generally takes and is subjective in the first place. I'm not trying to sway people's opinion to actually use PHP, I'm just saying that despite the worts it is a capable language with an incredibly positive and productive community. It's no longer the dumpster fire it once was.
I'm not into php dev anymore, by any means, but glancing at the improvements that have come through lately, even i have to admit that there's been a massive leap from 5.3 or so.
i've seen site outages in large companies due to these sorts of bugs. multiple times. this is a major set of problems that you avoid by having a memory model that fits the domain (http services). php sort of did it by accident, but it works. BEAM gets this right as well.
I don't know how many times I tried to run a php web app just to find out a random php5-* extension was missing, and then having to guess which one.
However, if you do want an elegant solution for your problem, may I recommend ruby-install[1] and the companion for easily changing between versions, chruby[2]. Alternatively, you could try RVM[3].
There are a couple more versions (one is even specifically designed for Windows), but I found ruby-install and chruby to be the most convenient ones for both personal and professional use.
[1] https://github.com/postmodern/ruby-install [2] https://github.com/postmodern/chruby [3] https://rvm.io/
...except PHP.
I'm not trying to bash Ruby, but I haven't done any programming with it for about 6 years. I just want to get some web thing running on my home server, or get some gems installed for Compass or whatever (which to be fair is now a lot easier with bundler).
What I don't want to do is figure out how RVM works for the third time and how to install it globally instead of just for my user account so Apache site one can use one version and Apache site two can use another.
Everything in that world changes every year and if you're not keeping up it's a huge mess.
Unless you install PHP with a certain prefix—which you can do for other languages—I don't see how PHP solves the problem.
C?
Also, there's the problem with platform portability (in terms of compiler "oddities", not system libraries) which I won't get into, because it's a hairy subject. :)