我有这样的功能:
public function myfunc ($arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8) {
// do something
}
请参阅?我的函数有8个参数。是的它也有效,但是你知道,这有点难看......难道没有更好的主意吗?例如,只传递一个数组包含所有参数。可能吗?甚至类似的东西。
答案 0 :(得分:0)
我这样做..
$params = [];
把东西放在params ..
$params[] = $a;
$params[] = $b;
将数组传递给函数
myFunction($params);
函数accept array as arg like,definition:
public function myFunction($params = []){}
传递内容,并使用var_dump来检查自己......
答案 1 :(得分:0)
好的,现在我知道它是您正在进行的SQL操作,然后最好的方法是关联数组(假设PDO和预处理语句)。
public function myFunc (array $data)
{
// Using 3 values for example!
$stmt = $this -> pdo -> prepare ("INSERT INTO TABLE thisTable (
col1,
col2,
col3
) VALUES (
:val1,
:val2,
:val3
)");
if (false !== $stmt execute ($data))
{
return $stmt -> rowCount ();
} else {
return 0;
}
}
您可以使用包含正确参数的数组调用它:
$success = (bool) $obj -> myFunc (["val1" => "First value to insert",
"val2" => "Second value to insert",
"val3" => "Third value to insert"]);
答案 2 :(得分:0)
取决于myfunc
是否属于暴露的api(即:public)
如果是公共的,则在更新基础模型(插入查询)时签名必须中断,否则将在客户端提交错误。
使用数组,您可能无法将模型映射到应用程序,并且只是期望程序员向您发送正确的值。通过严格/限制映射,不会发生这种错误。
我认为如果你在数据库中保存一个项目,实际上你需要所有这些字段。它确实是不优雅的,但它不是反模式,因为它们都不是可选的。即使有一两个,也不会引起关注。
你可以做些什么来改善你的api:
如果您需要只传递一些参数(即大多数是可选的或取决于特定场景),那么您可以将该方法专门化为单独的函数。但PHP不接受函数多态性对于这类事情来说是一件很痛苦的事情;你必须以不同的方式命名方法。
public function myfunctosavedatainaparticularcase ($arg1, $arg2, $arg3, $arg4)
// do something
}
public function myfunctosavedatainanotherparticularcase ($arg5, $arg6, $arg7, $arg8)
// do something
}
使用对象模型映射器。例如,假设您正在保存用户数据。您只需将User对象传递给方法:
public function myfunc (User $user)
// map fields to the User signature.
}
如果您已经控制了User类,那么这是可以接受的,因为您必须更改它以反映模型更改。