Я пытаюсь назначить функцию как значение свойства. Я написал следующий код:
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.
Вопрос: Как я могу вызвать функцию, назначенную полю?
После назначения функции свойству объект имеет метод с именем 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
.
Другими словами, это не будет работать так, как вы этого хотите.