6 ms·
PHP solves problems. Oh, and you can program with it too
- Ralith 14y agoAs C++ has taught us, the solution to the errors made in a badly misdesigned language is not to continue cramming every feature you can think of into it.
- josegonzalez 14y agoRight, and in recent years, PHP has been really cautious as to how it adds certain features, but more importantly, has been cleaning up old edge cases.
- Ralith 14y agoTFA seems to argue that people's complaints don't apply to PHP5 because it added a random assortment of features.
- whichdan 14y agoThis is offtopic, but I just wanted to say that I really enjoyed your "PHP's Source Code for PHP Developers" posts. Please keep writing!
- Joeri 14y agoI think PHP's problems are actually quite solvable without core language changes. The OO model is actually pretty good, there's even reflection functionality that's sufficient to do stuff like auto-generating docs and self-validating DTO objects. The issue are the "legacy" api's, and the primitive types. What's missing are object api's wrapping the primitive and legacy functionalities. Those could be built quite easily though. You could have something like jQuery's $ function, but for PHP variables, that gives you an OO api on top of that value (especially now that you can use the -> operator on return values of functions without intermediate assignment). I wonder why nobody's built that yet. I suppose because those in the PHP community are all busy programming instead of meta-programming.
- whichdan 14y agoDo you mean something like this? function s($string) { return new String($string); } class String { public $string; public function __construct($string) { $this->string = $string; } public function __toString() { return $this->string; } // several helper methods like the following: public function toLower() { $this->string = strtolower($this->string); return $this; } // this would create lots of extra objects, // but leave the original unchanged public function alternateToLower() { return new String(strtolower($this->string)); } } $username = s('ExampleUser'); echo $username->toLower(); My concern would be the memory used to create several dozen extra objects. If this is indeed what you're talking about, is there any strong benefit besides convenience?
- zeroonetwothree 14y agoOne reason to abstract away strings is that you can gain security. For example, your template might only accept an HTMLString, which can only be created from a String by escaping. Your database library might only accept a QueryEscapedString, and so on. Of course all of this is possible without creating a wrapper for vanilla strings.
- Joeri 14y agoYes, lots of memory, much worse performance, but it doesn't really matter. If you care that much about those, you're not using any interpreted language. Besides, most PHP code is linear without much looping other than iterating database records. The overhead of such an approach wouldn't matter that much, and when it does you can always use the old way of doing things. But you wouldn't need to create an object per call, you could reuse a singleton that gets initialized by a wrapper function to work on your current variable (using references). Fix($str)->replace("foo", "bar") is a syntax that doesn't require object instantiation or string copying. And the singleton could use the mb functions internally to be multibyte aware.
- Ralith 14y ago> PHP's problems are actually quite solvable without core language changes How do you fix weak typing?
- stevencorona 14y agoWrong! Nope! PHP OO is screwed up and hacked together. Look at crappy support for late static binding, being unable to bind $this in closures, and all of the hack-glue that is get_class(), get_class($this), get_called_class(), self:: vs static::, the list goes on. The thing is that, with PHP, the "new, modern" features are only surface deep... once you do anything slightly advanced, you can always tell that they were hacked on to a language that was never meant for anything more than 'include counter.php', and maybe that's okay, but stop saying it's a real programming language because it's NOT.
- pan69 14y agoStill solving problems...
- stevencorona 14y agoJust cause I can solve problems in BASH doesn't meant that it's a real, modern language. http://bashlib.sourceforge.net/ http://bashlib.sourceforge.net/
- mayanksinghal 14y agoActually it does make it real. It may not be popular or modern or the best tool for solving a particular task, but it isn't any less real than the real languages: C, C++, Java, Objective-C, C#, Python, Ruby, JavaScript. Even http://en.wikipedia.org/wiki/Brainfuck http://en.wikipedia.org/wiki/Brainfuck is a real language - it sure is restrictive and impossibly hard to use for nearly all projects. Let's not use the word 'real' in this discussion. It seems unnecessary and quite frankly, fanboy-ish
- nikic 14y agoCould you be a little bit more specific? What is crappy about the late static binging support for example? Btw, you can bind and rebind $this as of PHP 5.4.
- mhitza 14y agoOk, I'll fall for this one. Tell me what a real programming language is (in a bulleted list prefferabily).
- banana_bread 14y agoThe fact that people have to constantly defend PHP says something in itself.
- jimminy 14y agoThat people constantly attack PHP? In all seriousness, it just works when your building for the web (unless it doesn't.) Is it often messy? Absolutely. Is it sometimes a bit verbose? Sure. Can it sometimes be like laying a snare, only to accidentally step back into it? Yes, but it's not alone, just seems to make it a little easier to occur. It doesn't have to be that way, it just tends to be like that. I prefer Python and Scheme, but I don't enjoy them when it comes to working with web development. There are frameworks that help with this, but it's still a pain. PHP is quick and easy, in that area and works 95% of the time in about 99% places you stick it. I've been trying for years to embrace Python in web development, but it just annoys me during the setup. PHP gets out of the way, in that area, and let's me go.
- cfv 14y agoYes, that people constantly bash PHP. I mean, it's the only strictly derivable answer. And also the only explanation that accounts for the fact that developers who do make a living off our usage of PHP keep answering with the same wording: It does work for all of us. Now, like someone else said at some point in this other PHP-bashing thread; provide me with a means of deploying flask (a tool that I currently also work with) that fits in a tweet and you have my sincere commitment to drop PHP altogether. A free Python/Ruby/Node hosting that makes sense would really work as a promotion tool too. EDITED TO ADD: As a reference, deployment of a new server currently goes kind of like this for us: apt-get install lamp-server^ && $ curl -s http://getcomposer.org/installer http://getcomposer.org/installer | php && php composer install
- blindhippo 14y agoWhat language do you use? If you had a bunch of influential yet hopelessly ignorant people writing blog posts about how awful that language is and possibly devaluing your skill set because of it, you'd want to correct things as well. The fact that the majority of complaints about PHP as a language boil down to your comment says A LOT about the ignorance of most of the complainers.
- fleitz 14y agoNo one is disputing that you can hammer a nail with a brick. Most of the criticisms around PHP revolve around the idea that it's better idea to use a hammer (with one claw side, and one hammer side) Likewise, when you have a real problem that isn't needs to run on a $5 shared host, or written for $4/hour in China PHP is rarely a good choice unless you happen to already know it. If I needed to solve either of the above two problems I'd choose PHP. I write a lot of PHP (mainly wordpress sites) and it's certainly workable, it's just annoying once you've used languages like C#, Ruby, F#, Scala, Clojure, or Python. None of the problems with PHP are unmanageable it's like driving an old diesel car, you just remember to plug it in the night before if it's going to be less than 40 degrees.
- Zak 14y ago$5 shared host Modern shared hosting can actually handle long-running processes and complex frameworks that used to require a VPS. I don't have broad experience with it, but I did just deploy a client's site to webfaction.com, which supports Django, Rails, arbitrary long-running processes, JVMs, custom Apache configurations etc.... Pricing can be as low as $5.50/month there, and there are probably even cheaper services for those who shop around. you just remember to plug it in the night before if it's going to be less than 40 degrees People in warm climates who have never seen electric engine heaters might not understand this.
- fleitz 14y agoGood point on the block heaters, I guess that's a cultural reference most likely to be picked up by Canadians. It's especially bad for diesels as when they age even with new glow plugs it isn't enough heat to make the diesel ignite with out waiting 5 to 10 minutes if it isn't a nice summer day. Yeah I've run a couple rails apps on dreamhost, it's becoming more common but you know for sure that PHP is going to be installed.
- CodeMage 14y agoI guess it's irrational, but the fact that there are some good points nestled inside this post only makes me more irritated about the post as a whole. You see, it's easier to just shrug and say "meh" if the whole thing is crap. Te problem with the main premise is the same thing PHP apologists have been harping about all the time: some poor soul wants to create an online encyclopaedia, or some teacher needs an online teaching platform, or someone wants to write a blog. Those people do not want to learn to program, they want to solve problems. Newsflash: solving those kinds of problems is called programming. That's what programming is. You want to make the computer do something that it can't do with the existing programs, so you create a new program. If a programming language is easy to use by everyone, it's because it doesn't require you to think like a programmer. It's part of the language design. If you start fixing those design decisions, you'll most likely end up with a decent language that simply isn't easy to use by everyone anymore. This idea that you don't need to be a programmer to write programs has already failed on several occasions in history of programming: dBase, Visual Basic and Access are notable examples. Not repeating the history is too much to ask for, but let's at least try to avoid making it look like it's a good thing.
- Ralith 14y agoI'm at least as opinionated about programming languages as the next HNer, but surely it's a misrepresentation to call Visual Basic, Access, and, yes, even PHP "failed" in light of their widespread use in successful products and/or businesses.
- Zak 14y agoIt's probably a mistake to think these technologies failed. You won't find many programmers who consider VB and Access tools of choice, but a lot of people have gotten a lot of use out of them in business. If it's possible to make a general-purpose programming tool that's reasonably accessible to non-programmers that programmers won't hate, I don't think anybody has come very close yet. DSLs may be the best we can do.
- rprasad 14y agoYou do not need to be a writer to write, a driver to drive, a cook to cook, a runner to run, or a businessperson to conduct business...and you don't need to be a programmer to program.
- zenogais 14y agoComing from someone who didn't start with PHP. Has used a variety of other programming languages. And programs in PHP daily I will say that it fails in many important respects and will for some time to come. The first things that come to mind are functional programming (it has some abilities but is fairly quirky and harder to read than other languages). Being able to use array_map or array_reduce is useful in many places but certainly not elegant in PHP. Code reuse is also not that easy with PHP (though traits may fix it, but we don't use PHP 5.4 yet because it's seemed fairly problematic for us in production) and the need for autoloaders is somewhat insane once you've used a language with an actual package system. It doesn't have a mature dependency management system (though Composer is currently an up and comer). It's great for small projects but horrible to maintain at large scale - and this is from someone who has written 100K+ line programs in PHP.
- mixmax 14y agoit's interesting to read the comments here. Most of them go on bashing PHP because it's a terribly designed language. They're probably right, but they're totally missing the point, primarily because this is a very technical community. I'm not a programmer. Yes, I can solve problems with code, I can whip up a webpage, I can talk to a database, I can use Jquery. But I don't know what lambdas are, I don't understand what LISP macros are all about, and I wouldn't know where to begin writing image recognition software. But you know what? I get stuff done. And PHP helps me do it. Because I can make things without worrying about not having a CS degree, not caring how a compiler works and not having to set up a server from scratch. If you look at all the sites out there making money and getting views I think you'll find that an awful lot of them are made by people like me.
- Argorak 14y agoBut you do know what a function is? Or a class? Or an object? It is not like those are non-trivial already or that knowing what a lambda is needs years of studies if you understood these things. The fatal flaw in the "PHP is simple"-Argument is that its actually not simpler than other things (I wouldn't say that its harder either). Sure, it gets stuff done (tm), but so do others, also without any deep knowledge. They may not be Lisps or Haskells, but Ruby and Python are coming close. The problem I have with the PHP community is that "its so easy to start" seems to be their main argument. Wouldn't the world be a better place if we had an easy to start stack _without_ a shitty language?
- mixmax 14y agoWouldn't the world be a better place if we had an easy to start stack _without_ a shitty language? Yes, and I hope someone will build it!
- btilly 14y agoThe problem is that any popular "easy to start" stack attracts people who have no idea how little they understand. And then they start building things badly because they don't understand. Some of it proves useful to other people who don't know what they are doing. And before long the ecosystem built around that stack becomes a horror to behold. This has happened with PHP. It happened with Ruby on Rails. (Before disagreeing with me, think about how much abuse of monkey patching happened, and how many have been bitten by it.) It happened with Perl back when Perl CGI scripts were the de facto standard. So yes, it would be wonderful to have an easy to start stack that is popular that guides people towards doing the right thing. But human factors guarantee that any that get popular will go downhill over time. (I've ignored the obvious argument that the same features that make you popular also make you worse. See the famous essay Worse is Better about Lisp vs C for context.)
- 10098 14y agoLet's talk about the conclusions that are drawn in this article. I'll try to challenge them one-by-one. > PHP is a great language to start programming! No. PHP is not a good language to start programming. And I mean programming in a broad sense, not slapping together websites (which is not really programming, let's be honest). Let's look at people who know how to program, you know, the guys who participate and win awards at ACM ICPC and TopCoder. There are several such people among my friends. Exactly zero of them have started with PHP. Some have started with Pascal, some with Java, some with C++. None with PHP, even though it was available and widely used when they started. I wonder why. > Once you started, PHP is also good for “real” programming (you know, object orientation and stuff). First of all, "object-orientation and stuff" is not a measure of how good a programming language is. So you'll have to bring a better argument to explain why PHP is good for "real" programming (whatever that term means). Saying "but Facebook and Wikipedia use PHP!" doesn't count :-) > PHP is not as bad as they say. There are issues, like with every language, but they rarely cause problems in practice. Actually, it is. It has some deeper issues that lack of consistency in function arguments. Some of them really do cause problems in practice, like its retarded type system and lack of sane support for multithreading. But I'm not going to name them here because there are tons of articles on the internet explaining those issues. You have probably read some of them. If they did not change your opinion about the language, then I surely won't be able to do it.
- fragsworth 14y ago> No. PHP is not a good language to start programming. Any language is a good language to start programming. Explain how learning PHP first somehow cripples your advancement as an engineer. You can't just say "my friends didn't do it". Otherwise you're really just being elitist.
- 10098 14y agoBecause when you're learning php first, usually you are not learning how to solve problems in an algorithmic way; you're learning how to set up apache or upload a file to the server, or scrape an html page for weather forecast, and other stuff like this. I'm not saying those are useless skills, but it defeats the purpose of "learning to program".
- calinet6 14y agoThere's nothing particularly wrong with this article. It describes some aspects of PHP. It's just that Atwood's article describes PHP much better. (http://www.codinghorror.com/blog/2012/06/the-php-singularity.html http://www.codinghorror.com/blog/2012/06/the-php-singularity...) I think the latter view is spot-on, and nikic's view here just serves as a perfect example of why certain people are still addicted to their awkward toolset.
- robomartin 14y agoOh, please. Stop it! Not another fucking PHP vs. the world thread on HN! C'mon kids, get off it! Any number of us could name tons of very successful (profitable, popular, worth tens, hundreds and billions of dollars) companies that rely to a large extent on PHP. And the same could be said about a dozen other languages and frameworks. Be done with this shit, will you? Haven't you had enough?
- j_col 14y agoI blame Atwood for trolling PHP yet again with this link bait. I'm deadly serious: he has a history of posting anti-PHP rants, then sitting back and watching his blog traffic grow.
- zobzu 14y agoThat's what i like about PHP: - low maintenance. That's true. - straight forward coding. Yes you can shot yourself in the foot. But it's easy. - controlled file descriptors, functions, etc: Tell me, how can you restrict the baseopen dir, certain functions such as exec'ing, how can you log all mails going out from.. python's wsgi, or ror, etc? That's right. You can't. Well PHP can. So, I dislike PHP for all the reasons everyone are going to write for the umpteen time too, but it does have several unique strengths too.