закрытие php — методы класса Php Dynamic

У меня есть массив (свойство класса), в котором хранятся методы PHP (т. Е. Класса ‘Closure’). Именно так.

$this->methods[$name]=$action;

$action это функция.

Когда я пытаюсь вызвать функцию, как $this->methods[$name]()Я не могу получить доступ $this указатель внутри функции.

Почему эта проблема происходит и как я могу это исправить.

-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

Другие решения

Я не знаю, понял ли я твой вопрос. И если бы я это сделал, я не знаю, почему вы хотели бы сделать это, но:

<?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');
-1

По вопросам рекламы [email protected]