On Tue, Jul 11, 2023, at 2:04 PM, Robert Landers wrote:
>> Not exactly, How you wanna solve by abstract class two interfaces
>> which can be implemented using let's say two traits - let's say
>>
>> interface Foo {
>> public function foo(): string;
>> }
>> trait HasFoo {
>> public function foo(): string { return 'foo'; }
>> }
>> interface Bar {
>> public function bar(): bool;
>> }
>> traitHasBar {
>> public function bar(): bool { return true; }
>> }
>>
>> Now I can need to implement Foo or Bar separately or together.
>> Using abstract class that would require 3 abstract classes: Foo, Bar, and
>> FooWithBar.
>> With this RFC that would require just two interfaces with default methods.
>
> This seems like a software design issue, not a language issue...
>
> But 3 abstract classes vs. 2 interfaces + 2 traits seems like a better
> tradeoff if you're going to need the coupling anyway. It's more
> obvious that you want/require FooWithBar when you want it. If you're
> expecting these exact implementations, moving them to the interface
> makes it even more confusing.
>
> I want FooWithBar (iow, I want these exact implementations)
>
> I want Foo&Bar (iow, I don't care about the implementation)
>
> You can pass a FooWithBar to Foo&Bar, but you can't pass a Foo&Bar to
> a FooWithBar.
>
> If the default implementation is on the interface ... who knows what
> you have, you'll have to check you /vendor folder.
You have to check your vendor folder for an interface, or trait, or abstract
class. That doesn't change anything.
As noted, now consider a Baz interface. For interface-and-trait, you add 2
more definitions. For interface-with-defaults, you add 1. For abstract
classes, you need to add 4: BazBase, FooBazBase, BarBazBase, and FooBarBazBase.
And that's assuming you're even in control of the base classes; you may not
even be able to create all those combinations without lots of copy-pasta.
Abstract classes are basically vestigial since PHP 5.4, and have no use cases:
https://www.garfieldtech.com/blog/beyond-abstract
--Larry Garfield
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php