如果實體是少數類的成員但不是某些類的成員,我想執行一些函數。如何檢查是否不是symfony2中的某個類的實例
有一個叫instanceof
的功能。
但是有沒有像
if ($entity !instanceof [User,Order,Product])
如果實體是少數類的成員但不是某些類的成員,我想執行一些函數。如何檢查是否不是symfony2中的某個類的實例
有一個叫instanceof
的功能。
但是有沒有像
if ($entity !instanceof [User,Order,Product])
給他們一個共同的接口,然後
if (!$entity instanceof ShopEntity)
或留在
if (!$entity instanceof User && !$entity instanceof Product && !$entity instanceof Order)
我會避免創建任意函數只是一些字符在一個地方保存。另一方面,如果你需要「太頻繁」,你可能會有設計缺陷? (在「太多的邊緣情況」或這樣的意思)
'if(!($ entity instanceof User))'會更好嗎? – DanFromGermany 2013-06-18 16:29:11
@DanFromGermany沒有區別。也許可讀性。隨你便。 – KingCrunch 2014-04-25 10:49:45
@KingCrunch非常概念上混淆爲什麼它沒有什麼區別?我更喜歡Dragos的回答和合理化。這是我做這件事的方式,因爲在檢查實際內容之前否定要檢查的實例似乎很髒。 – Jonathan 2016-02-25 16:49:09
這個功能應該這樣做:
function isInstanceOf($object, Array $classnames) {
foreach($classnames as $classname) {
if($object instanceof $classname){
return true;
}
}
return false;
}
所以,你的代碼是
if (!isInstanceOf($entity, array('User','Order','Product')));
PHP手冊說:http://php.net/manual/en/language.operators.type.php
!($a instanceof stdClass)
這僅僅是一個邏輯和「語法」正確的書面語法。
上述建議的語法雖然很棘手,因爲我們沒有詳細說明否定的範圍:變量本身或「$ var instanceof someclass」的整個構造。我們只需要依賴運營商的優先權[編輯,感謝@Kolyunya]。
!$class instanceof someClass
這是一個更清潔的解決方案。我確信有一半的人最終在這個問題上開始尋找,因爲'if(!$ entity instanceof ShopEntity)'不直觀......我們許多人使用'!$ entity'作爲'$ entity === null'。 – mimoralea 2014-10-29 22:22:41
你是什麼意思?'我們只需要在這裏依賴PHP解析器的智能實現。「?語言規範明確指出'instanceof'運算符比'!'運算符具有更高的優先級。 – Kolyunya 2017-02-12 10:46:33
@Kolyunya可讀性,vs「嗯,看起來很奇怪..讓我看看php的運算符優先級......好的,那就檢查出」 – 2017-06-14 02:32:37
function check($object) {
$deciedClasses = [
'UserNameSpace\User',
'OrderNameSpace\Order',
'ProductNameSpace\Product',
];
return (!in_array(get_class($object), $allowedClasses));
}
instanceof不是一個函數,它是一個關鍵字。不,PHP語言中沒有這樣的東西,你必須實現一個功能來自己做。 – GordonM 2012-07-27 06:28:42