gpt4 book ai didi

php - 在 PHP 中模拟命名函数参数,好主意还是坏主意?

转载 作者:IT王子 更新时间:2023-10-28 23:55:43 25 4
gpt4 key购买 nike

如果我编写这样的函数,可以在 PHP 中模拟命名函数参数

function pythonic(array $kwargs)
{
extract($kwargs);
// .. rest of the function body
}

// if params are optional or default values are required
function pythonic(array $kwargs = array('name'=>'Jon skeet'))
{
extract($kwargs);
// .. rest of the function body
}

除了在 IDE 中失去智能感知之外,这种方法还有哪些其他可能的缺点?

编辑:

安全性:在这种情况下安全性不应该不是问题吗,因为提取的变量仅限于函数范围?

最佳答案

我建议使用关联数组来传递命名参数,但不提取它们,将它们保留在数组中。

function myFunc(array $args) {
echo "Hi, " . $args['name'];
// etc
}

这有几个原因。查看该函数,您可以非常清楚地看到我指的是传递给函数的参数之一。如果您提取它们,并且没有注意到 extract() 您(或下一个人)会在那里挠头想知道这个“$name”变量来自哪里从。即使你确实知道你正在提取局部变量的参数,它在一定程度上仍然是一个猜谜游戏。

其次,它确保其他代码不会覆盖参数。您可能编写了函数,只希望有名为 $foo$bar 的参数,因此在您的其他代码中,您定义 $baz = 8;,例如。稍后,您可能希望扩展您的函数以获取一个名为“baz”的新参数,但忘记更改您的其他变量,因此无论在参数中传递什么,$baz 将始终设置到 8 点。

使用数组也有一些好处(这些同样适用于提取或留在数组中的方法):您可以在每个函数的顶部设置一个名为 $defaults 的变量:

function myFunc (array $args) {
$default = array(
"name" => "John Doe",
"age" => "30"
);
// overwrite all the defaults with the arguments
$args = array_merge($defaults, $args);
// you *could* extract($args) here if you want

echo "Name: " . $args['name'] . ", Age: " . $args['age'];
}

myFunc(array("age" => 25)); // "Name: John Doe, Age: 25"

您甚至可以从 $args 中删除所有没有对应 $default 值的项目。这样您就可以准确地知道您拥有哪些变量。

关于php - 在 PHP 中模拟命名函数参数,好主意还是坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/680368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com