I'd like to create an interface for entities that are CRUDable (can be saved and deleted). Here is my abstract class:
abstract class AbstractCrudableEntity extends AbstractEntity
{
abstract public function doSave();
abstract public function doDelete();
}
My implementing class needs a couple extra parameters to those methods. Here is the signature of the implementing class:
class Contact extends AbstractCrudableEntity {
public function doSave(User $user, \UberClientManager $manager);
public function doDelete(User $user, \UberClientManager $manager);
}
I understand that PHP requires that implementing classes have the same parameters for the methods as the parent class (there are several questions that answer this question: this, for example). So that is not the problem.
However, I recently came across some code in Symfony dealing with authentication tokens. The class UsernamePasswordToken
extends AbstractToken
, and has a different set of parameters in the __construct()
method: AbstractToken::__construct()
versus UsernamePasswordToken::__construct()
.
My question is how is Symfony able to do this? What is the difference between this and my code?
Overriding constructors is a special case:
Unlike with other methods, PHP will not generate an
E_STRICT
level error message when__construct()
is overridden with different parameters than the parent__construct()
method has.
You can not do that with other methods.
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