2015-10-18 38 views
0

使用image library,我想知道是否可以將一部分對象鏈存儲在一個變量中(然後可以駐留在數據庫中),然後再使用它。我不確定它是否被這樣調用,但沒有發現其他信息。PHP的 - 存儲變量中的對象鏈的一部分?

我試圖做到:

$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); 

回答

-1

也許你需要使用的是eval(),但作爲什麼PHP網站狀態和報價:

The eval() language construct is very dangerous because it allows execution of arbitrary PHP code. Its use thus is discouraged.

長話短說,你可以這樣做,如果你知道後果,但還是需要它:

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

是的,我認爲這將是一種做法,但想知道是否有另一種方式,原因很明顯 - 感謝提示! – Taapo

+0

'$ extra'中的變量是什麼? – MaveRick

+0

試試你的方式,我得到一個錯誤:「PHP致命錯誤:調用布爾上的成員函數響應()」。 $ extra是變量。 – Taapo

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; 
+0

好吧,我理解到目前爲止 - 但我將如何包括$管理器和$ make()和其他參數 - 仍然能夠建立一個有效的方法鏈? – Taapo

+0

@Taapo就是這樣。我認爲這是最好的方法 –

0

你會更好(更清晰的代碼,更容易重新使用)不這樣做。不論你需要調用特定FIT /顏色/反轉鏈

$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等。

+0

在理解將它包裝在一個函數中的方式 - 但是如何將鏈元素存儲在數據庫中並在需要時從那裏重新加載它們?然後我回到使用變量來構建鏈。 – Taapo

+0

你應該爲此做一個特殊的功能。我可以給你一個例子,只需一秒 – Nanne

+0

非常好,謝謝你的例子 - 現在更清晰。我仍然有需要存儲在數據庫中的操作問題,並回想一下,比如「fit」,「limitColors」和「invert」......有沒有辦法存儲這些值? – Taapo