6

非常抱歉,但我无法定义我试图弄清楚的这个“东西”。

在编写函数时,我们可以采取不同的方法,我做了一些“占位符”示例:

--------A---------
getImageSmall();
getImageLarge();
getTextSmall();
getTextLarge();
--------B---------
getImage('small');
getImage('large');
getText('small');
getText('large');
--------C---------
get('image','small');
get('image','large');
get('text','small');
get('text','large');
--------D---------
get(array('type'=>'image','size'=>'small'));
get(array('type'=>'image','size'=>'large'));
get(array('type'=>'text','size'=>'small'));
get(array('type'=>'text','size'=>'large'));
--------E---------
get('{"type":"image","size"=>"small"}');
get('{"type":"image","size"=>"large"}');
get('{"type":"text","size"=>"small"}');
get('{"type":"text","size"=>"large"}');

我也可以包含对象,但我现在更喜欢保持简单。

“D”中的数组是一个 php 数组,用于显示使用 json 的示例“E”之间的区别。

您可能会看到该方法如何逐渐从一种思维方式转变为另一种思维方式,其中功能定义转向信息交换。这并不意味着“get”函数是一个可以做所有事情的主函数,它可能是一个调用其他函数的信使函数,它的唯一目的可能是把应用程序变成一个服务。

问题是:

  • 这种编码风格的转变叫什么?(主要问题)
  • 什么时候最好使用哪个?
  • 我在哪里可以阅读更多关于此的信息?

欢迎澄清和评论/问题/答案以改进此问题。

4

3 回答 3

2

命名函数并将值传递给函数一直是众多讨论的主题之一。我建议您查看通常称为“清洁代码”的内容。它包含命名和构造函数的理论。这是一本值得一看的好书

http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

并在 YouTube 上查看Clean Code,您可能会发现一些不错的演讲。

我的想法是,在构造函数时你可以做一百万种不同的方式。理论上,除了您的示例之外,您还可以有一个名为Get的函数,该函数接受一个指向函数的指针,该函数返回要获取的事物的类型。但这唯一增加的是复杂性。我们想要实现的基本上是易于其他人阅读和理解的自我注释代码。为此,每个函数都应该遵循设定的规则,根据它的执行情况如何命名,允许更改和返回什么等。这将使代码更容易进入。

这适用于上课。不要有一些类在它的构造函数中设置一百万个东西。如果需要,则创建函数来封装行为并从构造函数调用这些函数。

于 2013-03-15T19:57:37.193 回答
1

在你编辑了你的问题之后,我明白了你想要得到什么,在这里。我将把它作为答案发布,并冒着被否决的风险——我稍后可能会编辑它。

似乎您正在尝试通过您的函数构建路由层次结构;类似于 Web API 甚至 MVC 应用程序中的路由。基本上,您正在构建一棵树-在其根部,您拥有get(这是函数名称),然后您可以将参数传递给可能相互依赖或不相互依赖的函数。

沿逻辑界限概括您的 API 调用确实是一种不同的编码风格,但我不知道它是否适用于您在这里选择的语言。

这种编程风格的转变叫什么?(主要问题)

我不确定,但我会尝试找到它并重新编辑这篇文章。

什么时候最好使用哪个?

您的函数在列表中变得更加通用。因此,我会在特定范围内使用更具体的函数(例如,作为类中的助手),并且我只会将通用函数作为更大公共接口的一部分公开。

我在哪里可以阅读更多关于此的信息?

我必须自己阅读一些内容-我理解这个概念,但我不知道我是否看过正式的定义。

于 2013-03-15T20:11:32.187 回答
0

C 和 D/E 之间的区别根本不影响函数的逻辑,只是你调用它的方式。我将 C 用于更简单的功能,并在几种情况下切换到 D 和 E:

  1. 参数列表足够长,以至于调用和定义很笨拙。传递关联数组可以让您逐个构建参数。

  2. 您要作为参数传递的值已经在数组或对象中出现,因此传递它比先解包更方便。

  3. 您的函数有很多可选参数。PHP 不支持命名参数,所以如果你想调用一个有 15 个可选参数的函数并且你提供了 5 个参数,传递一个参数数组比记住你的 5 个参数进入 15 个位置中的哪个位置要容易得多,并在它们之间写很多nulls。

对于采用少量全部或大部分必需参数的函数,C 语言可能很有用,因为它使您的代码的其他读者更容易一目了然地了解函数的设计及其要求。

于 2013-03-15T19:59:48.160 回答