变量方法的变量属性

时间:2018-02-27 10:56:05

标签: php laravel-5 php-7 variable-variables spatie

我正在使用操纵图像的第三方软件包。对于基本转换,它接受单个值:

 n<-length(E(g))

 v1x<-unlist(lapply(lapply(c(1:n),ends,graph=g),"[[",1))
 v2x<-unlist(lapply(lapply(c(1:n),ends,graph=g),"[[",2))

 n1x<-lapply(lapply(v1x,neighbors,graph=g,mode="all"),names)
 b<-Map(as.numeric,lapply(lapply(v2x,neighbors,graph=g,mode="all"),names))

 a<-mapply(rep, as.numeric(v2x), lapply(n2x,length))

 opp1<-Map('*',a,b)
opp1
[[1]]
[1] 12  3  6

[[2]]
[1] 4 3

[[3]]
[1] 8 6

[[4]]
[1] 8 6

[[5]]
[1] 4 3

我正在构建的系统具有抽象级别,我需要在配置文件中定义这些值。我将配置文件作为数组加载。然后我可以遍历配置文件中的值并生成各种转换。

我的配置文件:

$image = $this->addMediaConversion('thumb');
$image->width(100);
$image->height(100);

从该配置定义这些转换的代码:

return [
  'thumb' => [
    'width' => 100,
    'height' => 100,
  ],
];

SINGLE 值可以正常

但是,该包具有针对方法采用多个属性的方法,例如:

$definitions = config('definitions');

foreach($definitions as $name => $keys) {
  $image = $this->addMediaConversion($name);

  foreach($keys as $key => $value) {
    $image->$key($value);
  }
}

有各种可用的方法具有各种不同的可接受属性。我正在寻找一个 * ELEGANT * 解决方案。我能够通过在配置文件中包含一组值,检查类型,检查该数组的长度,然后传递正确的数字来实现它,但这不是可扩展的,易于维护的,也不是优雅的。

配置:

$image = $this->addMediaConversion('thumb');
$image->fit(Manipulations::FIT_FILL, 560, 560);

代码:

return [
  'thumb' => [
    'fit' => [Manipulations::FIT_FILL, 560, 560]
  ]
];

对此最好和最优雅的解决方案是什么?

2 个答案:

答案 0 :(得分:2)

您必须使用call_user_func_array,如下所示:

foreach($image_definitions as $name => $keys) {
  // Generate the conversion
  $conversion = $this->addMediaConversion($name);
  // Loop through and define the attributes as they are in the config, things like ->width(), ->height()
  foreach ($keys as $key => $value) {
    if (is_array($value)){
      call_user_func_array(array($conversion, $key), $value);
    } else {
      $conversion->$key($value);
    }                
  }
}

答案 1 :(得分:0)