I assume you are getting the class name and argument list at runtime (from user input, db, or whatever).
In that case ednark's suggestion only covers half the problem (dynamic class name, but still a fixed argument list).
I think combining ednark's technique with your own suggestion buried in your question would work. Define every class with a single arguement that is an array. Create the object like this (I have no clue if this will actually work, but it should!):
$class = 'Foo'
$instance = new $class( func_num_args());