PHP

2016-05-04 4 views
13

में कक्षा (exampleof) द्वारा स्विच स्विच के साथ if(.. instanceof ...), elseif(... instanceof ...), ... के ब्लॉक को प्रतिस्थापित करना संभव है?PHP

उदाहरण के लिए:

<?php 
$class = ..... //some class 

if($class instanceof SomeClass) { 
    //do something 
} elseif($class instanceof SomeAnotherClass) { 
    //do something else 
} 

उत्तर

4

निम्नलिखित अधिक सही है:

$class = get_class($objectToTest); 

switch($class) { 
    case TreeRequest::class: 
     echo "tree request"; 
     break; 
    case GroundRequest::class: 
     echo "ground request"; 
     break; 
} 

इस तरह नेमस्पेस की तुलना ठीक से की जाती है (आपको उन्हें टाइप करने की आवश्यकता नहीं है) और यदि नामस्थान या कक्षा के नाम जैसे कुछ भी बदलते हैं तो आपको एक सभ्य आईडीई त्रुटि मिल जाएगी जो आपको सूचित करती है कि आपका कोड टूटा हुआ है।

+0

याद रखें कि इस तरह से आप सबक्लास (वर्ग विरासत और कार्यान्वयन) याद करते हैं –

38

इस तरह से कुछ:

$class = get_class($objectToTest); 

switch($class) { 
    case 'TreeRequest': 
     echo "tree request"; 
     break; 
    case 'GroundRequest': 
     echo "ground request"; 
     break; 
} 

या इस:

switch(true) { 
    case $objectToTest instanceof TreeRequest: 
     echo "tree request"; 
     break; 
    case $objectToTest instanceof GroundRequest: 
     echo "ground request"; 
     break; 
} 
+3

वह दूसरा एक अच्छा चाल है। –

+0

जो स्विच (सत्य), +1: –

+10

पहले उदाहरण का उपयोग करने वाले किसी को भी चेतावनी: यह 'exampleof' जैसा नहीं है क्योंकि यह वर्ग विरासत और कार्यान्वयन को अनदेखा करता है। – SEoF

संबंधित मुद्दे