@aristotele If an object can’t be paused then yes, you want to throw an exception when trying to call pause() on that object. If you want to re-use an existing isPausable() method to check this, then that would be fine:
public function pause()
{
if (! $this->isPausable()) {
throw new NotPausableException();
}
// Mark object as paused here...
}
You don’t want to push that check to the caller, because if they forget to first call isPausable() then that’s going against your business logic and leave your application in a state you don‘t want it in (an object has been paused when it shouldn’t have been possible to).