Den 2023-04-08 kl. 20:36, skrev Stephan Soller:
Hello,

I'm sorry if this isn't the correct mailing list for that discussion but I
couldn't find a more appropriate one where people actually know how the wind is
blowing.

A few days ago I migrated a project from PHP 7.1 to 8.2 and the amount of
deprecations and fatal errors spooked me a bit (details below if you're
interested). That got me wondering about the long-term stability of PHP (as in language and API breaks) and I looked at the RFCs. I got the impression that static typing has a lot of traction now and I have no idea of what the fallout might be of changing a dynamically typed language into a statically typed one.
Also API breaks seem to become more frequent (e.g. utf8_decode). I stumbled
across the language evolution RFC proposals but it seems that approach was
abandoned.

Is there a way to tell which APIs and language features will be stable and which might get changed or removed in the future? That way I could restrict myself to a stable subset for long-running projects (5 to 10 years). But I realize that such guarantees are difficult (or contra productive) when a language is in flux
and I can understand if no one wants to do something like that.

Some of my projects run for 5 to 10 years, in one case even 20 years. Usually without or with very little code changes. My usual tool set for web projects like that is plain PHP, HTML, CSS and JS. Everything without any frameworks or unnecessary libraries and kept as simple as possible. If possible I just use builtin and stable APIs and usually end up without any or with just one or two dependencies (e.g. PDF generation). This isn't pretty and I end up trading a bit
of productivity for long-term stability. I know this is quite an unusual
approach, especially in todays web development world. But I've been developing stuff for over 20 years and in most cases I have to maintain my own code (my first PHP project was about 20 years ago). Without that somewhat unusual focus on stability I would spend my whole time updating existing code and couldn't get
anything new done. And let's face it, in most situations you don't need the
perfect tool, just something that gets the job done reliably (e.g. sending a query to a database and process the result). So I guess that is my usecase for PHP: A stable base for long-lasting and very low maintenance server-side code.
The recent migration made me question that assumption, though.

Is this still something that makes sense in your opinion or would you recommend
to avoid using PHP for that?

A project like PHP is the result of a lot of work from many different people and
people, opinions and priorities change over time. The direction of PHP is
determined by those who work on it and that's a good thing. I just want to avoid
using the wrong tool for the job as this can quickly spiral into a lot of
unnecessary complexity and (in a somewhat best case) end in a rewrite a few
years later to stop the spiral.

I routinely rely on PHP features that are not often talked about (read on sexy or fashionable) to greatly simplify my code: The alternate syntax for control structures as a lightweight template system, implicit type conversions, streams, SimpleXML, a DOM parser that can actually parse real-world HTML, PDOs and so on. PHP has a lot of small nuggets that make it a pretty useful toolbox if you don't overdo it. But did I overdo it? What I didn't realize before was the extend to which I relied on the stability of APIs and core extensions listed in the PHP manual. What will end up on the chopping block in the next few years? Can I rely on the alternate syntax for control structures? Will streams go since HTTP 2 and
3 made a mess of the whole HTTP protocol? I'm note sure how to evaluate the
current situation. Hence the post.

Migration details for those who're interested:

I had PHP pegged as a dynamic language at it's core so I've used techniques like
duck typing and dynamic properties here and there when they were the best
compromise for simplicity and code locality.  This is nothing you would use in large or inexperienced teams but for a lot of small stuff this can keep code simple (it it doesn't amount to more than a few hundred lines). Sometimes I let projects grow organically like that over a few years until we consolidate parts
that became to complex once the usecases became clear. Unfortunately this
backfired on me during a recent migration. The amount of deprications and out
right fatal errors caught me off guard. Dynamically extending objects got
deprecated in PHP 8 except for stdClass and the AllowDynamicProperties attribute
which sounds reasonable. Unfortunately I ran right into the corner case of
attaching dynamic properties to a Generator which caused a fatal error. The rest of the code then used duck typing to work with those properties (basically just isset() checks that use the additional information if its available). In the end
I found a solution using an anonymous class that implements the Iterator
interface. But this is different between PHP 7 and 8 (because of the mixed type) so I had to implement my first version switch in PHP… which felt quite weird. I usually only have to do that in C to support corner cases for quirky compilers.
So this spooked me quite a bit.

Sorry for the long wall of text.

Happy programming
Stephan

Hi,

My 50c and a bit casual reflection on that is:
- When we upgraded a PHP 5.2 codebase to first 5.6 and later to 7.0 it was a breeze. Also the open source libraries that we used was straight forward to migrate. - Now when going from 7.4 that we still use today to 8.x it was a longer process also because we need to wait out the open source libraries to migrate. Today we just need to gather ourselves and do the effort, so our codebase is ready for 8.x migration. - The the PHP 7.x release has really provided a tremendous value in terms of new features, which also the 8.x serie does, but the deprecations are more cumbersome.

So I think there is a need here to:
- Not just look at deprecations on one release, but one should instead look at them for a complete release cycle for all 8.x releases and say at some point that the deprecation quota is filled up, i.e. no more deprecations for 8.x. - And when piling up these deprecations that will hit harder in 9.0 one have to take into account what added value will 9.0 bring. There has been some old RFC's that was rejected and maybe these can be brought to life again for 9.0 to bring added value besides completely new features. E.g. one of my favourites was the Pipe operator RFC.

Regards //Björn L

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to