significa que operadores operador logico expresiones ejemplo aritmeticos php ternary-operator null-coalescing-operator php-7

que - El operador de unión nulo de C#(??) en PHP



php operador logico or (6)

Antes de PHP 7, no hay. Si necesita involucrar a isset , el patrón a usar es isset($var) ? $var : null isset($var) ? $var : null . No hay operador ?: Que incluye las características de isset .

¿Hay un operador ternario o similar en PHP que actúa como ?? De c#?

?? en C # es limpio y más corto, pero en PHP tienes que hacer algo como:

// This is absolutely okay except that $_REQUEST[''test''] is kind of redundant. echo isset($_REQUEST[''test''])? $_REQUEST[''test''] : ''hi''; // This is perfect! Shorter and cleaner, but only in this situation. echo null? : ''replacement if empty''; // This line gives error when $_REQUEST[''test''] is NOT set. echo $_REQUEST[''test'']?: ''hi'';


El wiki.php.net/rfc/isset_ternary , ( ?? ) ha sido aceptado e implementado en PHP 7 . Se diferencia del operador ternario corto ( ?: ?? eso ?? suprimirá la E_NOTICE que de lo contrario ocurriría al intentar acceder a una matriz donde no tiene una clave. El primer ejemplo en el RFC da:

$username = $_GET[''user''] ?? ''nobody''; // equivalent to: $username = isset($_GET[''user'']) ? $_GET[''user''] : ''nobody'';

Tenga en cuenta que el ?? El operador no requiere la aplicación manual de isset para evitar la E_NOTICE .


No existe un operador idéntico a partir de PHP 5.6, pero puede realizar una función que se comporte de manera similar.

/** * Returns the first entry that passes an isset() test. * * Each entry can either be a single value: $value, or an array-key pair: * $array, $key. If all entries fail isset(), or no entries are passed, * then first() will return null. * * $array must be an array that passes isset() on its own, or it will be * treated as a standalone $value. $key must be a valid array key, or * both $array and $key will be treated as standalone $value entries. To * be considered a valid key, $key must pass: * * is_null($key) || is_string($key) || is_int($key) || is_float($key) * || is_bool($key) * * If $value is an array, it must be the last entry, the following entry * must be a valid array-key pair, or the following entry''s $value must * not be a valid $key. Otherwise, $value and the immediately following * $value will be treated as an array-key pair''s $array and $key, * respectfully. See above for $key validity tests. */ function first(/* [(array $array, $key) | $value]... */) { $count = func_num_args(); for ($i = 0; $i < $count - 1; $i++) { $arg = func_get_arg($i); if (!isset($arg)) { continue; } if (is_array($arg)) { $key = func_get_arg($i + 1); if (is_null($key) || is_string($key) || is_int($key) || is_float($key) || is_bool($key)) { if (isset($arg[$key])) { return $arg[$key]; } $i++; continue; } } return $arg; } if ($i < $count) { return func_get_arg($i); } return null; }

Uso:

$option = first($option_override, $_REQUEST, ''option'', $_SESSION, ''option'', false);

Esto intentaría con cada variable hasta que encuentre una que satisfaga a isset() :

  1. $option_override
  2. $_REQUEST[''option'']
  3. $_SESSION[''option'']
  4. false

Si 4 no estuvieran allí, por defecto sería null .

Nota: hay una implementación más sencilla que utiliza referencias, pero tiene el efecto secundario de 3v4l.org/9vmFR . Esto puede ser problemático cuando el tamaño o la veracidad de una matriz son importantes.


PHP 7 agrega el operador de unión nula :

// Fetches the value of $_GET[''user''] and returns ''nobody'' // if it does not exist. $username = $_GET[''user''] ?? ''nobody''; // This is equivalent to: $username = isset($_GET[''user'']) ? $_GET[''user''] : ''nobody'';

También puede buscar una forma breve de escribir el operador ternario de php ?: (Solo php = = 5.3)

// Example usage for: Short Ternary Operator $action = $_POST[''action''] ?: ''default''; // The above is identical to $action = $_POST[''action''] ? $_POST[''action''] : ''default'';

Y su comparación con C # no es justa. "en PHP tiene que hacer algo como": en C # también tendrá un error de tiempo de ejecución si intenta acceder a un elemento de matriz / diccionario que no existe.


Yo uso la función. Obviamente no es un operador, pero parece más limpio que tu enfoque:

function isset_or(&$check, $alternate = NULL) { return (isset($check)) ? $check : $alternate; }

Uso:

isset_or($_REQUEST[''test''],''hi'');


?? Es binario en C #, no ternario. Y no tiene equivalencia en PHP antes de PHP 7.