11 ms·
Everyone laughing at PHP hasn't tried it for years, I'd bet. It started clumsy, true, but it became a solid and quite elegant way of doing things. And by thing
by pachico 5y ago
Everyone laughing at PHP hasn't tried it for years, I'd bet.
It started clumsy, true, but it became a solid and quite elegant way of doing things.
And by things I don't mean just web development.
The current limitations I see in PHP is that there is not an official multi-core coroutines solution.
- PostThisTooFast 5y agoI wasn't laughing at it until I tried to follow this link and the server was down.
- IshKebab 5y agoI've used PHP recently to work on Phabricator, and the whole "yes it sucked but now it's good" narrative did not match my experience at all. Sure it might have added modern features but the core is still rotten. The alternative would have to be TCL levels of bad to make me choose PHP.
- n42 5y agoPhabricator is not written in "modern PHP", so your experience is not surprising
- wutwutwutwut 5y agoCan you link something written in modern PHP?
- allan_s 5y agomost of projects based on Laravel/Symfony that are < 5 years old
- n42 5y agolike the sibling comment said, web apps are written in Symfony/Laravel, but the framework abstractions with web apps might not paint you a clear picture of how the core language has improved. it will give you a good idea what it's like to build applications. my favorite part of modern PHP is how nice writing libraries is. so it might not be what you're looking for, but I remember being pretty impressed with the code quality of the Amp PHP library recently. the v3 branch is 8.x only and (I believe) is targeting the Fibers feature just introduced in 8.1 https://github.com/amphp/amp/tree/v3 https://github.com/amphp/amp/tree/v3 one of the best things to come with PHP are the community standardizations around things like interfaces for HTTP requests, logging, DI containers, and even code style standards. it makes for a very consistent experience when developing (at least when you're in the "new world"), since most newer libraries are all written in a similar style using common interfaces
- AegirLeet 5y agoPhabricator, much like WordPress, kind of lives in its own world and hasn't adopted most aspects of modern PHP. Even as someone who works with PHP and enjoys it, I wouldn't want to use Phabricator.
- jdjdjrj 5y agoWordpress has taken great strides to comply with the latest PHP standards so I'd say that's not quite fair to include it here.
- johnny22 5y agoi just helped my father with a wordpress site, and it sure doesn't use modern php. It runs on modern php, but it does not seem to actually USE it.
- jonwinstanley 5y agoI’d disagree, Wordpress is very difficult to work with when you’re used to modern ways of doing things.
- Implicated 5y agoI would say some contributors comply with standards - but the stuff coming from Automattic is scary. I ended up in a position where I've become responsible for a very high volume WooCommerce/Wordpress store and the things that I've seen in _brand new code_ is mind boggling. Their new, branded, in-house paypal plugin/integration is currently at 1.5/5 rating on the wordpress plugin marketplace [0]. It just doesn't work for various reasons for various people. It's 2021, how do you screw up a payment gateway for wordpress when you _are_ wordpress? But wait, there's more. They already had PayPal integration, built into the core and already included in all WooCommerce installs. So what to do? Force disable the already existing, working-properly, integration and recommend their new plugin to be used. [1] This is hostile. If your woocommerce webhook delivery fails 3 times in a row, woocommerce will just turn off that webhook/stop delivering them. Silently. No option for any sort of alert to be sent/logged, no way to store/replay the missed webhooks. Just off. This is irresponsible. Our installation happens to have a lot of details that go into each line item on an order - which, in turn, turns into many rows of meta data. Woocommerce doesn't rely on dedicated tables for orders or related metadata, it's all stuffed into 'posts' and 'post_meta'. It doesn't scale well, terrible really. It's a large enough problem that LiquidWeb starting working on a fix for high volume sites that end up getting crushed with database/performance issues related to these tables/the way the order data is stored. [2][3] This was supposed to merged into the WooCommerce core but that seems to have stalled/fizzled. I was able to reduce response time on an API request to get_order() from 3-5s to 0.25s by adding an index to the meta table mentioned above. (The query wasn't using any index) This likely isn't the case for the vast majority of installations, or it doesn't matter because the databases are small enough. But things like this indicate to me that the test suite/benchmarking is seriously flawed - or they're not doing things like testing and benchmarking against real-world databases. Taking a look at various release notes the types of bugs seem to indicate to me there's not a lot of automated testing going on or that things are so convoluted/messy that it's become too complex. All in all, for the people behind the PHP workhorse (the hero we deserve...) it's all pretty scary. The code quality, quality control and just about everything leaves a poor taste in my mouth. I'm not a big "Team PHP" guy - I like the idea of using the right tool for the job and the scary thing is that Wordpress is the right tool for the job for a lot of people. (WooCommerce, these days, is basically never the right tool) This is a terrible look for PHP. Laravel/Symfony on the other hand... take my money. It's a pleasure. LiveWire, tailwind, oh my. There's still a place for Wordpress - it's not going anywhere... but it's got a long way to go before I'd say it's anywhere near ok. Let alone approaching latest standards (even despite it's supporting older versions of the language). Can we get first-party/first-option composer support? Why, again, is it another company driving Wordpress forward? [4] [0] https://wordpress.org/support/plugin/woocommerce-paypal-payments/reviews/ https://wordpress.org/support/plugin/woocommerce-paypal-paym... [1] https://developer.woocommerce.com/2021/07/12/developer-advisory-paypal-standard-will-be-hidden-on-new-installs/ https://developer.woocommerce.com/2021/07/12/developer-advis... [2] https://github.com/liquidweb/woocommerce-custom-orders-table https://github.com/liquidweb/woocommerce-custom-orders-table [3] https://stevegrunwell.com/speaking/woosesh-2019/ https://stevegrunwell.com/speaking/woosesh-2019/ [4] https://roots.io/ https://roots.io/
- JimmyRuska 5y agoPHP at its core is the best part. A whole bunch of optimized and well tested C functions that are typical of backend functionality. If you can do as little as possible in PHP and rely on the low level functions to stitch together what you need, deserialize and render data in the front end, use front-end templating, then PHP is insanely fast, practical language. The issues with PHP are usually when people build out giant frameworks in PHP, rather than using PHP as a higher level glue language for the built-in fast C functions.
- blowski 5y agoI've worked on _many_ PHP projects. Unless it's a small single-purpose script, if you tell me it doesn't use one of the standard frameworks, I'm going to assume it's an absolute unholy mess of spaghetti. Laravel and Symfony are both extremely good, and the only reason people don't use them tends to be out of misplaced arrogance. Unsurprisingly, they end up building their own awful framework, and at some point the project either dies or someone says "Erm, we should put this in Laravel". There are some people who've built great projects without these frameworks, and there are many projects in these frameworks that are terrible. But in terms of probabilities, you've got a much better chance of a project being well-built if it's in Symfony or Laravel.
- holoduke 5y agoI have seen plenty of PHP projects without any frameworks used. Big ones as well. One of these projects is automation for a complete manufacturer factory. Robot controllers, Serial hardware drivers written in PHP, Realtime application with PHP instances running for multiple years. No frameworks used at all. There is more than only webapps.
- blowski 5y agoI’m sceptical that’s a large proportion of PHP projects, and thus comes under my caveat of _some_ projects.
- Koffiepoeder 5y ago
- jeltz 5y agoI used PHP about two years ago and I was not impressed at all with the improvements. Yes, some of the issues had been fixed, but many of them remained. I cannot see any reason for using it over JS, Python or Ruby.
- krisrm 5y agoElegant is not the word I'd use to describe PHP. Solid, perhaps. Undoubtedly useful. But if there is elegant PHP, I haven't seen it.
- rhengles 5y agoThis depends a little on the taste of each person, but personally the most elegant way of doing PHP apps I ever found is with Siler: https://siler.leocavalcante.dev/v/main/ https://siler.leocavalcante.dev/v/main/ and Create Siler App: https://github.com/leocavalcante/create-siler-app https://github.com/leocavalcante/create-siler-app
- KerryJones 5y agoHave you looked at any Laravel code? As someone who has worked from small startups to FAANG and inbetween, Javascript to PHP to Python to Go, I haven't found anything more elegant.
- path411 5y agoI think most people outside php have no idea what Laravel is, while anyone working in php is using Laravel so basically our viewpoint is Laravel = php. I don't know what it is about the normal personality that anyone using something you don't understand just be "doing it wrong"
- sergiosgc 5y agoI have. Elegant it is not. Actually, it smells like Enterprise Java code, which made me flee from the Java ecosystem. To each his own, but this is not an elegant event listener (copied from the examples page): use App\Events\ArtistInformationFetched; use App\Services\MediaMetadataService; use Throwable; class DownloadArtistImage { private MediaMetadataService $mediaMetadataService; public function __construct(MediaMetadataService $mediaMetadataService) { $this->mediaMetadataService = $mediaMetadataService; } public function handle(ArtistInformationFetched $event): void { $info = $event->getInformation(); $artist = $event->getArtist(); $image = array_get($info, 'image'); if (!$artist->has_image && $image && ini_get('allow_url_fopen')) { try { $this->mediaMetadataService->downloadArtistImage($artist, $image); } catch (Throwable $e) { } } } } Source: https://laravelexamples.com/example/koel/events-listeners https://laravelexamples.com/example/koel/events-listeners
- 0x4d464d48 5y ago"Everyone laughing at PHP hasn't tried it for years, I'd bet." God I wish that was true... It's not that the language is necessarrily bad. It's the sludge of legacy code I've had to deal with and teams treating it as the hammer for every problem that they think they must treat as a nail. Efficency be damned.
- Gigachad 5y agoOne comment I heard at a programming meetup recently was "I hate how frameworks like laravel have brought PHP back in to popularity when we had the chance to finally kill it off". I do wonder if there really was value in salvaging PHP when we have a wealth of other languages and frameworks that do a perfectly fine job without any of the legacy mistakes sitting around.
- mschuster91 5y agoWhich ones would that have been? Perl? Python? Java? JavaScript? Among that choice set, PHP is definitely the best contender.
- Gigachad 5y agoI would say that Ruby on Rails is a pretty good candidate to completely replace PHP with.
- gremlinsinc 5y agodoes rails come with a generator to create a teams based multi tenant SaaS app with authorization and authentication and job queues without extra setup? (ie without decide and sidekick?)... can rails compete with the performance of octane using swoole with 8k reqs per sec? rails is the first framework I ever learned in 2012 but I kept jumping back and forth until laravel basically started lapping rails in terms of baked in goodies.
- Gigachad 5y agoI’m not sure why this really matters. You can set all of that up in rails in under an hour. And almost every company uses exactly the same libraries for it all. It’s been so long since I even created a rails app because it’s almost always already created when you start the job.
- nucleardog 5y agoI think you (and to be fair, many people) are missing a huge part of why PHP is still popular. Saying Ruby can replace PHP sounds to me like saying that Ruby can replace Excel. It's fundamentally misunderstanding _why_ it's popular in the first place. I have a HTML page. How do I add a hit counter to it with Ruby? I can do it right now in PHP with zero dependencies and it'll fit in this comment: <html><body> <p>You are visitor number: <?php $count = file_get_contents('hit_count.txt'); $count = $count + 1; file_put_contents('hit_count.txt', $count); echo $count; ?> </p> </body></html> Is it shit? Yep. Does it (mostly) work? Yep. When you want to do something, you can just copy and paste a handful of lines of PHP into a file and rename it from .html to .php and it'll basically work anywhere. You don't need to worry about frameworks or anything. Routing is handled by the web server. Hosting is handled by someone else. Deploying is just FTP'ing a .php file off to a server somewhere and then requesting it. But when you are ready to get into "real" programming, that's all there too. PHP has a true learning _curve_. Every bit of complexity is only a small step from the previous. Getting started does not require a ton of background or knowledge. You can start out copying and pasting some code into the middle of some HTML and a year later end up working within once of the nicer, more comprehensive frameworks managing your dependencies with a relatively decent package manager... and still hosting it all on your $3/mo shared hosting. If every professional developer stopped using PHP tomorrow, we'd still end up back exactly where we are as a bunch of people found PHP as the most accessible and direct solution to the problem they have.
- deleted 5y ago[deleted]
- faeyanpiraat 5y agoMulti core support is an issue I’ve tried conquering with php, but went down a rabbit hole of running JS on a GPU instead.
- emodendroket 5y agoI used Symfony and it was fine but there are some challenges: 1. The combination associative array/array data type is weird and I feel like the performance is not predictable unless you devote time to learning specifically about it 2. You're still stuck with all the weird legacy stuff, even if you don't use it, because someone else might bring it in 3. The OO stuff is basically like an old version of Java and a bit tedious to write. An IDE is definitely required 4. Many PHP developers formed their ideas about coding in the bad old days and will resist efforts to make code more testable or whatever because it's "too complicated."
- Supermancho 5y ago> The OO stuff is basically like an old version of Java and a bit tedious to write. An IDE is definitely required The OO 'stuff' in PHP is far better. Notably, Traits, Statics and Testing. Java (and JUnit) do not work well with static methods/classes, when it's unironically the most effective way to limit state. In PHP you can create a static class, that has static utility methods. Now you can ensure you have no side effects - unless accessing static properties somewhere, ofc. Then PHPUnit has no trouble helping you test these. It's a huge improvement over the acrobatics of booting up Spring to manage a singleton (which isn't the same thing as a static class) whenever you want access to those real static methods.
- emodendroket 5y agoI'm not sure what about Java is stopping you from making static classes.
- Supermancho 5y ago> I'm not sure what about Java is stopping you from making static classes. I didn't imply that you couldn't make a static class in Java. There are lots of ways to make something like a top level static class (nested static, Spring singletons, et al), which works against the explicitly stated purpose of limiting state involvement.
- chx 5y agohttps://betterprogramming.pub/a-look-at-the-new-php-8-1-fibers-feature-979489399918 https://betterprogramming.pub/a-look-at-the-new-php-8-1-fibe... and https://php.watch/versions/8.1/fibers https://php.watch/versions/8.1/fibers
- vegai_ 5y ago> It started clumsy, true, but it became a solid and quite elegant way of doing things. No. Just no. PHP will not be solid and elegant by evolution. It might have become an excellent tool for the area it's supposed to be used in, but the only way it could ever become elegant is if it had its python2=>python3 sort of moment. They would need to break it to fix it. I don't think they'll do that, since I think they understand that it doesn't matter at all that the language sucks.
- scoopertrooper 5y agoI don’t think breaking python2 did a lot to improve python 3.
- vegai_ 5y agoThat's probably because python2 wasn't that broken to begin with. But fixed character encodings was totally worth it. I think the only mistake they made was related to how long they kept supporting python2 -- but I'm sure there were good reasons for doing that.
- epiecs 5y agoNot intended as a plug but you can even use php for network automation. I cobbled this together: https://github.com/epiecs/phpmiko https://github.com/epiecs/phpmiko for connecting to devices and https://github.com/epiecs/mikodo https://github.com/epiecs/mikodo for inventories and concurrency The multi core coroutines comment is true but there are ways (to hack) around that. The way I solved concurrency is just by forking and using sockets: https://github.com/epiecs/mikodo/blob/6bdcebe9fa7f44ffdedd82218b525e27e46cd149/src/Mikodo.php#L189 https://github.com/epiecs/mikodo/blob/6bdcebe9fa7f44ffdedd82... I use it at work atm does what it's supposed to. I also use Python as well but I wanted to know if it could be done in php :D
- ChrisMarshallNY 5y agoI’ve been writing PHP since the 3-4.X days (over 20 years). I’ve written tens of thousands of lines of PHP, in several fairly large-scale server systems. I’ve never learned to like the language, but have gotten pretty proficient with it. I don’t claim to be a PHP maven, though. I know that my style is fairly “primitive.” I tend to use it for my backend work. It’s quite performant, has huge infrastructure support, and it’s entirely possible to write safe, high-quality, low-level systems in PHP. I’m a good engineer, and do a decent job; regardless of the tool I use. C++ is the same way. People have been hating on that language for even longer than they have, PHP. C++ is still used for many major infrastructure projects, though; because it’s the best language for that kind of thing. If you give a kid a chainsaw with the guard removed (as most arborists do), don’t be surprised, when the screaming starts.