2011-05-18 23 views
9

Si tiene dos clases que extienden la misma clase base, y necesita hacer que una de ellas anule una función para tomar un parámetro adicional. ¿Está bien pasar siempre el parámetro adicional al llamar a la función en cualquiera de las clases?¿Puede pasar más parámetros de los que espera una función?

Un poco de pseudo-código para ayudar a demostrar ...

Si tenemos las 3 clases y funciones

  • foo :: doSomething()
  • foo_subclass_one :: doSomething()
  • foo_subclass_two :: doSomething ($ entrada)

Y tengo una instancia de uno de estos tres, puedo cal l $ instance.doSomething ($ input)

Creo que lo que pasa es que foo y foo_subclass_one simplemente ignorarían el parámetro adicional y foo_subclass_two lo usaría. ¿Es esto correcto? ¿Hay una mejor manera de hacerlo si tengo muchas subclases y realmente quiero evitar tocar más de 10 archivos?

Gracias!

Respuesta

4

Hay dos maneras de hacer esto:

ampliar los métodos para utilizar los parámetros por defecto:

public function doSomething($input=null) {} 

Tenga en cuenta que tendrá que hacer esto para todos los casos, incluso si no se usa

En este caso, es posible que desee utilizar la gama de argumentos del método:

public function doSomething() { 
    $args = func_get_args(); 
    if (isset($args[0])) { $this->doSomethingElse(); 
} 
Cuestiones relacionadas