I'm trying to assign a function as a property value. I've written the following code:
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.
Question: How can I invoke a function which is assigned to a field?
After assigning the function to the property, the object has a method called
changeName
and a property calledchangeName
. Which then does->changeName()
refer to? Is it($testCls->changeName)()
or($testCls->changeName())
? The answer is that the existing method wins out. You cannot overwrite or replace a method this way.You can call the property function like this:
However, this will throw this error:
Because
$this
inside the anonymous function you assigned does not refer to$testCls
, it refers to nothing, since there is no$this
in the scope where the function was defined.In other words, this won't work at all the way you want it to.