PHP में तुलना की तुलना में टाइप-जुगलिंग और(सख्त) अधिक/कम




if-statement comparison (3)

PHP की तुलना ऑपरेटर कंप्यूटर-वैज्ञानिक परिभाषाओं से कई तरीकों से विचलित हो जाते हैं:

समकक्ष संबंध बनाने के लिए == को रिफ्लेक्सिव, सममित और संक्रमणीय होना चाहिए:

  • PHP का == ऑपरेटर रिफ्लेक्सिव नहीं है , यानी $a == $a हमेशा सत्य नहीं होता है:

    var_dump(NAN == NAN); // bool(false)
    

    नोट: तथ्य यह है कि NAN से जुड़ी कोई भी तुलना हमेशा false है, यह PHP के लिए विशिष्ट नहीं है। यह आईईईई 754 मानक फ्लोटिंग-पॉइंट अंकगणितीय ( अधिक जानकारी ) के लिए मानक है।

  • PHP का == ऑपरेटर सममित है , यानी $a == $b और $b == $a हमेशा समान होते हैं।

  • PHP का == ऑपरेटर संक्रमणीय नहीं है , यानी $a == $b और $b == $c पालन नहीं करता है:

    var_dump(true == "a"); // bool(true)
    var_dump("a" == 0);    // bool(true)
    var_dump(true == 0);   // bool(false)
    

आंशिक क्रम बनाने के लिए <= / >= को रिफ्लेक्सिव, एंटी-सममित और संक्रमणीय होना चाहिए:

  • PHP का <= ऑपरेटर रिफ्लेक्सिव नहीं है , यानी $a <= $a हमेशा सत्य नहीं है (उदाहरण == लिए उदाहरण)।

  • PHP का <= ऑपरेटर एंटी-सममित नहीं है , यानी $a <= $b और $b <= $a $a == $b का पालन नहीं करता है:

    var_dump(NAN <= "foo"); // bool(true)
    var_dump("foo" <= NAN); // bool(true)
    var_dump(NAN == "foo"); // bool(false)
    
  • PHP का <= ऑपरेटर संक्रमणीय नहीं है , यानी $a <= $b और $b <= $c $a <= $c (उदाहरण == समान उदाहरण) का पालन नहीं करता है।

  • अतिरिक्त: PHP का <= ऑपरेटर कुल नहीं है , यानी $a <= $b और $b <= $a झूठा हो सकता है:

    var_dump(new stdClass <= new DateTime); // bool(false)
    var_dump(new DateTime <= new stdClass); // bool(false)
    

एक सख्त आंशिक आदेश बनाने के लिए < / > अपरिवर्तनीय, असममित और संक्रमणीय होना चाहिए:

  • PHP का < ऑपरेटर अपरिवर्तनीय है , यानी $a < $a कभी सच नहीं है। ध्यान दें कि यह केवल PHP 5.4 के रूप में सच है। पहले INF < INF true

  • PHP का < ऑपरेटर असममित नहीं है , यानि $a < $b से $a < $b का पालन नहीं करता है !($b < $a) (उदाहरण के लिए <= विरोधी-सममित नहीं है)।

  • PHP का < ऑपरेटर संक्रमणीय नहीं है , यानि $a < $b और $b < $c का पालन नहीं करता है:

    var_dump(-INF < 0);    // bool(true)
    var_dump(0 < TRUE);    // bool(true)
    var_dump(-INF < TRUE); // bool(false)
    
  • अतिरिक्त: PHP का < ऑपरेटर trichotomous नहीं है , यानी $a < $b , $b < $a और $a == $b झूठा हो सकता है (जैसा उदाहरण <= कुल नहीं है)।

  • अतिरिक्त: PHP का < ऑपरेटर परिपत्र हो सकता है, यानी यह संभव है कि $a < $b , $b < $c और $c < $a :

    var_dump(INF < []);           // bool(true)
    var_dump([] < new stdClass);  // bool(true)
    var_dump(new stdClass < INF); // bool(true)
    

    नोट: उपर्युक्त उदाहरण "वर्ग का ऑब्जेक्ट stdClass को डबल में परिवर्तित नहीं किया जा सका" नोटिस फेंकता है।

आप PHP Sadness 52 - तुलना ऑपरेटर पर PHP के तुलना ऑपरेटर के लिए कुछ अच्छे ग्राफ पा सकते हैं।

आखिरी नोट के रूप में, मैं यह इंगित करना चाहता हूं कि PHP की गारंटी के दो समानताएं हैं (अन्य सभी चीज़ों के विपरीत)। ये दोनों हमेशा पकड़ते हैं, क्योंकि संकलक एक दूसरे को कम कर देता है:

($a > $b) == ($b < $a)
($a >= $b) == ($b <= $a)

PHP अपने टाइप-जॉगलिंग के लिए प्रसिद्ध है। मुझे इसे पहेली को स्वीकार करना होगा, और तुलना में मुझे मूल तार्किक / मौलिक चीजों को खोजने में कठिनाई हो रही है।

उदाहरण के लिए: यदि $a > $b सत्य है और $b > $c सत्य है, तो इसका मतलब यह होना चाहिए कि $a > $c हमेशा भी सच है?

बुनियादी तर्क के बाद, मैं हां कहूंगा हालांकि मैं परेशान हूं कि मैं वास्तव में इस पर PHP पर भरोसा नहीं करता हूं। शायद कोई ऐसा उदाहरण प्रदान कर सकता है जहां यह मामला नहीं है?

इसके अलावा मैं ऑपरेटरों की तुलना में सख्त से कम और सख्त से अधिक सोच रहा हूं (क्योंकि उनके अर्थ को सख्ती से वर्णित किया गया है जिसे मैं केवल समानता तुलना से अतीत में जानता था) यदि बाएं और दाएं ऑपरेंड के साथ बदल दिया जाता है तो इससे कोई फर्क पड़ता है कड़ाई से असमान मूल्य:

# Precondition:
if ($a === $b) {
    throw new Exception(
       'Both are strictly equal - can not compare strictly for greater or smaller'
    );
}

($a > $b) !== ($b > $a)

अधिकांश प्रकार की तुलना संयोजनों के लिए इन बड़े / कम तुलना ऑपरेटर दस्तावेज नहीं किए जाते हैं, इसलिए मैन्युअल को पढ़ने से इस मामले में वास्तव में सहायक नहीं था।


PHP में कोई सख्त समान तुलना ऑपरेटर ( >== या <== ) नहीं हैं (कम से कम PHP 5.6.14 द्वारा) , लेकिन ग्रेटर / लोअर की जांच करने से पहले सख्त प्रकार की जांच को लागू करने के कुछ तरीके हैं:

  1. दोनों वैरिएबल प्रकारों को जांचें if (gettype($a) === gettype($b))
  2. अपने आवश्यक प्रकार-कलाकार उदाहरण के लिए मजबूर करें। if ((string)$a === (string)$b)
  3. अपने आवश्यक प्रकार-जॉगल उदाहरण के लिए मजबूर करें। if (($a . '') === ($b . ''))

ध्यान दें कि:

  • फ़्लोटिंग पॉइंट परिशुद्धता सीमित है
  • INF और ieee754 तहत float प्रकार के हैं
  • कुछ इन्फिनिटी कुछ अन्य इन्फिनिटी के बराबर होती है (PHP 5.4 के बाद से)
  • वैज्ञानिक नोटेशन e हमेशा float प्रकार का होता है, और संख्या छोटा होने पर भी integer नहीं होती है
  • PHP_INT_MAX पर जाने वाले PHP_INT_MAX स्वचालित रूप से float परिवर्तित हो जाते हैं
  • सिस्टम की सीमाओं पर INF मूल्य प्राप्त करते हैं
  • अपरिभाषित चर प्रकार और मान के NULL
  • 0 से पहले के इंटीग्रर्स ऑक्टल से दशमलव तक परिवर्तित होते हैं (सम्मेलन द्वारा)
  • अग्रणी 0 से पूर्णांक के साथ एक पूर्णांक युक्त स्ट्रिंग्स को परिवर्तित करना अग्रणी 0 स्ट्रिप्स करता है

कुछ विदेशी तुलनाओं की सूची:

Very strange:
     $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
  float(NAN)    float(-INF)     false   false   false   false   false   false
  float(NAN)      float(0)      false   false   false   false   false   false
  float(NAN)      float(1)      false   false   false   false   false   false
  float(NAN)     float(INF)     false   false   false   false   false   false
  float(NAN)     float(NAN)     false   false   false   false   false   false
  float(NAN)      int(-1)       false   false   false   false   false   false
  float(NAN)       int(0)       false   false   false   false   false   false
  float(NAN)       int(1)       false   false   false   false   false   false

समान लेकिन समान नहीं:

     $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
  NULL(NULL)      array()       false   false    true    true    true   false
  NULL(NULL)    bool(false)     false   false    true    true    true   false
  NULL(NULL)      float(0)      false   false    true    true    true   false
  NULL(NULL)       int(0)       false   false    true    true    true   false
  NULL(NULL)      str('')       false   false    true    true    true   false
   array()      bool(false)     false   false    true    true    true   false
 bool(false)      float(0)      false   false    true    true    true   false
 bool(false)       int(0)       false   false    true    true    true   false
   str('')      bool(false)     false   false    true    true    true   false
 bool(false)      str('0')      false   false    true    true    true   false
 float(-INF)     bool(true)     false   false    true    true    true   false
  bool(true)      float(1)      false   false    true    true    true   false
  float(INF)     bool(true)     false   false    true    true    true   false
  float(NAN)     bool(true)     false   false    true    true    true   false
  bool(true)      int(-1)       false   false    true    true    true   false
  bool(true)       int(1)       false   false    true    true    true   false
  bool(true)     str("\0")      false   false    true    true    true   false
  bool(true)      str('+')      false   false    true    true    true   false
  bool(true)      str('-')      false   false    true    true    true   false
  bool(true)     str('01')      false   false    true    true    true   false
  bool(true)      str('1')      false   false    true    true    true   false
  bool(true)    str('false')    false   false    true    true    true   false
 str('text')     bool(true)     false   false    true    true    true   false
 str('true')     bool(true)     false   false    true    true    true   false
    int(0)        float(0)      false   false    true    true    true   false
  str("\0")       float(0)      false   false    true    true    true   false
   str('')        float(0)      false   false    true    true    true   false
   str('+')       float(0)      false   false    true    true    true   false
   str('-')       float(0)      false   false    true    true    true   false
   str('0')       float(0)      false   false    true    true    true   false
 str('false')     float(0)      false   false    true    true    true   false
 str('text')      float(0)      false   false    true    true    true   false
 str('true')      float(0)      false   false    true    true    true   false
    int(1)        float(1)      false   false    true    true    true   false
   float(1)      str('01')      false   false    true    true    true   false
   float(1)       str('1')      false   false    true    true    true   false
  str("\0")        int(0)       false   false    true    true    true   false
   str('')         int(0)       false   false    true    true    true   false
   str('+')        int(0)       false   false    true    true    true   false
   str('-')        int(0)       false   false    true    true    true   false
    int(0)        str('0')      false   false    true    true    true   false
 str('false')      int(0)       false   false    true    true    true   false
 str('text')       int(0)       false   false    true    true    true   false
 str('true')       int(0)       false   false    true    true    true   false
    int(1)       str('01')      false   false    true    true    true   false
    int(1)        str('1')      false   false    true    true    true   false
   str('1')      str('01')      false   false    true    true    true   false

एक ही समय में निचला और ग्रेटर?

     $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
  float(NAN)     str("\0")       true    true    true    true   false   false
  float(NAN)      str('')        true    true    true    true   false   false
  float(NAN)      str('+')       true    true    true    true   false   false
  float(NAN)      str('-')       true    true    true    true   false   false
  float(NAN)      str('0')       true    true    true    true   false   false
  float(NAN)     str('01')       true    true    true    true   false   false
  float(NAN)      str('1')       true    true    true    true   false   false
  float(NAN)    str('false')     true    true    true    true   false   false
  float(NAN)    str('text')      true    true    true    true   false   false
  float(NAN)    str('true')      true    true    true    true   false   false

समान और समान:

     $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
  NULL(NULL)     NULL(NULL)     false   false    true    true    true    true
 float(-INF)    float(-INF)     false   false    true    true    true    true
  float(INF)     float(INF)     false   false    true    true    true    true

निचला या ग्रेटर:

     $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
  NULL(NULL)     bool(true)     false    true    true   false   false   false
 float(-INF)     NULL(NULL)      true   false   false    true   false   false
  NULL(NULL)      float(1)      false    true    true   false   false   false
  float(INF)     NULL(NULL)      true   false   false    true   false   false
  float(NAN)     NULL(NULL)      true   false   false    true   false   false
  NULL(NULL)      int(-1)       false    true    true   false   false   false
  NULL(NULL)       int(1)       false    true    true   false   false   false
  NULL(NULL)     str("\0")      false    true    true   false   false   false
  NULL(NULL)      str('+')      false    true    true   false   false   false
  NULL(NULL)      str('-')      false    true    true   false   false   false
  NULL(NULL)      str('0')      false    true    true   false   false   false
  NULL(NULL)     str('01')      false    true    true   false   false   false
  NULL(NULL)      str('1')      false    true    true   false   false   false
  NULL(NULL)    str('false')    false    true    true   false   false   false
  NULL(NULL)    str('text')     false    true    true   false   false   false
  NULL(NULL)    str('true')     false    true    true   false   false   false
   array()       bool(true)     false    true    true   false   false   false
 float(-INF)      array()       false    true    true   false   false   false
   array()        float(0)       true   false   false    true   false   false
   array()        float(1)       true   false   false    true   false   false
  float(INF)      array()       false    true    true   false   false   false
  float(NAN)      array()       false    true    true   false   false   false
   array()        int(-1)        true   false   false    true   false   false
   array()         int(0)        true   false   false    true   false   false
   array()         int(1)        true   false   false    true   false   false
   array()       str("\0")       true   false   false    true   false   false
   str('')        array()       false    true    true   false   false   false
   array()        str('+')       true   false   false    true   false   false
   array()        str('-')       true   false   false    true   false   false
   array()        str('0')       true   false   false    true   false   false
   array()       str('01')       true   false   false    true   false   false
   array()        str('1')       true   false   false    true   false   false
   array()      str('false')     true   false   false    true   false   false
   array()      str('text')      true   false   false    true   false   false
   array()      str('true')      true   false   false    true   false   false
  bool(true)    bool(false)      true   false   false    true   false   false
 float(-INF)    bool(false)      true   false   false    true   false   false
   float(1)     bool(false)      true   false   false    true   false   false
  float(INF)    bool(false)      true   false   false    true   false   false
  float(NAN)    bool(false)      true   false   false    true   false   false
 bool(false)      int(-1)       false    true    true   false   false   false
    int(1)      bool(false)      true   false   false    true   false   false
 bool(false)     str("\0")      false    true    true   false   false   false
 bool(false)      str('+')      false    true    true   false   false   false
 bool(false)      str('-')      false    true    true   false   false   false
 bool(false)     str('01')      false    true    true   false   false   false
   str('1')     bool(false)      true   false   false    true   false   false
 bool(false)    str('false')    false    true    true   false   false   false
 str('text')    bool(false)      true   false   false    true   false   false
 str('true')    bool(false)      true   false   false    true   false   false
  bool(true)      float(0)       true   false   false    true   false   false
  bool(true)       int(0)        true   false   false    true   false   false
   str('')       bool(true)     false    true    true   false   false   false
  bool(true)      str('0')       true   false   false    true   false   false
 float(-INF)      float(0)      false    true    true   false   false   false
 float(-INF)      float(1)      false    true    true   false   false   false
  float(INF)    float(-INF)      true   false   false    true   false   false
 float(-INF)      int(-1)       false    true    true   false   false   false
 float(-INF)       int(0)       false    true    true   false   false   false
 float(-INF)       int(1)       false    true    true   false   false   false
 float(-INF)     str("\0")      false    true    true   false   false   false
 float(-INF)      str('')       false    true    true   false   false   false
 float(-INF)      str('+')      false    true    true   false   false   false
 float(-INF)      str('-')      false    true    true   false   false   false
 float(-INF)      str('0')      false    true    true   false   false   false
 float(-INF)     str('01')      false    true    true   false   false   false
 float(-INF)      str('1')      false    true    true   false   false   false
 float(-INF)    str('false')    false    true    true   false   false   false
 float(-INF)    str('text')     false    true    true   false   false   false
 float(-INF)    str('true')     false    true    true   false   false   false
   float(1)       float(0)       true   false   false    true   false   false
  float(INF)      float(0)       true   false   false    true   false   false
   float(0)       int(-1)        true   false   false    true   false   false
    int(1)        float(0)       true   false   false    true   false   false
   float(0)      str('01')      false    true    true   false   false   false
   str('1')       float(0)       true   false   false    true   false   false
  float(INF)      float(1)       true   false   false    true   false   false
   float(1)       int(-1)        true   false   false    true   false   false
   float(1)        int(0)        true   false   false    true   false   false
   float(1)      str("\0")       true   false   false    true   false   false
   str('')        float(1)      false    true    true   false   false   false
   float(1)       str('+')       true   false   false    true   false   false
   float(1)       str('-')       true   false   false    true   false   false
   float(1)       str('0')       true   false   false    true   false   false
   float(1)     str('false')     true   false   false    true   false   false
 str('text')      float(1)      false    true    true   false   false   false
 str('true')      float(1)      false    true    true   false   false   false
  float(INF)      int(-1)        true   false   false    true   false   false
  float(INF)       int(0)        true   false   false    true   false   false
  float(INF)       int(1)        true   false   false    true   false   false
  float(INF)     str("\0")       true   false   false    true   false   false
  float(INF)      str('')        true   false   false    true   false   false
  float(INF)      str('+')       true   false   false    true   false   false
  float(INF)      str('-')       true   false   false    true   false   false
  float(INF)      str('0')       true   false   false    true   false   false
  float(INF)     str('01')       true   false   false    true   false   false
  float(INF)      str('1')       true   false   false    true   false   false
  float(INF)    str('false')     true   false   false    true   false   false
  float(INF)    str('text')      true   false   false    true   false   false
  float(INF)    str('true')      true   false   false    true   false   false
    int(0)        int(-1)        true   false   false    true   false   false
    int(1)        int(-1)        true   false   false    true   false   false
  str("\0")       int(-1)        true   false   false    true   false   false
   str('')        int(-1)        true   false   false    true   false   false
   str('+')       int(-1)        true   false   false    true   false   false
   str('-')       int(-1)        true   false   false    true   false   false
   str('0')       int(-1)        true   false   false    true   false   false
   int(-1)       str('01')      false    true    true   false   false   false
   str('1')       int(-1)        true   false   false    true   false   false
 str('false')     int(-1)        true   false   false    true   false   false
 str('text')      int(-1)        true   false   false    true   false   false
 str('true')      int(-1)        true   false   false    true   false   false
    int(1)         int(0)        true   false   false    true   false   false
    int(0)       str('01')      false    true    true   false   false   false
   str('1')        int(0)        true   false   false    true   false   false
    int(1)       str("\0")       true   false   false    true   false   false
   str('')         int(1)       false    true    true   false   false   false
    int(1)        str('+')       true   false   false    true   false   false
    int(1)        str('-')       true   false   false    true   false   false
    int(1)        str('0')       true   false   false    true   false   false
    int(1)      str('false')     true   false   false    true   false   false
 str('text')       int(1)       false    true    true   false   false   false
 str('true')       int(1)       false    true    true   false   false   false
   str('')       str("\0")      false    true    true   false   false   false
   str('+')      str("\0")       true   false   false    true   false   false
   str('-')      str("\0")       true   false   false    true   false   false
  str("\0")       str('0')      false    true    true   false   false   false
  str("\0")      str('01')      false    true    true   false   false   false
   str('1')      str("\0")       true   false   false    true   false   false
 str('false')    str("\0")       true   false   false    true   false   false
 str('text')     str("\0")       true   false   false    true   false   false
 str('true')     str("\0")       true   false   false    true   false   false
   str('')        str('+')      false    true    true   false   false   false
   str('')        str('-')      false    true    true   false   false   false
   str('')        str('0')      false    true    true   false   false   false
   str('')       str('01')      false    true    true   false   false   false
   str('')        str('1')      false    true    true   false   false   false
   str('')      str('false')    false    true    true   false   false   false
   str('')      str('text')     false    true    true   false   false   false
   str('')      str('true')     false    true    true   false   false   false
   str('-')       str('+')       true   false   false    true   false   false
   str('+')       str('0')      false    true    true   false   false   false
   str('+')      str('01')      false    true    true   false   false   false
   str('1')       str('+')       true   false   false    true   false   false
 str('false')     str('+')       true   false   false    true   false   false
 str('text')      str('+')       true   false   false    true   false   false
 str('true')      str('+')       true   false   false    true   false   false
   str('-')       str('0')      false    true    true   false   false   false
   str('-')      str('01')      false    true    true   false   false   false
   str('1')       str('-')       true   false   false    true   false   false
 str('false')     str('-')       true   false   false    true   false   false
 str('text')      str('-')       true   false   false    true   false   false
 str('true')      str('-')       true   false   false    true   false   false
   str('0')      str('01')      false    true    true   false   false   false
   str('1')       str('0')       true   false   false    true   false   false
 str('false')     str('0')       true   false   false    true   false   false
 str('text')      str('0')       true   false   false    true   false   false
 str('true')      str('0')       true   false   false    true   false   false
 str('false')    str('01')       true   false   false    true   false   false
 str('text')     str('01')       true   false   false    true   false   false
 str('true')     str('01')       true   false   false    true   false   false
   str('1')     str('false')    false    true    true   false   false   false
 str('text')      str('1')       true   false   false    true   false   false
 str('true')      str('1')       true   false   false    true   false   false
 str('text')    str('false')     true   false   false    true   false   false
 str('true')    str('false')     true   false   false    true   false   false
 str('true')    str('text')      true   false   false    true   false   false

$a > $b > $c Conundrum कब: $a $c से अधिक नहीं है।

A&ltC   : float(NAN)  &gt  str('a')   &gt   str('')
A&ltC   : float(NAN)  &gt  str('a')   &gt   str('1')
A&ltC   : float(NAN)  &gt  str('a')   &gt   str('A')
A&ltC   : float(NAN)  &gt  str('a')   &gt   str('0')
A&ltC   : float(NAN)  &gt  str('1')   &gt   str('')
A&ltC   : float(NAN)  &gt  str('1')   &gt   str('0')
A&ltC   : float(NAN)  &gt  str('A')   &gt   str('')
A&ltC   : float(NAN)  &gt  str('A')   &gt   str('1')
A&ltC   : float(NAN)  &gt  str('A')   &gt   str('0')
A&ltC   : float(NAN)  &gt  str('0')   &gt   str('')
A&ltC   :   str('')   &gt float(NAN)  &gt   str('a')
A&ltC   :   str('')   &gt float(NAN)  &gt   str('1')
A&ltC   :   str('')   &gt float(NAN)  &gt   str('A')
A&ltC   :   str('')   &gt float(NAN)  &gt   str('0')
A&ltC   :  str('a')   &gt   str('')   &gt  float(NAN)
A&ltC   :  str('a')   &gt  str('1')   &gt  float(NAN)
A&ltC   :  str('a')   &gt  str('A')   &gt  float(NAN)
A&ltC   :  str('a')   &gt  str('0')   &gt  float(NAN)
A&ltC   :  str('0')   &gt   str('')   &gt  float(NAN)
A==C  : bool(true)  &gt   str('')   &gt  float(NAN)
A==C  : bool(true)  &gt   str('')   &gt float(-INF)
A==C  : bool(true)  &gt   str('')   &gt   int(-1)
A==C  : bool(true)  &gt   str('')   &gt  float(-1)
A==C  : bool(true)  &gt   array()   &gt  float(NAN)
A==C  : bool(true)  &gt   array()   &gt  float(INF)
A==C  : bool(true)  &gt   array()   &gt float(-INF)
A==C  : bool(true)  &gt   array()   &gt   str('a')
A==C  : bool(true)  &gt   array()   &gt    int(1)
A==C  : bool(true)  &gt   array()   &gt   float(1)
A==C  : bool(true)  &gt   array()   &gt   str('1')
A==C  : bool(true)  &gt   array()   &gt   str('A')
A==C  : bool(true)  &gt   array()   &gt   int(-1)
A==C  : bool(true)  &gt   array()   &gt  float(-1)
A==C  : bool(true)  &gt   int(0)    &gt float(-INF)
A==C  : bool(true)  &gt   int(0)    &gt   int(-1)
A==C  : bool(true)  &gt   int(0)    &gt  float(-1)
A==C  : bool(true)  &gt  str('0')   &gt  float(NAN)
A==C  : bool(true)  &gt  str('0')   &gt float(-INF)
A==C  : bool(true)  &gt  str('0')   &gt   int(-1)
A==C  : bool(true)  &gt  str('0')   &gt  float(-1)
A==C  : bool(true)  &gt  float(0)   &gt float(-INF)
A==C  : bool(true)  &gt  float(0)   &gt   int(-1)
A==C  : bool(true)  &gt  float(0)   &gt  float(-1)
A==C  :   int(1)    &gt  str('a')   &gt   str('1')
A==C  :   int(1)    &gt  str('A')   &gt   str('1')
A==C  :  float(1)   &gt  str('a')   &gt   str('1')
A==C  :  float(1)   &gt  str('A')   &gt   str('1')
A==C  :  str('a')   &gt  str('1')   &gt    int(0)
A==C  :  str('a')   &gt  str('1')   &gt   float(0)
A==C  :   str('')   &gt float(-INF) &gt  NULL(NULL)
A==C  :   str('')   &gt float(-INF) &gt bool(false)
A==C  :   str('')   &gt   int(-1)   &gt  NULL(NULL)
A==C  :   str('')   &gt   int(-1)   &gt bool(false)
A==C  :   str('')   &gt  float(-1)  &gt  NULL(NULL)
A==C  :   str('')   &gt  float(-1)  &gt bool(false)
A==C  :   array()   &gt float(NAN)  &gt  NULL(NULL)
A==C  :   array()   &gt float(NAN)  &gt bool(false)
A==C  :   array()   &gt float(INF)  &gt  NULL(NULL)
A==C  :   array()   &gt float(INF)  &gt bool(false)
A==C  :   array()   &gt float(-INF) &gt  NULL(NULL)
A==C  :   array()   &gt float(-INF) &gt bool(false)
A==C  :   array()   &gt  str('a')   &gt  NULL(NULL)
A==C  :   array()   &gt  str('a')   &gt bool(false)
A==C  :   array()   &gt   int(1)    &gt  NULL(NULL)
A==C  :   array()   &gt   int(1)    &gt bool(false)
A==C  :   array()   &gt  float(1)   &gt  NULL(NULL)
A==C  :   array()   &gt  float(1)   &gt bool(false)
A==C  :   array()   &gt  str('1')   &gt  NULL(NULL)
A==C  :   array()   &gt  str('1')   &gt bool(false)
A==C  :   array()   &gt  str('A')   &gt  NULL(NULL)
A==C  :   array()   &gt  str('A')   &gt bool(false)
A==C  :   array()   &gt  str('0')   &gt  NULL(NULL)
A==C  :   array()   &gt   int(-1)   &gt  NULL(NULL)
A==C  :   array()   &gt   int(-1)   &gt bool(false)
A==C  :   array()   &gt  float(-1)  &gt  NULL(NULL)
A==C  :   array()   &gt  float(-1)  &gt bool(false)
A==C  :   str('')   &gt float(NAN)  &gt bool(false)
A==C  :   str('')   &gt float(NAN)  &gt  NULL(NULL)
A==C  :  str('A')   &gt  str('1')   &gt    int(0)
A==C  :  str('A')   &gt  str('1')   &gt   float(0)
A==C  :   int(0)    &gt float(-INF) &gt  NULL(NULL)
A==C  :   int(0)    &gt float(-INF) &gt bool(false)
A==C  :   int(0)    &gt   int(-1)   &gt  NULL(NULL)
A==C  :   int(0)    &gt   int(-1)   &gt bool(false)
A==C  :   int(0)    &gt  float(-1)  &gt  NULL(NULL)
A==C  :   int(0)    &gt  float(-1)  &gt bool(false)
A==C  :  str('0')   &gt float(NAN)  &gt bool(false)
A==C  :  str('0')   &gt float(-INF) &gt bool(false)
A==C  :  str('0')   &gt   int(-1)   &gt bool(false)
A==C  :  str('0')   &gt  float(-1)  &gt bool(false)
A==C  :  float(0)   &gt float(-INF) &gt  NULL(NULL)
A==C  :  float(0)   &gt float(-INF) &gt bool(false)
A==C  :  float(0)   &gt   int(-1)   &gt  NULL(NULL)
A==C  :  float(0)   &gt   int(-1)   &gt bool(false)
A==C  :  float(0)   &gt  float(-1)  &gt  NULL(NULL)
A==C  :  float(0)   &gt  float(-1)  &gt bool(false)
A===C :  str('0')   &gt float(NAN)  &gt   str('0')
A===C :   str('')   &gt float(NAN)  &gt   str('')
A===C :  str('a')   &gt float(NAN)  &gt   str('a')
A===C :  str('1')   &gt float(NAN)  &gt   str('1')
A===C :  str('A')   &gt float(NAN)  &gt   str('A')

मज़ा स्ट्रिंग तुलना: 'रानी' > 'किंग' > 'जैक' > 'ऐस'

जोड़ों को कवर करने वाले PHP प्रकार तुलना तालिकाओं को भी देखें:

  • isset() और is_null()
  • if() और empty()
  • बूलियन == बनाम ===

PHP संस्करणों के बीच मतभेदों की जांच करें। http://3v4l.org/MAfDu


आपके प्रश्न के दूसरे भाग में सुधार के बाद, मैं उस हिस्से का जवाब दूसरों को छोड़ देता हूं। मैं सिर्फ आपके प्रश्न के पहले भाग को सबसे आश्चर्यजनक उत्तर देना चाहता हूं, यानी, क्या < और > ऑपरेटरों का अत्याचारी होने का एक उदाहरण है या नहीं। यही पर है।

ये सब true :

"10" < "1a"
"1a" < "2"
"10" > "2"

अगर < संक्रमणीय ( $a < $b$b < $c$a < $c ) था, तो अंतिम पंक्ति होगी

"10" < "2"

लेकिन PHP दयालु (?!) होने की कोशिश करता है और जब भी यह कर सकता है तारों की व्याख्या करता है।

यह पता चला है कि, उपरोक्त intransitivity के कारण, sort() एक ही तत्व को उनके इनपुट आदेश के आधार पर एक अलग क्रम में सॉर्ट कर सकते हैं, भले ही कोई भी दो तत्व == (और कोई तत्व नैन न हो)। मैंने इसे एक टिप्पणी में इंगित किया () , जिसका सार है:

sort(array("10", "1a", "2" )) => array("10", "1a", "2" )
sort(array("10", "2",  "1a")) => array("1a", "2",  "10")
sort(array("1a", "10", "2" )) => array("2",  "10", "1a")
sort(array("1a", "2",  "10")) => array("1a", "2",  "10")
sort(array("2",  "10", "1a")) => array("2",  "10", "1a")
sort(array("2",  "1a", "10")) => array("10", "1a", "2" )




ieee-754