class prueba { function test(Alan $alan, Book $book, array $array) { echo "metodo de prueba clase prueba"; } } function test(Alan $alan, Book $book, array $array) { echo "metodo de prueba normal"; } class Alan { } class Book { } $array = array(1, 2, 3, 4, 5); $prueba = new Prueba(); $alan = new Alan(); $book = new Book(); $prueba->test($alan, $book, (array) "stringPrueba"); echo "<br/>"; test($alan, $book, $array); //casos //1. se mandaron los parametros especificados => se tuvo los resultados esperados //2. no se mando el array => te tira un catchable fatal error el argumento 3 debe de ser de tipo array //3. se mandaron 2 books en vez de un 1 alan => catchable error argument debe de ser de tipo Alan //4. se mando una cadena en vez de un arreglo => catchable error argument debe ser un array. //5. se mando una cadena en vez de un arreglo pero se casteo a array => todo funciona normal