में कुछ वर्ग के उदाहरण की जांच कैसे करें यदि मैं कुछ कार्यों को निष्पादित करना चाहता हूं यदि इकाई कुछ वर्गों का सदस्य है लेकिन कुछ नहीं।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 (! ($ इकाई उदाहरण उपयोगकर्ता)) के लिए बेहतर नहीं होगा? – DanFromGermany
@DanFromGermany कोई फर्क नहीं पड़ता है। शायद पठनीयता। यह आप पर निर्भर करता है। – KingCrunch
@ किंग कंचन बहुत ही संकल्पनात्मक रूप से भ्रमित है कि इससे कोई फर्क नहीं पड़ता है? मैं ड्रैगोज़ का जवाब और तर्कसंगतता पसंद करता हूं। यह वही तरीका है जो मैं करता हूं, क्योंकि यह उस उदाहरण को अस्वीकार करने के लिए गंदा लगता है, जिसे आप वास्तव में जांचने से पहले जांचना चाहते हैं। – Jonathan
कुछ इस समारोह में यह करना चाहिए:
function isInstanceOf($object, Array $classnames) {
foreach($classnames as $classname) {
if($object instanceof $classname){
return true;
}
}
return false;
}
तो अपने कोड है
if (!isInstanceOf($entity, array('User','Order','Product')));
पीएचपी मैनुअल का कहना है: http://php.net/manual/en/language.operators.type.php
!($a instanceof stdClass)
यह सिर्फ एक तार्किक और "व्याकरण की दृष्टि से" सही लिखा वाक्य रचना है।
उपरोक्त सुझाए गए सिंटैक्स हालांकि, मुश्किल है क्योंकि हम यह निर्दिष्ट नहीं कर रहे हैं कि वास्तव में अस्वीकृति का दायरा कौन सा है: चर या स्वयं "$ var varassass someclass" का पूरा निर्माण। हमें ऑपरेटर की सटीकता पर केवल भरोसा करना होगा [संपादित, @ कोलियुय्या के लिए धन्यवाद]।
!$class instanceof someClass
सिर्फ सही PHP में है और यह है कि जैसा कि आप उम्मीद करते हैं:
!$class instanceof someClass
यह एक क्लीनर समाधान है। मुझे यकीन है कि इस प्रश्न पर आधे लोग खत्म हो गए हैं क्योंकि 'अगर ($ $ इकाई उदाहरण ShopEntity)' सहज नहीं है ... हम में से कई '$ $ इकाई' का उपयोग '$ entity === null' के रूप में करते हैं। – mimoralea
आपका मतलब क्या है 'हमें केवल PHP पार्सर के स्मार्ट कार्यान्वयन पर भरोसा करना होगा।' भाषा विनिर्देश है जो स्पष्ट रूप से बताता है कि 'instanceof' ऑपरेटर की '!' ऑपरेटर की तुलना में अधिक प्राथमिकता है। – Kolyunya
@ कोल्युन्या पठनीयता, बनाम "हम्म, जो अजीब लग रहा है .. मुझे php के ऑपरेटर की प्राथमिकता को देखने दो ... ठीक है, यह जांचता है" –
instanceof
ऑपरेटर तो बस निषेध से पहले इस अभिव्यक्ति है।
function check($object) {
$deciedClasses = [
'UserNameSpace\User',
'OrderNameSpace\Order',
'ProductNameSpace\Product',
];
return (!in_array(get_class($object), $allowedClasses));
}
उदाहरण एक समारोह नहीं है, यह एक कीवर्ड है। और नहीं, PHP की भाषा में ऐसा कुछ भी नहीं है, आपको इसे स्वयं करने के लिए एक फ़ंक्शन को कार्यान्वित करना होगा। – GordonM