è un'assurdità tutta di PHP, e l'argomento l'ho affrontato personalmente mesi fa, senza risultati.
La differenza con Java è che questo supporta overload dei metodi, mentre PHP no, ergo mentre in Java puoi utilizzare quel metodo come reale metodo di istanza, in PHP non puoi farlo e ti ritrovi ad usare un metodo statico che non può ne contenere un riferimento $this, ne essere overloadato.
codice:
class String {
protected $_value;
public function __construct($_value){
$this->_value = $_value;
}
static public function show(String $instance){
echo $instance->_value;
}
}
// non senso
$s = new String("hello");
$s->show($s);
// nel mondo Java puoi aggiungere questo
...
public function show(){
echo $this->_value;
}
...
Nel mondo Java puoi usare $s->show(); invece di dover passare l'istanza stessa ad un metodo statico che non accetta $this al suo interno.
Java nasce Object Oriented, PHP non ha mai capito cosa significhino quelle due lettere ... sta provando a farlo solo negli ultimi mesi, ma sarà ancora semi buio nella versione 6 se non si danno una svegliata