【问题标题】:Best approach to pass parameters to a function?将参数传递给函数的最佳方法?
【发布时间】:2015-09-15 14:15:05
【问题描述】:

这是关于代码的可读性:

我已经处理这个问题很长时间了,我一直想知道处理传递参数的最佳方法是什么。

很多时候,阅读其他程序员的代码我发现这样的行:

$Instance->functionCall('Abc123', 5, 1.24, 'XYZ', 642);

这让我不得不去 Class 文件看看那些参数的含义。

我尽我所能通过这样做来编写可读的代码:

$user_name = 'Abc123';
$age = 5;
$height = 1.24;
$hobbies = 'XYZ';
$num_brothers = 642;

$Instance->functionCall($user_name, $age, $height, $hobbies, $num_brothers);

或者这个:

$Instance->functionCall($user_name = 'Abc123', $age = 5, $height = 1.24, $hobbies = 'XYZ', $num_brothers = 642);

但是这个变量占用内存,没有在其他地方使用。 我喜欢认为这个“丢失”的内存空间是值得的,因为它更具可读性,但我想知道是否有更好的方法。

有什么想法吗?

谢谢大家!

【问题讨论】:

  • 对 phpdoc 使用第一种方法(方法和变量的文档),一切顺利 - 您的 IDE 会告诉您需要了解的内容

标签: php function parameters conventions readability


【解决方案1】:

这样的事情怎么样:

$Instance->functionCall([         // or $Instance->functionCall( array(
    'user_name'    => 'Abc123',
    'age'          => 5,
    'height'       => 1.24,
    'hobbies'      => 'XYZ',
    'num_brothers' => 642
]);

将数组传递给函数。这样一来,您就具有各个变量的可读性,并且可以根据需要轻松地向函数添加更多/更少。

【讨论】:

  • 我喜欢这个,其实我已经用过几次了。我认为这是一个很好的方法,但是当我使用它时,我问自己“单独传递参数或包含所有参数的数组之间的界限在哪里?只传递一个 int 证明使用数组来包含它是合理的?如果不是,还传递一个字符串做?”。此外,您将失去默认参数值的功能。
【解决方案2】:

首先,函数只能在极端情况下有很多参数,但通常如果你有很多参数 - 重构。在给定的情况下,看起来应该有一些用户对象必须只传递给函数,并且您可以从函数内部的该对象获取所有必需的数据。并且还使用 PHPDoc,正如 @m_pro_m 所说,你的 IDE 会告诉你你需要什么。

也是这个练习

$Instance->functionCall('Abc123', 5, 1.24, 'XYZ', 642);

因为所谓的“magic numbers and strings”而不好。如果你找到这样的东西,将它们导出到一个常量或一些配置中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2022-12-05
    • 1970-01-01
    • 2016-12-18
    相关资源
    最近更新 更多