使用关联数组作为php函数的输入

the*_*ott 12 php arrays function object

偶尔我会编写一个带有单个输入的PHP函数,一个包含所有函数输入的关联数组.这样做的好处就是不必记住输入的正确顺序,但我也注意到它使得对大型代码库的更改变得更加容易; 当我需要添加另一个变量,并且该变量必须通过4或5个预先存在的函数时,当我可以将它粘在数组中并传递它时,它会容易得多.

我的问题是,这样做有不利之处吗?

我很少看到以这种方式在示例中编写的函数,或者在我使用的开源函数中,这使我相信可能存在缺点.如果没有理由不这样做那么为什么不这样写所有函数呢?

UPDATE

谢谢你的所有答案.看起来两个主要问题突出:

代码可读性 - 无法分辨哪些变量进入函数以及它们的用途

可变蠕变 - 可能会结束从一个功能到下一个功能的大规模阵列; 一个不应该将参数传递给不需要它们的函数

哪些都是我没想过的重点.

似乎一般的要点是,这是一个问题的代码,应该转换为一个类.不幸的是,在这个特定的项目中,这样的重构超出了范围,但我也认为Bill Karwin的解决方案很好 - 传递一组可选变量

Bil*_*win 12

为什么不这样写所有功能?

为此,为什么不完全忘记参数,并使用全局变量?(开玩笑)

传递关联数组有一个有用的优点:可以使多个函数参数可选,并且可以传递第N个参数的值,而不必传递*N-1*th参数的值.

但是如果不传递它们,则无法使用编译时错误生成强制参数.你也不能宣布类型检查.

您必须在被调用函数内编写代码以检查所需参数的存在和类型.

我使用的另一种方法是为必需的参数声明常规参数,然后作为最后一个(可选)参数,声明一个$options只包含可选项的关联数组.

function database_connect($dbname, $user, $password, array $options = array())
Run Code Online (Sandbox Code Playgroud)


Eri*_*lje 9

缺点是,任何查看代码的人(除了你)都不知道哪些参数会进入某个方法,它们来自何处,或者它们的用途.他们也不知道如何调用方法,因为如果不仔细查看代码在"参数数组"中需要什么,就不清楚了.

  • 只有当编码人员不评论或记录任何内容时,情况才是如此. (2认同)