PHP: class MyClass(){ // У данного класса имеется свойство, например Item которое является анонимной функцией // Как выполнить её в этом классе } Спасибо.
PHP: class MyClass(){ // У данного класса имеется свойство, например Item которое является анонимной функцией // И она выполняется в этом классе } На здоровье.
Ну как варианты: PHP: call_user_func_array(['MyClass', 'Item'], []); // или (new MyClass())->Item(); //или в классе юзаем call_user_func_array($this->Item, []);
Понял. Вообще сделал одно свойство - массив (private $config = array()). И уже в элемент массива загнал анонимную функцию. PHP: $this->config['item'](); // Так работает
так не работает) PHP: class Test { public $myVar = function($bla){return $bla;}; public function myMet($bla) { return $bla; } }
@artoodetoo точно) протупил)) PHP: class Test { public $myVar; public function __constructor() { $this->myVar = function($bla){return $bla;}; } public function myMet($bla) { return $bla; } } $obj = new Test; echo $obj->myMet(5);
какой вопрос, такой ответ. ты выложил класс, в котором ничего нет и написал, что в нём что-то есть. я выложил класс, в котором ничего нет и написал, что в нём есть решение. всё честно. --- Добавлено --- в свойство попадет то, что вернёт функция, а не сама функция. --- Добавлено --- али ошибаюсь?
PHP: class Test { public $myVar; public function __construct() { $this->myVar = function(){return 7;}; } public function myMet() { return $this->myVar; } } $obj = new Test; var_dump($obj->myMet()); вот что возвращает.. Код (Text): object(Closure)[2] public 'this' => object(Test)[1] public 'myVar' => object(Closure)[2] public 'this' => &object(Test)[1] что то я не понял как это работает)) --- Добавлено --- логически должно да.. результат попадать.. хотя вот в таком случае работает как анонимная функция Код (Text): $anon = function($var){ return (5 * (int)$var); }; echo $anon(5); //25
Свойство - такая же переменная, если ты в переменную можешь записать анонимную функцию, почему не можешь в свойство? Запросто делается. Только вызвать, как с переменной, не получится PHP: $f = function () {/* ... */}; $f(); // OK class A { public $f; public function __construct() { $this->f = function () {/*...*/} } } $a = new A; $a->f(); // Error: undefined method; call_user_func($a->f); // OK
PHP: <?php class Foo { public $item; public function __construct() { $this->item = function($a) { return $a ** 2; }; } public function someFunc($a) { return $this->item->__invoke($a); } } $foo = new Foo(); echo $foo->someFunc(5); Код (Text): 25
свойство же не может содержать функцию. в первом случае свойство содержит обычную строку, в которой хранится название функции. А второй случай я не знаю что такое
Анонимная функция это не функция,а экземпляр класса Closure, у которого есть свои методы,в число которых входит магический метод __invoke().Поэтому в моем примере в item находится непосредственно анонимная функция или же экземпляр класса Closure. Так как мы не можем непосредственно вызвать анонимную функцию через (), мы вызываем ее используя магический метод __invoke() https://secure.php.net/manual/ru/language.oop5.magic.php#object.invoke https://secure.php.net/manual/ru/class.closure.php