I have the interface:
interface AbstractMapper
{
public function objectToArray(ActiveRecordBase $object);
}
And classes:
class ActiveRecordBase
{
...
}
class Product extends ActiveRecordBase
{
...
}
========
But I can't do this:
interface ExactMapper implements AbstractMapper
{
public function objectToArray(Product $object);
}
or this:
interface ExactMapper extends AbstractMapper
{
public function objectToArray(Product $object);
}
I've got the error "declaration must be compatible"
Is there a way to do this in PHP?
No, an interface must be implemented exactly. If you restrict the implementation to a more specific subclass, it's not the same interface/signature. PHP doesn't have generics or similar mechanisms.
You can always manually check in code, of course:
if (!($object instanceof Product)) {
throw new InvalidArgumentException;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With