PHP - 传递参数并在同一行中对其进行预转换?
PHP - pass an argument and pre-transform it in the same line?
我知道这是个奇怪的问题,但我有一个这样声明的静态方法:
public static function getCountForTypesByModificationYear($year, $filter = null) {
$filter["modification year"] = $year;
return self::getCountForTypes($filter);
}
它需要一个参数(一年)和一个可选的带有附加过滤选项的关联数组。第一行确保 $filter
数组只有一个 modification year
键(我将其作为第一个参数提供),第二行使用 SQL 查询触发方法以计算潜在结果对于选定的过滤器。
就我的目的而言,它们非常不言自明且简单,但我试图猜测是否有办法将这两行变成一行 WITHOUT 求助于 array_merge_recursive()
或 call_user_func()
.
等函数
这个可以减少吗?
您只能通过某些函数调用来执行此操作,例如 array_merge 函数。
表达式如 ($filter['xx']=123)
return 右侧操作数值
public static function getCountForTypesByModificationYear($year, $filter = null)
{
return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year]));
}
此外,在您的示例中,如果您不使用类型提示 'array' 并将 $filter
默认值设置为 null - 您应该确保 $filter
是数组
public static function getCountForTypesByModificationYear($year, $filter = null)
{
if( !is_array($filter) ) throw new \InvalidArgumentException();
return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year]));
}
如果你只关心在一行中完成,你可以尝试以下方法:
public static function getCountForTypesByModificationYear($year, $filter = null) {
return self::getCountForTypes(($filter["modification year"] = $year) ? $filter : null);
}
但是,我不确定它的性能是否会更好。
或者你也可以这样做,
return self::getCountForTypes(["modification year" => $year] + $filter);
我知道这是个奇怪的问题,但我有一个这样声明的静态方法:
public static function getCountForTypesByModificationYear($year, $filter = null) {
$filter["modification year"] = $year;
return self::getCountForTypes($filter);
}
它需要一个参数(一年)和一个可选的带有附加过滤选项的关联数组。第一行确保 $filter
数组只有一个 modification year
键(我将其作为第一个参数提供),第二行使用 SQL 查询触发方法以计算潜在结果对于选定的过滤器。
就我的目的而言,它们非常不言自明且简单,但我试图猜测是否有办法将这两行变成一行 WITHOUT 求助于 array_merge_recursive()
或 call_user_func()
.
这个可以减少吗?
您只能通过某些函数调用来执行此操作,例如 array_merge 函数。
表达式如 ($filter['xx']=123)
return 右侧操作数值
public static function getCountForTypesByModificationYear($year, $filter = null)
{
return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year]));
}
此外,在您的示例中,如果您不使用类型提示 'array' 并将 $filter
默认值设置为 null - 您应该确保 $filter
是数组
public static function getCountForTypesByModificationYear($year, $filter = null)
{
if( !is_array($filter) ) throw new \InvalidArgumentException();
return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year]));
}
如果你只关心在一行中完成,你可以尝试以下方法:
public static function getCountForTypesByModificationYear($year, $filter = null) {
return self::getCountForTypes(($filter["modification year"] = $year) ? $filter : null);
}
但是,我不确定它的性能是否会更好。
或者你也可以这样做,
return self::getCountForTypes(["modification year" => $year] + $filter);