У меня такое ощущение, что вам нужен шаблон Factory: объект (или функция), который создает объекты разных типов в зависимости от своих аргументов.
Поскольку то, что вы действительно делаете при определении другого набора методов, в зависимости от пользователя, - это создание объектов другого типа: объект AuthenticatedUser
против NonAuthenticatedUser
.
Использование конструктора ClassX для этого действительно не очень хороший подход.
class User { // with common methods
}
class ValidUser extends User {
function onlyForValid() {}
}
class InvalidUser extends User {
function onlyForInvalid() {}
}
function createObject( $id ){
if( isValidUser( $id ) ) return new ValidUser( $id );
else return new InvalidUser( $id );
}