I'm trying to specify two interfaces for class A that returns instances of class B, and for class B itself.
I'm declaring return types on the interface.
Say I've got two interfaces.
Some kind of RepositoryInterface, that has a get()
method that returns an object implementing the ElementInterface
<?php
namespace AppContracts;
interface RepositoryInterface {
public function get( $key ) : ElementInterface;
}
And an element interface:
<?php
namespace AppContracts;
interface ElementInterface { }
Now, my implementation of the repository declares a return-type that is a specific class MyElement
.
<?php
namespace AppRepositories;
class MyRepository implements RepositoryInterface {
public function get( $key ) : MyElement {
// ...
}
}
Where MyElement
is some class implementing ElementInterface
.
... this results in a fatal error:
Declaration of MyRepository::get( $key ): MyElement must be compatible with RepositoryInterface::get( $key ): ElementInterface
If I would not specify the return types on the interface, this would work perfectly fine. Yet, I want to constrain the type of class returned by any class implementing the RepositoryInterface
.
- Is it true that this is not possible in PHP 7.1?
- If this is indeed not possible, is that because my pattern is incorrect?
- How could I declare the return type of my interface methods without specifying an actual implementation of this type.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…