2015-05-21 8 views
88

PHP 7, जो इस वर्ष नवंबर में बाहर आएगा, स्पेसशिप (< =>) ऑपरेटर पेश करेगा। यह क्या है और यह कैसे काम करता है?PHP 7 में <=> ('स्पेसशिप' ऑपरेटर) क्या है?

इस प्रश्न में पहले से ही PHP ऑपरेटरों के बारे में हमारे सामान्य संदर्भ प्रश्न में an answer है।

+0

वर्तमान PHP संस्करण PHP 5.x है, PHP 7 शायद एक मसौदा है और भविष्य में कई बार बदला जा सकता है। – panther

+0

http://www.crazyengineers.com/threads/php7- स्पेसशिप- ऑपरेटर- एक्सप्लानेशन-क्वेशन-answers.79761/ – Cactus

+0

https://wiki.php.net/rfc/combined-comparison-operator – mpkorstanje

उत्तर

138

यह <=> ऑपरेटर तुलना संयुक्त पेशकश करेंगे कि वह ऐसा करेगा:

Return 0 if values on either side are equal 
Return 1 if value on the left is greater 
Return -1 if the value on the right is greater 

संयुक्त तुलना ऑपरेटर द्वारा इस्तेमाल किया नियमों पीएचपी अर्थात द्वारा वर्तमान में उपयोग किया तुलना ऑपरेटर के रूप में ही हैं। <, <=, ==, >= और >। जो लोग पर्ल या रूबी प्रोग्रामिंग पृष्ठभूमि से हैं वे PHP7 के लिए प्रस्तावित इस नए ऑपरेटर से पहले ही परिचित हो सकते हैं।

//Comparing Integers 

    echo 1 <=> 1; //ouputs 0 
    echo 3 <=> 4; //outputs -1 
    echo 4 <=> 3; //outputs 1 

    //String Comparison 

    echo "x" <=> "x"; // 0 
    echo "x" <=> "y"; //-1 
    echo "y" <=> "x"; //1 
+5

लेकिन तारों की तुलना कैसे की जाती है? क्या यह पात्रों में दिख रहा है, तारों में वर्णों की गिनती है और इसी तरह? –

+0

@AltafHussain इस उत्तर को देखें: (http://stackoverflow.com/a/17371819/4337069) –

+0

इसे PHP में स्पेसशिप ऑपरेटर के रूप में भी जाना जाता है, http://www.techflirt.com/spaceship पर पूरा विवरण प्रकाशित किया गया था -operator-इन-php –

0

इसकी संयुक्त तुलना के लिए एक नया ऑपरेटर। व्यवहार में strcmp() या version_compare() के समान, लेकिन इसका उपयोग सभी जेनेरिक PHP मानों पर उसी अर्थशास्त्र के साथ <, < =, ==,> =,> के रूप में किया जा सकता है। यह 0 देता है यदि दोनों ऑपरेंड बराबर हैं, 1 यदि बाएं अधिक है, और -1 यदि दाएं अधिक है। यह हमारे मौजूदा तुलना ऑपरेटर द्वारा उपयोग किए जाने वाले बिल्कुल समान तुलना नियमों का उपयोग करता है: <, < =, ==,> = और>।

click here to know more

31

the RFC that introduced the operator के अनुसार, $a <=> $b का मूल्यांकन करता है करने के लिए:

  • 0 यदि $a == $b
  • -1 अगर $a < $b
  • 1 यदि $a > $b

क Ich, हर परिदृश्य मैं कोशिश की है में व्यवहार में मामला प्रतीत हो रहा है हालांकि सख्ती official docs केवल थोड़ा कमजोर गारंटी प्रदान कि $a <=> $b

एक पूर्णांक से कम बराबर वापस आ जाएगी, या शून्य से अधिक जब $a क्रमश: कम से कम, के बराबर, या $b

बावजूद से अधिक है, तुम क्यों इस तरह के एक ऑपरेटर चाहेंगे? दोबारा, आरएफसी इसे संबोधित करता है - usort (और इसी तरह के uasort और uksort) के लिए तुलनात्मक कार्यों को लिखना अधिक सुविधाजनक बनाने के लिए यह काफी अधिक है।

usort अपनी पहली तर्क के रूप में क्रमबद्ध करने के लिए एक सरणी लेता है, और उपयोगकर्ता परिभाषित तुलना फ़ंक्शन को इसके दूसरे तर्क के रूप में। यह उस तुलना फ़ंक्शन का उपयोग यह निर्धारित करने के लिए करता है कि सरणी से तत्वों की एक जोड़ी अधिक है। तुलनात्मक कार्य को वापस करने की आवश्यकता है:

शून्य से कम, बराबर या शून्य से अधिक पूर्णांक, यदि पहला तर्क क्रमशः कम से कम, बराबर या उससे अधिक माना जाता है।

$things = [ 
    [ 
     'foo' => 5.5, 
     'bar' => 'abc' 
    ], 
    [ 
     'foo' => 7.7, 
     'bar' => 'xyz' 
    ], 
    [ 
     'foo' => 2.2, 
     'bar' => 'efg' 
    ] 
]; 

// Sort $things by 'foo' property, ascending 
usort($things, function ($a, $b) { 
    return $a['foo'] <=> $b['foo']; 
}); 

// Sort $things by 'bar' property, descending 
usort($things, function ($a, $b) { 
    return $b['bar'] <=> $a['bar']; 
}); 

अधिक तुलना कार्यों का उदाहरण अंतरिक्ष यान ऑपरेटर का उपयोग करके लिखा आरएफसी की Usefulness अनुभाग में पाया जा सकता है:

अंतरिक्ष यान ऑपरेटर इस संक्षिप्त और सुविधाजनक बनाता है।

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