我有一个存储PHP方法的数组(类属性)(即类' Closure')。就像这样。
$this->methods[$name]=$action;
$action
就是这个功能。
当我尝试调用像$this->methods[$name]()
这样的函数时,我无法访问函数内的$this
指针。
为什么会出现此问题以及如何解决此问题。
答案 0 :(得分:-1)
你应该看看"魔术方法"。 http://php.net/manual/en/language.oop5.overloading.php#object.call
也许你可以试试这个实现(未经测试):
class MyClass
{
public function __call($method_name, $arguments)
{
// $method_name is case sensitive
$this->$method_name($arguments);
}
public function doSomethingCool($param){
echo 'something cool happened';
}
}
$obj = new MyClass();
$method = 'doSomethingCool';
$obj->$method('robert', 42)
答案 1 :(得分:-1)
我不知道我是否理解你的问题。如果我这样做,我不知道你为什么要这样做,但是:
<?php
class Foo
{
protected $methods = [];
public $some_number = 42;
public function callFunction($action)
{
if ( ! array_key_exists($action, $this->methods)) {
throw new Exception(sprintf('Method %s doesn\'t exist!', $action));
}
$this->methods[$action]($this);
}
public function addFunction(closure $closure, $label)
{
$this->methods[$label] = $closure;
}
}
$foo = new Foo();
$foo->addFunction(function (Foo $context) {
echo $context->some_number;
}, 'test');
$foo->callFunction('test');