Re: RFC [Concept] - Interface Properties

From: Date: Sat, 27 May 2023 20:43:59 +0000
Subject: Re: RFC [Concept] - Interface Properties
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-120407@lists.php.net to get a copy of this message
> I wouldn't support this, personally. The reason interfaces in most > languages which have this concept don't support defining properties is > first because they are generally seen as an implementation detail rather > than a promise about supported behaviour and second because interfaces are > essentially an alternative to multiple inheritance. At the point you're > mandating fields as well as method signatures, you're barely one step away > from an abstract class anyway. If you still want to combine interfaces with > shared properties or default implementations, we already have traits for > that purpose. In PHP, two interfaces which define the same method signature > can be implemented by the same class, which is at least a little bit iffy > in itself. It becomes even more problematic if multiple interfaces can > define the same property, because you now don't really know > what, conceptually, that property refers to. I’m no contributor so far but I’ll get there. I must say I’m very excited about this, and I hope, me elaborating on how It would make my life much better, would change your mind. I’m software architect of a team, and we are working on a product configuration. It has an SDK too and the service right now maintains 2 versions - to be precise v2 and v3. Now, to not couple the created service classes to the data transfer objects of a certain version, and to make them reusable through multiple versions, in every endpoint the first thing we do is, that we map them into classes that are not tied to a version. Creating the getters leads to enormous amount of boilerplate code. The properties are public and readonly no point for getters even. Abstract class could help this but it’s like using a tube wrench for a nut. Also one class can extend only one abstract class. By simply defining interfaces with properties would save a lot of boilerplate code and there would be no need for all the transferring from class A to class B with exactly the same properties. > For the reasons I've said, I'm not loving the interface part of the > property hooks RFC either, to be honest, though I do support the broad > feature. I can appreciate that when an interface is used with the hooks, > it's more akin to saying an interface is defining setSomething() and > getSomething() methods rather than defining a property directly - but it > feels like it will encourage writing interfaces which break encapsulation. Why would it be a break of encapsulation? Having the getSomething and setSomething methods or the hooks are essentially the same as if just we have have the public property there. Just less code will be written. Zoltán

« previous php.internals (#120407) next »