Comments (6)
Yeah, interfaces are not supported yet. I will probably add support as soon as I have a use case for them. If you want to contribute, I am open to reviewing and aiding in the implementation of this feature.
from sailor.
Hmm. So what if we add methods to generated classes that represent Object types and let them implement interfaces representing Interface types for shared fields?
from sailor.
The generated result objects allow access to fields in the form of properties. I think this is more elegant than methods because:
- it allows null-safe access with
??
(this will be less imporant with PHP 8 null safe method calls?->
) - no need to type an extra set of parantheses
- easy setup of mocked results for test by just setting the properties
That said, interfaces without methods still provide value:
- while they cannot define properties, they can indeed define virtual properties via
@property
. We will have to check how this interacts when the implementing object type narrows a field type, e.g. changing it to be non-nullable - it can be used as a strong type hint
from sailor.
I see the PR, just few notes on those interfaces.
easy setup of mocked results for test by just setting the properties
methods would read properties so the same applies, no?
it allows null-safe access with
??
method calls do so? or I don't understand
Implemented interfaces only with properties seem a bit dirty as it is not how the language was designed
from sailor.
Given this code:
class Foo {
public ?Foo $bar;
function bar(): ?Foo { return null; }
}
$foo = new Foo;
The following will work without error:
$foo->bar->bar ?? null;
This will throw with Fatal error: Uncaught Error: Call to undefined function bar()
:
$foo->bar()->bar() ?? null;
PHP 8 would allow to do it safely and succintly, but even then properties are more terse:
$foo->bar()?->bar();
from sailor.
Ah ok I see what you meant by that. I go with PHP 8 everywhere.
from sailor.
Related Issues (20)
- Compatibility with PHP 8.3 and Symfony 7.0 HOT 1
- Add filename when validator return exception HOT 4
- guzzle/guzzle dependency issue HOT 1
- Support unions
- Enhance functionality of value objects HOT 1
- GraphQL custom scalar types should be type hint `mixed` in PHP HOT 2
- Custom scalar type not convert type when use it as an argument HOT 3
- Handle Exception that isClientSafe() HOT 1
- Allow to introspect but not generate classes HOT 7
- ObjectLike properties array causing Errors for missing array keys HOT 1
- Generate class from schema.graphql HOT 2
- postgresql float8 is handle by Scalar_converter and return excetion HOT 1
- Fire events HOT 1
- Minify query strings
- Keywords as field or type names HOT 1
- [Support] - date range HOT 4
- Support operations with client directives HOT 3
- nette/php-generator should be in require-dev HOT 6
- Guzzle getBody with dynamic clients throws error HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sailor.