php ?? - ¿Cuál es la diferencia entre<>y!=




operator que (7)

Esta pregunta ya tiene una respuesta aquí:

En PHP para verificar la no igualdad (sin verificar el tipo) puede hacer esto:

if( A != B ) {
    DO SOMETHING;
}

Pero también puedes hacer esto, que tiene el mismo resultado:

if( A <> B ) {
    DO SOMETHING;
}

¿Hay alguna diferencia?

¿Utilizando != Over <> cambia la evaluación de alguna manera, forma o forma?


Answers

No es diferente, ¡pero creo que lo recuerdo! = Fue más rápido una vez, porque hice una prueba y descubrí que <> estaba ejecutando los métodos "diff" de los objetos que estaba comparando, que pueden ser más lentos que los "comparar "métodos.


Ninguna diferencia.

Sin embargo != Permite la conveniencia de agregar más fácilmente una comparación de tipo extra = for force.


Uno es viejo, uno es nuevo.

Según el manual :

$a != $b    Not equal   TRUE if $a is not equal to $b after type juggling.
$a <> $b    Not equal   TRUE if $a is not equal to $b after type juggling.

utilizar != .

La diferencia menor: también hay un orden de precedencia. mira aquí.

<> viene antes != en la tabla de precedencia, pero logran exactamente lo mismo.


Como se mencionó en el php.net/manual/en/language.operators.comparison.php , <> y != Son solo sinónimos. Eso significa que son completamente intercambiables. La historia de php es un poco salvaje, por lo que las convenciones de nomenclatura, incluso hasta el punto en que se debe llamar a los operadores, eran y aún no están realmente unificadas.


No hay diferencia. Supongo que <> es algo que se agregó en una versión posterior de php. Me recuerda algo a Python. Creo que es lo mismo con el uso de AND o && para el operador y


Olvidando la documentación por un minuto, echemos un vistazo al código fuente. Empecemos con el escáner (lexer) :

<ST_IN_SCRIPTING>"!="|"<>" {
    return T_IS_NOT_EQUAL;
}

Así que se analizan al mismo token. Vamos a ver el analizador :

expr T_IS_NOT_EQUAL expr { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }

Entonces, sabemos que el código de operación que se disparó es ZEND_IS_NOT_EQUAL ...

Ahora, vamos a ver la operación :

static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
    USE_OPLINE

    zval *result = &EX_T(opline->result.var).tmp_var;

    SAVE_OPLINE();
    ZVAL_BOOL(result, fast_not_equal_function(result,
        opline->op1.zv,
        opline->op2.zv TSRMLS_CC));

    CHECK_EXCEPTION();
    ZEND_VM_NEXT_OPCODE();
}

Así que, literalmente, no hay diferencia. Dado que se analizan en el mismo token, tienen exactamente la misma prioridad (por lo que los documentos son incorrectos o engañosos). Ya que usan el mismo ejecutor, y no hay un punto de decisión en la rutina del código de operación, ejecutan un código idéntico.

Así que sí, <> y != Son 100% intercambiables, y no hay absolutamente ninguna razón técnica para usar una sobre la otra.

Dicho esto, hay algo importante que ganar al ser consistente. Así que recomiendo seguir con != Y terminar con esto ...

Editar

He actualizado los documentos para reflejar esto, y he solucionado otro problema con el orden de prioridad (++ y - tienen la misma prioridad que la conversión). Compruébelo en docs.php.net


Aquí hay una función de PHP que insertará una fila solo si todos los valores de columnas especificados no existen en la tabla.

  • Si una de las columnas difiere, se agregará la fila.

  • Si la tabla está vacía, se agregará la fila.

  • Si existe una fila donde todas las columnas especificadas tienen los valores especificados, la fila no se agregará.

    function insert_unique($table, $vars)
    {
      if (count($vars)) {
        $table = mysql_real_escape_string($table);
        $vars = array_map('mysql_real_escape_string', $vars);
    
        $req = "INSERT INTO `$table` (`". join('`, `', array_keys($vars)) ."`) ";
        $req .= "SELECT '". join("', '", $vars) ."' FROM DUAL ";
        $req .= "WHERE NOT EXISTS (SELECT 1 FROM `$table` WHERE ";
    
        foreach ($vars AS $col => $val)
          $req .= "`$col`='$val' AND ";
    
        $req = substr($req, 0, -5) . ") LIMIT 1";
    
        $res = mysql_query($req) OR die();
        return mysql_insert_id();
      }
    
      return False;
    }
    

Ejemplo de uso:

<?php
insert_unique('mytable', array(
  'mycolumn1' => 'myvalue1',
  'mycolumn2' => 'myvalue2',
  'mycolumn3' => 'myvalue3'
  )
);
?>




php operators