gpt4 book ai didi

javascript - 从数组调用方法和闭包

转载 作者:行者123 更新时间:2023-11-28 18:38:14 25 4
gpt4 key购买 nike

在 JavaScript 中,您可以执行以下操作:

var Module = (function () {
var functions = [method1, method2]; // array of functions to execute

function method1 () {
console.log('calling method1');
}

function method2 () {
console.log('calling method2');
}

function method3 () {
console.log('calling method3'); // not called
}

function add (fn) {
functions.push(fn); // add new function to the array
}

function printt () {
for (var i in functions) functions[i](); // execute functions in the array
}

return {
add: add,
printt: printt
};
})();

Module.add(function () {
console.log('calling anonymous function');
});

Module.printt();

// calling method1
// calling method2
// calling anonymous function

是否可以在 PHP 中执行类似的操作,其中要执行的 (1) 方法存储在数组 (2) 中,并且可以添加新函数/方法数组,以便当运行 printt 方法时,它会执行数组中的所有函数?

class Module {
protected $functions = [];

public function __construct () {
// ?
}

protected function method1 () {
echo 'calling method1';
}

protected function method2 () {
echo 'calling method2';
}

protected function method3 () {
echo 'calling method3';
}

public function add ($fn) {
$this->functions[] = $fn;
}

public function printt () {
foreach ($this->functions as $fn) $fn();
}
}

$module = new Module();

$module->add(function () {
echo 'calling anonymous function';
});

$module->printt();

最佳答案

检查is_callable()用于关闭和 method_exists()对于对象的方法。

class Module {
protected $functions = ['method1', 'method2'];

// ...

public function printt () {
foreach ($this->functions as $fn) {
if ( is_callable( $fn ) ) {
$fn();
} elseif ( method_exists( $this, $fn ) ) {
$this->$fn();
}
}
}
}

与 JS 的另一个区别是,您需要通过对象内的 $this 正确引用该方法。

关于javascript - 从数组调用方法和闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com