php - 在变量中存储对象链的一部分?

时间:2015-10-18 06:32:56

标签: php

使用image library,我想知道是否可以将部分对象链存储在变量中(然后可以驻留在数据库中)并在之后再次使用它。我不确定它是否以这种方式调用,但没有找到其他信息。

我想要完成的事情:

$extra = "fit(800, 500, null)->limitColors(5, '#ff9900')->invert()";
$image = $manager->make($source)->$extra;
echo $image->response('jpg', 85);

要获得此结果:

$image = $manager->make($source)->fit(800, 500, null)->limitColors(5, '#ff9900')->invert();
echo $image->response('jpg', 85);

3 个答案:

答案 0 :(得分:0)

好的,你不能将"fit(800, 500, null)->limitColors(5, '#ff9900')->invert()";存储在一个变量中。如果将它存储在变量中,它将被视为字符串,并且不返回任何内容。如果您希望它返回您想要的内容,则需要$manager实例和make()方法的帮助。因此,您只能将此部分fit(800, 500, null)->limitColors(5, '#ff9900')->invert()存储在变量中并使用它。

$source = $manager->make($source);
$added_extra = $source->fit(800, 500, null)->limitColors(5, '#ff9900')->invert();
$image = $added_extra->response('jpg', 85);
echo $image;

答案 1 :(得分:0)

如果不这样做,你会更好(更清晰的代码,更容易重复使用)。如果您需要一遍又一遍地执行此操作,您可能需要创建一个函数:

$image = $manager->make($source)->$extra;
echo editImage($image)->response('jpg', 85);

function editImage(\Intervention\Image $image){
  return $image->fit(800, 500, null)->limitColors(5, '#ff9900')->invert();
}

你需要调用特定的适合度/颜色/反转链,你可以调用你的函数。

如果你必须在回应你的回应之前绝对做到这一点并且绝对限制等,你可以更进一步: 您可以创建一个Intervention\Image;的子类,您可以在其中覆盖响应类(我认为,不确定是否有更好的响应类,您应该检查实际的库)并在内部调用这三个函数?

但这可能有点矫枉过正。

作为对你评论的回应:你可以这样做:

function editImage(\Intervention\Image $image, YourSettingsObject $settings){
  return $image
    ->fit($settings->width, $settings->height, $settings->something)
    ->limitColors($settings->limit, $settings->color)
    ->invert();

}     }

这里我假设您为设置创建了一个类,并从数据库中填充它。你当然可以轻松使用数组。您应该考虑一些侧点(比如设置对象中不存在的值的默认默认值),您可以使用您需要添加到设置对象的任何内容来扩展此功能。

所以你要做的就是创建你的第一个$image,并从数据库(或数组,如果你这么倾向)获得你的$settings对象,并将它们提供给一个函数。根据这些设置,您只需拨打一次fitlimitColors等所有内容。

答案 2 :(得分:-1)

您需要使用的是eval(),但截至PHP网站所述和引用的内容:

  

eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。

如果您意识到后果并且仍然需要它,那么你可以这样做:

$extra = "fit(800, 500, null)->limitColors(5, '#ff9900')->invert()";
$image = eval('$manager->make($source)->'.$extra);