Principios de funcionamiento de los campos de clase y métodos en php

Intento asignar una función como valor de propiedad. He escrito el siguiente código:

class TestClass{ private $name; public function __construct($name){ $this->$name=$name; } public function changeName($name){ $this->name=$name; } public function displayName(){ echo $this->name; } } $testCls= new TestClass('Dmitry Fucintv'); $testCls->changeName=function($name){ $this->name='Other name'; }; $testCls->changeName('Some name'); $testCls->displayName();//Display 'Some name', but I'm expected that 'Other name' will be displayed. 

Pregunta: ¿Cómo puedo invocar una función que está asignada a un campo?

Después de asignar la función a la propiedad, el objeto tiene un método llamado changeName y una propiedad llamada changeName . ¿A qué se refiere ->changeName() ? ¿Es ($testCls->changeName)() o ($testCls->changeName()) ? La respuesta es que el método existente gana. No puede sobrescribir o reemplazar un método de esta manera.

Puede llamar a la función de propiedad de esta manera:

 call_user_func($testCls->changeName, 'Some name'); 

Sin embargo, esto arrojará este error:

 Fatal error: Using $this when not in object context 

Como $this dentro de la función anónima que asignó no se refiere a $testCls , no hace referencia a nada, ya que no hay $this en el scope donde se definió la función.

En otras palabras, esto no funcionará en la forma en que lo desee.