vertrigo, es facil de entender mira
cuando tu haces $obj=
new Objeto(); estas creando una instancia de la clase y en ella
$this es la referencia del mismo dentro del objeto, ademas necesariamente para usar new vas a necesitar la funcion constructora ya sea utilizando __construct() o el mismo nombre de la calse en una funcion, ahora si tu usas
$obj=Objeto::algunMetodo(); ahora no estas creando ninguna instancia, es como si el Objeto::algunMetodo() fuera una simple funcion, y como no se creo la isntancia dentro del objeto no existe
$this y la unica forma de moverse dentro es usando
self o el mismo nombre de la
clase Código PHP:
class A {
public unavariable='';
public function __construct(){$this->unavariable='inicializado en constructor';}
public static function algunMetodo(){self::$unavariable='inicializado en algunmetodo';}
public function mostrarDatos(){echo (isset($this))?$this->unavariable:self::$unavariable;}
}
entonces si tu haces
$o=new A(); //crea instancia y asigna valor
$o->mostrarDatos(); // imprime incializado en constructor
pero si tu haces
A::algunMetodo(); //asigna el valor
A::mostrarDatos(); //imprime inicializado en algunmetodo
espero se entienda un poco mejor
saludos