2016-01-05 17 views
10

我想知道變量是否爲集合。Laravel:找出變量是否爲集合

我不能使用is_object(),因爲即使它不是一個集合,它也會是真的。 現在我用這個和它的工作原理:

if(is_object($images) && get_class($images) != 'Illuminate\Database\Eloquent\Collection') { 

但我覺得它是如此醜陋,我花時間問你另一種解決方案。

你有什麼想法嗎?

+0

我會將它解壓縮到一個輔助函數isCollection()並在需要時使用它。 –

+3

可能重複的[我可以檢查一個對象是否是一種特定的類,在PHP?](http://stackoverflow.com/questions/1965722/can-i-check-if-an-object-is-kind -of-a-specific-class-in-php) – Bogdan

+1

[如何在PHP中檢查特定類型的對象]可能的重複(http://stackoverflow.com/questions/8091143/how-to-check-for -a-specific-type-of-object-in-php) – patricus

回答

13

你不能使用

if(is_a($images, 'Illuminate\Database\Eloquent\Collection')) { 
    ....do whatever for a collection.... 
} else { 
    ....do whatever for not a collection.... 
} 

或者

if ($images instanceof Illuminate\Database\Eloquent\Collection) { 

} 
+2

'is_a'已經從PHP 5.0開始不推薦使用,因此它在工作時不是最好的建議。 – Bogdan

+0

奇怪。它仍然列出它在PHP 7根據這個:http://php.net/manual/en/function.is-a.php 它確實列出它已棄用。我的錯。 –

+3

@Bogdan'is_a'已在5.0.0中棄用,但自5.3.0起恢復(不再棄用)。但是,鑑於歷史,我仍然推薦'instanceof' over'is_a'。另外,它讀取更好一點恕我直言。 – patricus

4

只想糾正我遇到了這個答案錯誤。

注意instanceof節選無論是(OBJ)或之類的不帶引號的名稱

$images instanceof Illuminate\Database\Eloquent\Collection 

而且,有趣的是有使用instanceofis_a速度/性能差異,但是這可能是不相關對你來說,如果你像我一樣,並且首先在尋找這個問題的答案。

+0

也工作..就像答案 –

5

正在使用的類在此處不正確。 一般來說,你應該測試基類。

use Illuminate\Support\Collection; 

.... 
if($images instanceof Collection) { 
.... 
} 
+1

這是這裏唯一正確的答案。 –