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

标签 php arrays object function

有时,我会编写一个带有单个输入的 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/

相关文章:

php - 带有MLSD和fsockopen的PHP的ftp_raw函数: weird blocking behaviour and Warning messages

php - 并非所有字段都插入到 MySQL 表中

Java 从二维数组制作 vector 。

Java : Accessing static method properly

PHP 准备语句 : binding variable parameters

php - 为什么我使用 MAMP 的 PHP 文件不刷新?

javascript - 对 Javascript 中给定代码的解释

java - 使用 JAVA 将字符串拆分为多个部分并存储为 CSV

java - 无法从 Java 中的 ArrayList 访问对象的方法

javascript - 将数据附加到 localStorage 对象