No metes ninguna clase adentro de un metodo, sino dices que el "tipo de dato" que recibe ese metodo es una instancia de una clase en particular.
Por ejemplo.......
Código PHP:
Ver originalClass Pregunta
{
// ..
}
Class Cuestionario
{
private $preguntas = array();
function addPregunta(Pregunta $p)
{
$this->preguntas[] = $p;
}
}
Entiendes la ventaja de decir que solo ese metodo debe aceptar solo preguntas y no naranjas o pelotas de basquet ?
En PHP es una ventaja pero en lenguajes compilados es obligacion declarar variables inclusive en los parametros de las funciones porque el compilador necesita esa informacion para generar el "ejecutable" (o un bytecode en el caso de Java)