我知道imagefilter
函数需要很长但有一种方法可以将变量强制转换为long或者我只是为每个过滤器创建单独的函数。我的想法是:
public function ImgFilter($filter, $arg1=null, $arg2=null){
$this->lazyLoad();
if($this->_cache_skip) return;
if(isset($this->_image_resource)){
imagefilter($this->_image_resource, $filter);
}
}
抱怨我的$filter
变量。对于此示例,我的$filter
值为:IMG_FILTER_GRAYSCALE
这可能吗?
答案 0 :(得分:3)
本发明提供:
$filter = "IMG_FILTER_GRAYSCALE"
您应该可以使用函数constant:
imagefilter($this->_image_resource, constant($filter));
但请注意,以下内容也可以正常使用:
$filter = IMG_FILTER_GRAYSCALE
imagefilter($this->_image_resource, $filter);
如果需要,可以将常量作为参数传递而不会出现问题。前者仅在您确实需要常量名称为动态时才有用。
答案 1 :(得分:0)
以这种方式进行施法:
<holder> = (<type>) <expression>
$var = (int) "123";
答案 2 :(得分:0)
以下功能可以满足您的需求:
public function ImgFilter($filter, $arguments = array())
{
$this->lazyLoad();
if ($this->_cache_skip) {
return;
}
if (isset($this->_image_resource)) {
$params = array($this->_image_resource, $filter);
if (!empty($arguments)) {
$params = array_merge($params, $arguments);
}
call_user_func_array('imagefilter', $params);
}
}
然后像这样使用它:
$this->ImgFilter(IMG_FILTER_GRAYSCALE);
$this->ImgFilter(IMG_FILTER_COLORIZE, array(0, 255, 0));