conditional como - PHP-y / o palabras clave




poner lo (5)

Es && lo mismo que "y", y es || lo mismo que "o" en PHP?

He hecho algunas pruebas, y parece que se comportan igual. ¿Hay alguna diferencia?

Si no, ¿hay algún otro signo de PHP que tenga palabras equivalentes y cree que hace que el código sea más fácil de leer?


Answers

Lo que me molesta es:

echo (false and false ? true : true);
// (empty/false)

Puede adivinar que solo existe la salida posible de "1" (verdadero) ya que no hay ningún caso que pueda generar un resultado falso ... ... pero será "" (falso).

Usar && como operador en este caso satisface al menos mis expectativas:

echo (false && false ? true : true);
// 1

Entonces, en algunos casos, el uso es importante.



La diferencia está en la precedencia . ¡Pero no solo comparado el uno con el otro!

En la mayoría de los casos no le importará, pero hay casos específicos en los que tiene que retroceder un paso y observar el panorama general. Toma esto, por ejemplo:

// The result of the expression (true && false) is assigned to $g
// Acts like: ($g = (true && false))
$g = true && false;

// The constant true is assigned to $h before the "and" operation occurs
// Acts like: (($h = true) and false)
$h = true and false;

var_dump($g, $h);

Esto producirá, respectivamente:

bool(false)
bool(true)

En otras palabras, && tiene una preferencia mayor que = , que tiene una precedencia mayor que and , como se indica en http://php.net/manual/en/language.operators.precedence.php . (Se menciona en otras respuestas, pero creo que vale la pena detallar, ya que un mal uso puede conducir a errores lógicos)

Espero que te pueda ayudar. Puede encontrar más en http://php.net/manual/en/language.operators.logical.php


Sí, son lógicamente lo mismo. (Creo que "&&" y "||" son la opción preferida en los estándares de codificación de Zend , pero no puedo encontrar ninguna información específica sobre esto, por lo que podría haber sido un sueño. O algo así.)

Eso dijo:

  1. "&&" y "||" tienen una http://www.php.net/manual/en/language.operators.precedence.php que "Y" y "O" (es poco probable que alguna vez sea relevante, pero nunca se sabe).

  2. Muchos otros lenguajes usan "&&" y "||", en lugar de los equivalentes de texto, por lo que podría ser una idea ir con esto.

  3. Siempre y cuando uses el conjunto de operadores elegido consistentemente, realmente no importa.


Aviso: Índice no definido

Ocurre cuando intenta acceder a una matriz mediante una clave que no existe en la matriz.

Un ejemplo típico para un aviso de Undefined Index sería ( demo )

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

Tanto la spinach como la 1 no existen en la matriz, lo que provoca que se E_WARNING un E_WARNING .

La solución es asegurarse de que el índice o la compensación exista antes de acceder a ese índice. Esto puede significar que necesita corregir un error en su programa para asegurarse de que esos índices existen cuando espera que lo hagan. O puede significar que necesita probar si los índices existen usando array_key_exists o isset :

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in array';
}

Si tienes código como:

<?php echo $_POST['message']; ?>
<form method="post" action="">
    <input type="text" name="message">
    ...

entonces $_POST['message'] no se configurará cuando esta página se cargue por primera vez y obtendrá el error anterior. Solo cuando se envíe el formulario y este código se ejecute por segunda vez, existirá el índice de matriz. Por lo general, comprueba esto con:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

Preguntas relacionadas:







php conditional