code: private static function compareTypes($var1, $var2)
      {
          if ($var1 === null) {
              return -1;
          }
          if ($var2 === null) {
              return 1;
          }
          if (is_bool($var1)) {
              return -1;
          }
          if (is_bool($var2)) {
              return 1;
          }
          
          return 0;
      }
docs: 異なる値 $var1, $var2 について,
  一方が NULL や FALSE などの値だった場合の大小関係を定義します.
  この実装は NULL < FALSE < その他 という順序付けをします.
  
  @param  mixed $var1
  @param  mixed $var2
  @return int   比較結果が等しい場合は 0, $var1 > $var2 の場合は 1, それ以外は -1