有时,我会编写一个带有单个输入的 PHP 函数,一个包含该函数所有输入的关联数组。这样做有好处,例如不必记住输入的正确顺序,但我也注意到它使得对大型代码库的更改变得更加容易;当我需要添加另一个变量,并且该变量必须传递 4 或 5 个预先存在的函数时,如果我可以将它粘贴到数组中并传递它,那就容易多了。
我的问题是,这样做有什么缺点吗?
我很少在示例中或在我使用的开源中看到以这种方式编写的函数,这让我相信可能存在缺点。如果没有理由不这样做,那么为什么不以这种方式编写所有函数呢?
更新
感谢您的所有回答。看起来有两个主要问题很突出:
代码可读性 - 无法分辨哪些变量将进入函数以及它们的用途
变量蠕变 - 最终可能会导致大量数组从一个函数跳到下一个函数;不应将参数传递给不需要它们的函数
这两点都是我没有想到的要点。
似乎总的要点是,出现问题的代码可能应该转换为类。不幸的是,在这个特定的项目中,这样的重构超出了范围,但我也认为 Bill Karwin 的解决方案很好 - 传递一组可选变量
最佳答案
why not write all functions this way?
就此而言,为什么不完全忘记参数,并使用全局变量来处理所有事情呢? (开玩笑)
传递关联数组有一个有用的优点:您可以将多个函数参数设置为可选,并且可以为第 N 个参数传递一个值,而不必为 *N-1 个参数传递一个值*第一个参数。
但是,如果不传递强制参数,则无法生成编译时错误的强制参数。您也不能声明类型检查。
您必须在被调用函数内编写代码来检查所需参数是否存在及其类型。
我使用的另一种方法是为那些必需的参数声明常规参数,然后作为最后一个(可选)参数,声明一个名为 $options
的关联数组,该数组仅包含可选项。
function database_connect($dbname, $user, $password, array $options = array())
关于php - 使用关联数组作为 php 函数的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/997234/