| ▲ | 9dev a day ago |
| Let me convince you! :-) There are match expressions and arrow functions: $slug = $title
|> trim(...)
|> (fn($str) => str_replace(' ', '-', $str))
|> (fn($str) => str_replace('.', '', $str))
|> strtolower(...);
There is meta-programming with annotations: final class PostsController
{
#[AccessControl(fn(Request $request, Post $post)
=> $request->user === $post->getAuthor()
)]
public function update(Request $request, Post $post): Response {
// ...
}
}
Native (and optionally value-backed) enums: enum Status
{
case Draft;
case Published;
case Archived;
}
Proper class property hooks, fully replacing getters and setters: class Data
{
public string $fullName {
get => "{$this->firstName} {$this->lastName}";
set(string $value) {
[$first, $last] = explode(' ', $value);
$this->firstName = $first;
$this->lastName = $last;
}
}
}
And tons of other features—among them asymmetric property visibility, fibres/green threads, DNF types, lazy object instantiation, an ever-improving yet fully opt-in static type system with runtime validation, a JIT compiler, an amazing package ecosystem and -manager, annotation-backed deprecation, and more. |
|
| ▲ | jorams a day ago | parent | next [-] |
| > There is meta-programming with annotations: There is, but your example is not valid. You can't use short function syntax in constant expressions, it has to be an explicit `static function`. The reason for this, IIRC (I can't find the GitHub issue or PR atm) is that these functions aren't allowed to close over any variables, and with fn syntax doing so is implicit. Rather than erroring they've disallowed the use of arrow functions entirely. |
| |
| ▲ | 9dev a day ago | parent [-] | | You’re right, of course. Still I think the point stands that PHP has very powerful runtime metaprogramming features that you can build amazing abstractions on top of. |
|
|
| ▲ | IshKebab a day ago | parent | prev | next [-] |
| The issue isn't that they haven't added a load of modern features; it's that they never fixed the old janky broken features. |
| |
| ▲ | marysol5 a day ago | parent [-] | | Reminds me that in the PHP5 days, there's a load of similar functions of which the parameters switch around... | | |
| ▲ | 9dev a day ago | parent [-] | | Shame I forgot to add named arguments above, eliminating this problem too: array_map(callback: fn($i) => $i * 2, array: [10])
|
|
|
|
| ▲ | cute_boi a day ago | parent | prev [-] |
| Looks like PHP is trying to act like Elixir. And all these are very new thing which we can't implement in wordpress because you have to care about backward compatibility. |
| |
| ▲ | 9dev 21 hours ago | parent [-] | | These "very new things" have, in part, been available for more than 6 years now. Not to speak of all the other PHP features WordPress chose to forgo, like PDO with prepared statements (which completely eliminates SQL injections), which came out 21 freakin' years ago. There are many very successful and professional PHP projects with millions of users that seem to be able to migrate to newer PHP versions just fine. Whatever the WordPress developers are claiming are the reasons for their irresponsible codebase and their inability to improve it is nobody's fault but their own. |
|