I don’t know if it’s due to over-exposure to programming memes but I certainly believed that no one was starting new PHP projects in 2023 (or 2020, or 2018, or 2012…). I was under the impression we only still discussed it at all because WordPress is still around.

Would a PHP evangelist like to disabuse me of my notions and make an argument for using PHP for projects such as Kbin in this day and age?

  • @l3mming@lemmy.fmhy.ml
    link
    fedilink
    3211 months ago

    I’m a web developer of 25+ years. These days python, php, react, vue stack. Formerly, C, C++, perl and assorted other oddities.

    Forget what you once heard about PHP. Modern php is nothing like its early days. Modern php has some great constructs that give language expressiveness and fluidity, and that really lends itself to concise and beautiful code.
    PHP also has some brilliant web frameworks (eg: Symfony) that make build web apps (be it REST APIs or frontend backends) just a pleasant experience all around. It’s dead simple yet extremely powerful. This makes makes development and maintenance using PHP cheap. PHP’s testing suite is also ridiculously powerful.

    By comparison, I find python web frameworks (Django, flask etc), fiddly and finnicky to use. I also find Python a much less expressive language. By that I mean it will often take me several lines of code to do something that is otherwise a 1 liner in php. It just feels clunky and awkward.

    Don’t get me wrong. I once hated and laughed at PHP with the rest of them. But PHP has really evolved over the past 10 years, much more so than python has. I look forward to the day Python has a good hard look at itself.

    In the meantime, if I need a backend for a website and I’m given the choice between PHP or Python, I’ll choose PHP (symfony) every time.

    Besides, PHP devs are cheaper.

    • WatTylerOP
      link
      511 months ago

      Thank you for the detailed response and don’t worry: you don’t have to pull punches on Python on my account 😂 I’m a former Django dev and I have no intention of working with Python ever again. I see why it’s so popular for data analysis etc.: it’s a phenomenal language for non-programmers.

    • tal
      link
      fedilink
      2
      edit-2
      11 months ago

      I don’t really focus on Web development (though I’ve done a little in various languages when it became necessary to solve specific problems), but over the years, for software development, I’ve become pretty conservative about adopting new programming languages, frameworks, libraries, and so forth when they come out. I have seen a very large number of things that were new and trendy vanish in the wind after people put a lot of effort into coming up to speed on them.

      Once there’s a large installed base, though, they’re gonna be around for a long time to come, because software projects have committed to them.

      None of this is to ding Rust, which Lemmy uses. I’ve never written a line of Rust myself, don’t know the ecosystem. But I don’t think that PHP is bad just because it’s pretty mature.

      Also, related side note: Reddit was originally implemented in some Lisp variant, probably in part because Paul Graham, who was involved in some early funding, is a huge Lisp fan. There isn’t that much web dev happening in Lisp, and Team Reddit later had to go back and reimplement it in the more-widely-used Python, on the Pylons framework. That doubtless cost them a lot of dev time.

      • Bipta
        link
        fedilink
        311 months ago

        PHP isn’t bad because it’s mature. It’s bad because it’s PHP.

        Still, it’s good for the right jobs.

      • @Thorry84@feddit.nl
        link
        fedilink
        111 months ago

        Totally agree, people seem to be always searching for the next hot thing, claim it’s better than everything else and start porting stuff to it. A couple of years later they choose the next hot new thing and ported their old stuff over to that. And so the cycle continues.

    • scarcer
      link
      fedilink
      2
      edit-2
      11 months ago

      While I haven’t tried symphony, my annoyance with PHP in general is that parsing any kind of data is tacky. In the end you have just as many lines as python but less readable.

      Cleaner functions or cleaner data? Both languages have their strengths and can (now) be typed.

      • operator
        link
        fedilink
        111 months ago

        Use the right tool for the job. If you need extensive data parsing and handling, it might be better queuing that off to another service. Even python libraries are usually written in C…

      • @l3mming@lemmy.fmhy.ml
        link
        fedilink
        111 months ago

        Well, this is true. It’s all about the right tool for the job. The PHP hammer is good at some things and bad at others. It is good for web development, it is bad for parsing [thanks to its truly awful regex functions], and it is way too bloated to be any kind of scripting language. Python is much better for parsing and transforming data, but its regex implementations are still pretty awful when compared to something like Perl. In fact, I still reach for Perl when I have to parse complex and unstructured text. Haven’t yet reached for Perl 6 though.

  • Cade
    link
    fedilink
    2111 months ago

    I see a lot of people quick to hate on PHP while not really knowing anything about it’s modern usage… but the thing I think of most is how people praise Lemmy for using Rust and diss Kbin for using PHP, but at the end of the day it’s HOW those tools are used that determines the quality of something. Language changes, but fundamentals stay the same, and in the end all anyone should care about is whether or not something works.

    Programming language wars have always seemed a tad shallow to me.

    • @Jdreben@beehaw.org
      link
      fedilink
      811 months ago

      This is absolutely the truth. Ruby (Mastodon) and PHP are far more than enough to get the job done, and being good at your job (building a product) is more important than using the latest or greatest tools.

      That said, these examples often have great existing products and communities keeping them in the conversation. OCaml is good enough for Jane Street but that doesn’t mean it’s the best or go choice. Such wars or discussions are definitely shallow when focused exclusively on the syntax and semantics

  • @plisken@lemmy.fmhy.ml
    link
    fedilink
    1911 months ago

    First off, any language/framework is just a tool.

    Second, modern PHP is quite different than 2005 PHP which is about when people started moving to other languages for web development (Ruby, Python, etc.). What you can and should write in PHP today would be almost identical to what it would look like in those languages (i.e. MVC frameworks, ORM for DB access, dependency management with lock files). Many language features were added too such as namespacing which allow for better/modern code organization.

    PHP has always had (and never lost) it’s dead simple capability to just package up a tar ball, ftp, unzip and just… run.

    Would I use PHP today, not unless forced to or for a lot of money. But if it’s a language a team knows, there isn’t a benefit to switching to something else.

  • @argv_minus_one@beehaw.org
    link
    fedilink
    1511 months ago

    Does disappointment count?

    After struggling my way through a broken MediaWiki upgrade today, I was reminded once again of just how awful PHP is, both to develop in it and to use applications written in it. What I had to deal with today would not have happened if it were written in a compiled language, because it isn’t possible in compiled languages.

    Specifically, my MediaWiki settings file contained:

    require_once( "$IP/includes/DefaultSettings.php" );

    Apparently, this was once required in MediaWiki settings files. After upgrading, though, its presence causes an extremely misleading error message:

    Fatal error: Uncaught FatalError: $wgBaseDirectory must not be modified in settings files! Use the MW_INSTALL_PATH environment variable to override the installation root directory. in /path/to/mediawiki/includes/Setup.php:237

    My settings file does not contain $wgBaseDirectory. Moreover, adding $wgBaseDirectory = MW_INSTALL_PATH; to my settings file does nothing.

    Only after a lot of web searching (and a fair amount of profanity) did I finally find out that the above require_once statement is the culprit.

    See the problem here? Interpreted languages like PHP encourage the extremely irritating anti-pattern of using an executable code snippet as a configuration file, which inevitably results in this kind of nonsense. In a compiled language, on the other hand, the easiest way for an application to load settings is by reading them from a data-only format like JSON or TOML, parsers for such formats tend to produce better error messages than this, and the vast majority of such formats don’t have an include directive at all.

    Had MediaWiki been written in a compiled language instead of PHP, my morning would have been a whole lot less stressful. And this isn’t the first time that this configuration-is-code anti-pattern has caused me grief.

    • WatTylerOP
      link
      711 months ago

      Thank you for taking the time to offer a different opinion to the prevailing sentiment. I am certainly in your camp of being wary of interpreted languages.

    • @tias@discuss.tchncs.de
      link
      fedilink
      411 months ago

      It’s not just that it’s interpreted. I code a lot of Python and I’ve never just read in another Python file as configuration and executed it. Reading a yaml or json file is like 2-3 lines of code. But I’ll bet it’s not that simple in PHP.

      • @l3mming@lemmy.fmhy.ml
        link
        fedilink
        6
        edit-2
        11 months ago

        It is that easy in php:

        $jsonConfig = file_get_contents('config.json');
        $config = json_decode($jsonConfig);
        

        • @tias@discuss.tchncs.de
          link
          fedilink
          211 months ago

          Well in that case, it’s just bad coding.

          I guess there’s a tendency for interpreted languages to attract more bad coders because trial & error is easier and you can get started in fewer steps. Also, fewer confusing compiler errors to deal with.

          • PJB
            link
            fedilink
            English
            311 months ago

            To be honest, the “configuration is an executed .php file” system does make some amount of sense in the context of PHP. When your app has to re-run everything to serve a web request, having to re-load the config (especially if it’s YAML, though JSON is less bad) is expensive. Re-running the PHP code, on the other hand, can be cached way better, in theory.

            Of course, this is still all PHP’s fault in the end: the core problem here is that you need to re-run everything to serve a web request, without ability to pre-load state like configuration.

  • artillect
    link
    fedilink
    15
    edit-2
    11 months ago

    I don’t know too much about PHP (aside from it getting memed on constantly), but kbin is built using the Symfony framework, which is really performant and mature based on what I’ve heard from others. Also, apparently ~80% of all websites (that W3techs knows about) rely on PHP in some way

      • YMS
        link
        fedilink
        311 months ago

        WordPress, Joomla, Typo3, Drupal, … PHP is pretty much omnipresent in CMS systems. It’s not a huge number of different PHP CMS, but it results in a huge number of websites being PHP-based. The vast majority of those websites don’t care for the programming language - they pick an existing CMS so they don’t have to do their own programming.

      • @ipkpjersi@lemmy.one
        link
        fedilink
        211 months ago

        Sure but there’s also Pornhub, Wikipedia, and Facebook which use PHP. Other large websites use PHP too.

        • AggressivelyPassive
          link
          fedilink
          211 months ago

          Facebook doesn’t really use PHP, but Hack, which is afair a PHP dialect and runtime/compiler.

  • Rekkar
    link
    fedilink
    1311 months ago

    Modern PHP is much better than most people expect. It has very little to do with the PHP4 we all grew up to dislike for its quirks and inconsistencies.

    That said, I wish more software was done in PHP. And for me it makes a lot of sense regarding the Fediverse. A PHP platform I can put on my existing shared hosting and connect some (sub)domain to it and call it a day. Most smaller/meduim businesses probably have that hosting constellation already around, idling around most of the time. The entry barrier is just so much slower than spinning up a VPS or renting cloud space somewhere just to test a small instance of something. Sure it scales not as good as your average cloudplatform but for most usecases that is not the biggest concern.

    Different product but I love Matomo as a Google Analytics because I can just copy the files to a clients shared hosting, connect a subdomain to it and if it uses Sqlite (also better than it’s fame!), I am done already and don’t need to create a database even.

    • Deedasmi
      link
      fedilink
      411 months ago

      Massive PHP hater here!

      Yeah, even outside the loop I know that, just like every other major programming language, it has grown a lot to mature with general coding practices. It’s reasonable well suited for something that has tons of server side content.

      • Rekkar
        link
        fedilink
        311 months ago

        Kudos for saying that even as a massive PHP hater :)

        IMO there is a reason why Wordpress is so popular (Disclaimer: massive Wordpress hater here!). Because of ease of install, more people can upload some folder in an (Web)FTP client than spinning up a Docker Container somewhere to host the latest JS Framework of the day just to host their little page or to show their content.

        There is simply no need for bundlers, preprocessors and often not even [a lot of] package management (I’m aware of PHP composer though)

        And exactly that ease of install is what could IMO make the Fediverse more democratic than having to run a container at some VPS that only a comparetively few people are able to do.

      • @catacomb@beehaw.org
        link
        fedilink
        111 months ago

        I went from PHP lover to PHP hater about a decade ago. I have to admit, reading some of the Kbin code has made me hate it a little less. It’s nice not to see include() and require() everywhere. It’s also nice to see some type safety features as that was the biggest reason I moved on. For anything much bigger than a simple script, even if you think you won’t, you’re going to struggle without it.

        It’s still not my first preference (and, let’s face it, most of this is preference) but it looks a lot better.

  • @hadesflames@vlemmy.net
    link
    fedilink
    1211 months ago

    It’s not because of word press. Wordpress is complete garbage that should have died ages ago. The reason it hasn’t is because it still makes it easy for people to add a customizable site in a couple of minutes.

    As for php, the php 5 days are long gone. Php has actually become a good a respectable language since the release of php 7, and things only continue to improve. Php is at version 8.1 and progress is not slowing down. There is even a dedicated full time dev team for php now. PHP is definitely not going anywhere any time soon and I’m more than comfortable with starting new projects using PHP. It happens all the time, especially with support from extremely good and well established frameworks like Laravel.

    Honestly if you’re starting a new project today, what would be a joke is to start it in node.

    • @worfamerryman@beehaw.org
      link
      fedilink
      111 months ago

      I’m trying to get a website up and running, but I need to be able to self host it. Can your recommend something other than Wordpress that I don’t have to code?

      Eventually I’ll have something cussing made, but for the time being, I just need something up and running.

      • @GiganticPrawn@beehaw.org
        link
        fedilink
        311 months ago

        Not sure if you’re familiar with the terminology but WordPress is a Content Management System (CMS). I honestly don’t know of many other than WordPress, I’ve heard of Joomla and Drupal but can’t speak to anything about them other than they’re CMSs, they’re FOSS, and I’ve heard them talked about.

  • @leetnewb@beehaw.org
    link
    fedilink
    1111 months ago

    Mature web framework and highly productive language vs less mature framework and emerging language. Personally, I think Rust is the more surprising pick than PHP for this application. A link aggregator is a forum with some frills. Not to mention half of the activitypub implementations that I know of have been in PHP.

  • @Thorry84@feddit.nl
    link
    fedilink
    1111 months ago

    As far as I know PHP is still very active and a great choice for new projects. Lots of new projects get started every day in PHP, the language and tools are still in active development as well as frameworks like Symfony for example.

    Sure there’s lots of legacy crap including WordPress, but there’s also no reason not to use it. Just because people wrote a lot of crappy stuff in PHP doesn’t mean it can only be used to make crappy stuff. It’s very much possible without a lot of trouble to create solid, good performing, easy to develop and maintain applications in PHP.

  • @Maturi0n@feddit.de
    link
    fedilink
    1011 months ago

    There’s still lots of active PHP projects, including new ones. PHP is actually a nice language and much of its negative reputation comes from the years of stagnation during the late PHP 5.x era. Which is long over. I definitely find PHP to be much nicer than JS for backend development, although I no longer use it professionally.

  • indorock
    link
    fedilink
    911 months ago

    It’s such an outdated meme to shit on PHP. PHP 8.3 is absolutely nothing like PHP < 5. It’s become a full-fledged, performant and secure language. I’ve been coding PHP since 2005, and I’ve seen it grow and become incredibly capable. Sure I do recognise that other languages are still more “popular” and respected, and as such I’ve been focusing more and more on Node/Typescript in recent years, but PHP isn’t going anywhere. And its package ecosystem is so much more reliable and stable than say NPM.

    • VerifiablyMrWonka
      link
      fedilink
      511 months ago

      Not to mention that the defacto package manager (composer) blows NPM out of the water in basically all metrics. From what I understand most languages package managers now look up to or even model themselves on it.

      • operator
        link
        fedilink
        611 months ago

        I have worked with composer, npm etc. All of those out there, but why is composer superior in your opinion? wouldn’t be able to pin point anything

    • Trebach
      link
      fedilink
      411 months ago

      PHP took the ugly duckling route. Only recently has it become a swan.

    • @ursakhiin@beehaw.org
      link
      fedilink
      311 months ago

      I don’t hate PHP, but I am wary of developers who only work in it. For the same reason I’m wary of Java developers, though.

      A language is a tool and should be treated as such. Trying to force every problem into a single box is skin to the “everything is a nail” idea.

      That said, I’m not sure Rust was the right call for the Lemmy backend, either. I like Rust. My team is transitioning to it for a system level service. But we would have chosen a different language if our goal was a web backend.

      The thing with open source projects, though, is often times they are written in the language the developer is learning or working in at the time, not because the language is the most suited for the job.

  • GioryJalino
    link
    fedilink
    911 months ago

    Funny that a lot of people responded by bashing on PHP, but I saw very little real arguments why PHP is so awful. What makes PHP that bad besides being the target of memes?
    I mean “lame”, “old” or “dead” aren’t particularly convincing arguments.

    • @l3mming@lemmy.fmhy.ml
      link
      fedilink
      611 months ago

      I was fortunate enough to meet Rasmus Lerdorf (PHP founder) long before I became a PHP programmer. At the height of the PHP hate back in the early 00’s Rasumus was giving a talk to a group of us stuck up Perl programmers.

      To be fair, we had good reason. PHP had borrowed lots of functions from C for familiarity (all those str* functions) and done stupid things that made life unnecessarily difficult, like naming some of them with underscores and others without, and making parameter order inconsistent across similar functions. So it did all these C like things but, it did them way, way slower.

      Not only that, PHP also wanted to be like Perl because perl was also a bit like C but did things quickly and parse just about anything you could throw at it. So PHP also shoe-horned in a bunch of regex functions to give perl-like capabilities to their pile of poo. So now it also had perl capabilities, but was performing way, way slower than perl. It was that try-hard kid at school that everyone pretended not to know.

      But, on top of it all, Rasmus was very apologetic for what PHP had become. He said to us that PHP was never designed to be a programming language. It was designed to be a “Personal Home Page” templating tool. But soon people wanted to conditionally include bits of templates. Then they wanted to iteratively include bits of template, and then he learned about lex and yacc and rewrote the whole thing and then, one day, there it was. Hideously ugly and Turing complete. And, when he said all this suddenly it all made sense and we had a whole lot of sympathy for where it and he was at. He went on to say that they were putting a lot of working into looking at the worst bits of PHP and making things better. And, credit where credit’s due, that’'s exactly what he’s done. PHP today really is a nice language to work with.

      • GioryJalino
        link
        fedilink
        111 months ago

        Thanks, great story (which I didn’t know) and some examples of why PHP is/was bad. Great write up!

    • @jmcs@discuss.tchncs.de
      link
      fedilink
      511 months ago

      It’s a terribly designed (and I’m being very generous with the use of the word designed) programming language, but to its defense so is JavaScript and people are not bashing NodeJS apps.

      Newer versions of PHP seem to be dealing with lots of past mistakes, but it will always have lots of warts due to backwards compatibility.

      • GioryJalino
        link
        fedilink
        211 months ago

        What are those warts? I’m not trying to be a dick, I’m just not educated enough on this subject. Is it more the ease of use (needing much more lines of code to do something or you need to build things yourself since there isn’t a function for it) or more the way the language is build (multiple functions doing the same thing or misorder of arguments)? Or is it just the performance?

        I started with PHP years back, shifted to Android/Java and then to C# (Xamarin) to Javascript (node.js/React(Native)). All in a hobby/personal project form, so I didn’t bump into problems with PHP most peofessionals seem to have and I still use it for API’s sometimes.

        • @jmcs@discuss.tchncs.de
          link
          fedilink
          2
          edit-2
          11 months ago

          You have things like type juggling which can hide nasty and hard to troubleshoot bugs. There are also inconsistencies because before 2014 the developers were YOLOying it instead if having a formal specification to stick too.

          And then you also have older parts of the standard library that were done by people that didn’t know what they were doing, leading to things like mysql_escape_string which doesn’t properly escape strings in some charsets, meaning you should use mysql_real_escape_string and that lots of beginners used the wrong, unsafe, function.

          Another thing that doesn’t help PHP’s reputation is that it used to be the language of choice of people that knew enough programming to be dangerous. I.e. people that know enough to do small applications, but not enough to take security issues or reliability in consideration. Which by the way, is still a big attitude issue in the PHP world seeing only 8% of PHP Websites use a supported version of PHP with security updates..

  • redcalcium
    link
    fedilink
    711 months ago

    It’s written using Symphony framework and seems to be using the latest best practice. Nothing to worry about here. PHP has its warts, which are being addressed since PHP 7.x. Modern frameworks like Symphony go even further by encouraging best practices when developing PHP WebApps, unlike the dark old days of PHP WebApps full of SQL injections and XSS issues (still is though in the WordPress plugins ecosystem).

    I’m mostly a Python guy and used to look down on PHP, but changed my tune since the release of PHP 7.x. If Python has JIT half as good as PHP these days, I would die happy.

    • @balls_expert@lemmy.blahaj.zone
      link
      fedilink
      211 months ago

      There’s still lots of problems with php like the type system exists now, but doesn’t let you put types on containers (arrays, hashmaps etc) so you still can’t use the type system to model your app in a way that invalid states throw compiler errors. And it’s certainly not ever going to be an algebraic type system. Nothing past the basics make it into php.

      They’re trailing behind in every way, have you ever looked at a php feature and went “oh god, I want that!”

  • imnotneo
    link
    fedilink
    711 months ago

    more so surprised that it wasn’t written in {insert favourite language here}

    that being said I agree that PHP isn’t anything like it used to be.

    • @beepnoise@beehaw.org
      link
      fedilink
      211 months ago

      And here I am, just waiting on the next red jersey app to be written in Java so I can actually contribute code 🥲