脚本宝典收集整理的这篇文章主要介绍了php – 功能阵列的替代方法?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$functions = [ "do this" => function() { // does this },"do that" => function() { // does that } ] etc.
我已经选择将类似的函数放在一个数组中,因为它们不够相似 – 用一个充满条件语句的大函数获得相同的结果不会起作用.而且我只需要通过键来调用它们,例如:
$PRogram = ["do this","do that","do this"]; foreach ($program as $k => $v) { $functions[$v](); }
这是这个函数数组结构引起了许多问题,例如我在另外一个数组函数中很难从一个数组函数调用.这不行:
"do that" => function() { $functions["do this"](); }
也不是:
"do that" => function() { global $functions; $functions["do this"](); }
或这个:
"do that" => function($functions) { $functions["do this"](); } $functions["do that"]($functions);
function similar_functions($key) { switch ($key) { case "do this": // does this break; case "do that": // does that break; } }
但这不是很好的做法.或者也许是
您应该以SOLID的方式选择OOP,以避免冗余,提高可扩展性和维护性.这是提供一组可重用的功能的最佳做法.
您还可以在层和模块中分离代码,以降低复杂性并提高可互换性.
在您的情况下,您的类可以实现__invoke将其称为可调用,并且您的键可以是这些类的完整的命名空间,因此您可以将其称为函数.
从现在开始,您还可以使用继承,多态或设计模式,如复合,装饰等来重用其他功能或添加功能.
<?PHP use Foo\Bar; class This { public function __invoke() { $this->execute(); } public function execute() { /* ... */ } } class That extends This { public function execute() { /* ... */ } } $namespaces = array("\Foo\Bar\This","\Foo\Bar\That"); foreach ($namespaces as $fullQualifiedNamespace) { /** @VAR callable $fullQualifiedNamespace */ $fullQualifiedNamespace(); }
这种行为也可以通过实现一个特定的接口来实现.
在迭代中,您可以检查接口来调用定义的合同.或者您构建一个Process Class,您可以在其中添加实现此接口的对象. Process类可以执行所有附加对象(Chain of Responsibility).
我更喜欢责任模式链,这是大多数开发人员可以理解的,并不像PHP的__invoke拦截器那么神奇.在工厂中,您可以定义您的链,并且您可以定义链条或链接对象的其他依赖关系.
以上是脚本宝典为你收集整理的php – 功能阵列的替代方法?全部内容,希望文章能够帮你解决php – 功能阵列的替代方法?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。