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?
 
     
     
    