Suppose you are building a web application that is going to be a packaged product one day, one that users will want to be able to extend and customize.
It comes with
I'd go with using the constructor of the core class to determine the user class to load, and then implement a factory method in the core class to generate instances of the user class. By making the constructor of the user class protected, and having the user class extend the core class you can be sure that code elsewhere cannot instantiate the user class.
C.