Класс работы полей классов и методов в php

Я пытаюсь назначить функцию как значение свойства. Я написал следующий код:

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. 

Вопрос: Как я могу вызвать функцию, назначенную полю?

Solutions Collecting From Web of "Класс работы полей классов и методов в php"

После назначения функции свойству объект имеет метод с именем changeName и свойство с именем changeName . Что это значит ->changeName() ? Это ($testCls->changeName)() или ($testCls->changeName()) ? Ответ заключается в том, что существующий метод побеждает. Вы не можете перезаписать или заменить метод таким образом.

Вы можете вызвать функцию свойства следующим образом:

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

Однако это вызовет эту ошибку:

 Fatal error: Using $this when not in object context 

Поскольку $this внутри анонимной функции, которую вы назначили, не относится к $testCls , это ничего не значит, поскольку в области, где была определена функция, нет $this .

Другими словами, это не будет работать так, как вы этого хотите.