По большому счету, у вас два вопроса:
Можно ли хранить несколько классов в одном файле?Namespaces and classes MUST follow an "autoloading" PSR: [PSR-0, PSR-4].
This means each class is in a file by itself, and is in a namespace of at least one level: a top-level vendor name.
PSR-1
Проблемы такой подход может вызвать только если вы начнете работать в команде, в которой принят какой-то другой стандарт. При наличии современных IDE нет никакой разницы в каком файле лежит класс и поэтому нет никаких причин не писать каждый класс в отдельный файл - так их будет проще читать и искать.
Можно ли вызывать один класс через другой$userLinks = User::getUserLinksObj()->findLinks($userId);
Если уж вы инкапсулируете, так инкапсулируйте так, чтобы было удобно пользоваться:
$userLinks = User::findLinks($userId);
Но в таком случае почему бы не написать сразу нормально?
$userLinks = UserLinks::findForUser($userId);
Зачем такая сильная связь между классами? У каждого класса - своя зона ответственности.