$ this en php está vinculado dinámicamente, ¿verdad?

Me aparece un error que creo que es porque cometí algún error en una refactorización, pero no puedo encontrar documentación sobre cuándo $this está vinculado, y mi error podría explicarse por estar limitado de forma estática.

Puntos extra (realmente no puedo darte puntos extra) por enlaces a documentación excelente sobre este tipo de cosas en php.

[Editar] El error que obtengo es decirme que Subclass::$var no existe cuando lo hago, por ejemplo, echo $this->var en una superclase. Sin embargo, el $var existe en la subclase.

Esto funciona en PHP:

 class A { public function foo() { echo $this->bar; } } class B extends A { public $bar = 1; } $b = new B; $b->foo(); // 1 

Funciona debido a la resolución de scope dynamic que PHP tiene (es decir: el scope se resuelve en tiempo de ejecución en lugar de comstackr). Sin embargo, recomendaría no hacerlo, porque es una particularidad del lenguaje para uno. En segundo lugar, si no se declara $bar en una subclase, se produciría un error. Creo que una clase solo debe hacer referencia a los miembros de los que tenga conocimiento.

El mismo código, digamos en C ++:

 class A { public: void foo() { std::cout << bar; } }; class B : public A { public: int bar; B() { bar = 1; } }; 

... le daría un error de comstackción ( In A :: foo (): 'bar' no se declaró en este ámbito ).

$this estará disponible después de haber llamado al constructor. Lógicamente, no puede usar $this en una función static .

Además de llamar $this en una función static , no hay mucho que pueda ir mal en cuanto al tiempo ya que simplemente no hay forma de hacerlo en PHP.

¿Cuál es exactamente el error que está recibiendo? El código también sería útil.

Sí, $this está vinculado dinámicamente, como se evidencia por el hecho de que el resultado de lo siguiente es “foo”:

 subvar; } } class Sub extends Base { public $subvar; public function __construct(){ $this->subvar = 'foo'; $this->ecc(); } } new Sub(); ?>