this post was submitted on 29 Jan 2025
35 points (85.7% liked)
Programming
17984 readers
113 users here now
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Rules
- Follow the programming.dev instance rules
- Keep content related to programming in some way
- If you're posting long videos try to add in some form of tldr for those who don't want to watch videos
Wormhole
Follow the wormhole through a path of communities !webdev@programming.dev
founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
As someone who has written a lot of PHP professionally over the last ~13 years (and a fair bit of other languages - JS, Rust, C++, Python ... I try to reach for whatever solution fits the problem) I feel your frustration with some things but wanted to point out that some of those things that have changed heavily in just the last 4-5 years. Apologies in advance for the wall of text, lol:
That's still pretty valid. XDebug is still utter garbage to work with in my opinion. I wish it were better. That said, I haven't tried actually using it in several years so it could be better and I just don't know about it.
Zend hasn't really been industry-relevant in some 12-13 years, and yeah ... it was super rough. I basically hated every line of Zend code I ever wrote.
That said... the same kind of thing is true for a lot of languages. To use Python sensibly (for web, anyway...) you have to learn Flask or Django. To use Rust sensibly you have to learn Actix, Warp, Axum, or Tide. To use JS sensibly, you have to learn React or Vue or Svelte or Alpine or any of the thousand frameworks that come out for it daily.
For PHP the big ones are Laravel, Symfony (Laravel uses a fair bit of it under the hood), CodeIgniter, and CakePHP.
The most popular framework over the last decade or so is Laravel, and it's also my favorite. So I'm assuming that's the one you mean. And... yeah, even modern PHP wouldn't really be worth writing without it in my opinion. It focuses hugely on developer experience, greasing the wheels in huge ways and eliminating loads of boilerplate both in-app and in its tooling. It is SO SO SO SO SO MUCH BETTER than the others in my personal opinion. Genuinely transformative to the PHP experience, tries to make things as frustration-free as it can.
There are of course many rather valid criticisms of it - Mostly around how being "batteries included" means it's rather opinionated. Using Laravel means you either do things the Laravel way or you struggle... but with how much it simplifies, it winds up being worth learning to do things the Laravel way in my experience.
For raw PHP in general ... yeah. again, I agree. Yet again though, that's also true for lots of other languages (explain a segfault to a C++ beginner), and thankfully Laravel includes a very detailed and helpful stack trace and debugging page - Any thrown exception will result in a page like this with an interactive stack trace:
I think Symfony, CodeIgniter, and CakePHP all include something similar these days.
Patterns are a preference thing, I realize it's not for everyone. I don't generally use dependency injection
Modern PHP is actually typed! It doesn't require that you use types, but you can absolutely specify types for variables, class attributes, function parameters, return values... And an exception will be thrown if something tries to use an incorrect type. It is still dynamically typed, so it's done at runtime. Which kinda bites sometimes. However, there are static analysis tools like PHPStan that do a great job of helping avoid typing-related issues.
It's not a perfect typing system but since sometime around PHP ~7.2 it became fairly nice to typehint basically everywhere and it's only continued to mature and get better over time - It's missing some things of course (I want generics!), but it's way better than the nightmare that was PHP 5 and older.
Yeah this is another thing that is a "vanilla PHP issue" that Laravel solves quite will imho - Through a very batteries-included package called
sail
. For most Laravel projects, it's a one-time 10-minute setup/configuration process for the developer, which should become a single command for other devs. And even then all it does is setup a bunch of sane defaults for runningdocker compose up
, along with a bunch of shortcuts for running commands within the containers. Just today, I lent a coworker a hand with a project they had already set up to run via sail, and it wasand I had a working setup as soon as the containers were ready.
Sorry, I didn't initially set out to write this as a love letter to Laravel, but I noticed your frustration appeared to be (largely) related to older versions of PHP and thought I'd mention that things have changed loads in the past few years. And then basically any time I'm doing something in PHP I use Laravel because I like it; And I work in PHP a lot because I work for a mostly-PHP shop. That said, even when I'm working in other languages, I often find myself wishing I had features from Laravel. Stuff like collections, Eloquent, storage disks, pipelines... It's a long list.
Thank you for typing all that out. PHP seems to have come a long way (or at least thanks to Laravel). Probably the reason I still encounter projects without Laravel are because there are many old and established PHP projects out there from before whenever it became popular. Probably switching to a new framework is too much work for them (quite understandable), but they have unfortunately majorly tainted my PHP experience.
I'm glad you're enjoying PHP and have given me another perspective on the subject.
Anti Commercial-AI license