0

関数がlongを期待していることは知ってい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

これは可能ですか?

4

3 に答える 3

3

提供された:

$filter = "IMG_FILTER_GRAYSCALE"

関数定数を使用できるはずです:

imagefilter($this->_image_resource, constant($filter));

ただし、以下も問題なく機能することに注意してください。

$filter = IMG_FILTER_GRAYSCALE
imagefilter($this->_image_resource, $filter);

必要に応じて、定数を引数として問題なく渡すことができます。前者は、定数名を動的にする必要がある場合にのみ役立ちます。

于 2012-07-12T14:30:26.297 に答える
0

キャストは次のように行われます。

<holder> = (<type>) <expression>

$var = (int) "123";
于 2012-07-12T14:30:39.087 に答える
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));
于 2012-07-12T14:32:33.877 に答える