Hola Rubén,
no se puede hacer esto en PHP. La sintaxis del lenguaqje permite que se omitan parámetros asignándoles un valor por default, pero esto implica la restricción de que los parámetros opcionales tengan que usarse de izquierda a derecha (y no al revés).
Sin embargo, la sobrecarga es algo que ningún lenguaje de Objetos puro implementa, porque no hace falta (es un invento de la implementación de C++ que se hizo para ser usado por gente que hace programación estructurada). Tu situación tiene una simple solución de diseño:
class Array {
public $index = null;
function add($value) {
// Por ejemplo añade algo a un array en la posicion $index si este no es null
...
$this->index=null;
}
}
// El funcionamiento sería
$array = new Array();
$array->add("Hola");
$array->index = 1;
$array->add("Mundo");
$array->add("Hola", "Mundo");
Tal vez te suene un poco raro si usaste siempre lenguajes híbridos, pero es perfectamente usable y la semántica es más de Objetos, ya que tu semántica era más bien encapsular una función adentro de una clase. Fijate que ejemplo además pone a null
el atributo al final, con lo que el método simpre tendrá el comportamiento por default a cada nueva llamada.
Queda mejor todavía definiendo $index
privada y accediéndola por unos setters y getters, con lo que podrías validar en el setter que siempre sea un valor entero, etc.
Saludos cordiales!