Referencia - ¿Qué significa este símbolo en PHP?

¿Que es esto?

Esta es una colección de preguntas que surgen de vez en cuando sobre la sintaxis en PHP. Esto también es un Wiki de la comunidad, por lo que todos están invitados a participar en el mantenimiento de esta lista.

¿Por qué es esto?

Solía ​​ser difícil encontrar preguntas sobre operadores y otros tokens de sintaxis.
La idea principal es tener enlaces a preguntas existentes en Stack Overflow, por lo que es más fácil para nosotros hacer referencia a ellas, no copiar el contenido del Manual de PHP.

Nota: Desde enero de 2013, Stack Overflow admite caracteres especiales. Simplemente rodee los términos de búsqueda entre comillas, p. Ej. [php] "==" vs "==="

¿Qué debo hacer aquí?

Si alguien le ha señalado aquí porque ha hecho tal pregunta, busque la sintaxis particular a continuación. Las páginas enlazadas al Manual de PHP junto con las preguntas vinculadas probablemente responderá a su pregunta en ese momento. Si es así, se le anima a votar a favor de la respuesta. Esta lista no reemplaza la ayuda que otros brindaron.

La Lista

Si su token en particular no aparece en la lista a continuación, puede encontrarlo en el Lista de tokens del analizador.


& Operadores bit a bit or Referencias


=& Referencias


&= Operadores bit a bit


&& Operadores logicos


% Operadores aritméticos


!! Operadores logicos


@ Operadores de control de errores


?: Operador ternario


?? Operador de fusión nula (desde PHP 7)


?string ?int ?array ?bool ?float Declaración de tipo de retorno que acepta valores NULL (desde PHP 7.1)


: Sintaxis alternativa para estructuras de control, Operador ternario, Declaración de tipo de devolución


:: Operador de resolución de alcance


\ Los espacios de nombres


-> Clases y objetos


=> Matrices


^ Operadores bit a bit


>> Operadores bit a bit


<< Operadores bit a bit


<<< Heredoc o Nowdoc


= Operadores de Asignación


== Operadores de comparación


=== Operadores de comparación


!== Operadores de comparación


!= Operadores de comparación


<> Operadores de comparación


<=> Operadores de comparación (desde PHP 7.0)


| Operadores bit a bit


|| Operadores logicos


~ Operadores bit a bit


+ Operadores aritméticos, Operadores de matrices


+= y -= Operadores de Asignación


++ y -- Operadores incrementales / decrecientes


.= Operadores de Asignación


. Operadores de cadenas


, Argumentos de función

, Declaraciones de variables


$$ Variables variables


` Operador de ejecución


<?= Etiquetas abiertas cortas


[] Matrices (sintaxis corta desde PHP 5.4)


<? Etiquetas de apertura y cierre


... Desembalaje de argumentos (desde PHP 5.6)


** Exponenciación (desde PHP 5.6)


# Comentario de estilo shell de una línea


?-> Llamadas de operador NullSafe (desde PHP 8.0)


preguntado el 17 de septiembre de 10 a las 13:09

Sé que esto no es estrictamente PHP, pero ¿qué tal si incluyes un enlace a phpdoc.org para la sintaxis de comentarios de phpDocumentor, que se usa comúnmente y también es imposible buscar /**? -

¿Puedo sugerir corchetes y corchetes? -

También encontré mucho este problema (no poder buscar caracteres especiales), por eso hice SímboloHound, un motor de búsqueda que no ignora los caracteres especiales. También lo publiqué en Pila de aplicaciones. -

Bueno, desde el encabezado ¿Por qué es esto?, Supongo que es porque "La idea principal es tener enlaces a preguntas existentes en Stack Overflow, por lo que es más fácil para nosotros hacer referencia a ellas". -

Hoy se hizo una pregunta (20/15 de noviembre) stackoverflow.com/questions/33833259/qué-es-rscat-en-php pidiendo "¿Qué es $ rsCat en php?" (si esa pregunta aún se hace visible y no se elimina). Por extraño que parezca, no hay una referencia sobre $ variable, pero sobre $$ Variables variables solamente. Creo que debería modificarse en alguna parte. -

20 Respuestas

Operadores incrementales / decrecientes

++ operador de incremento

-- operador de decremento

Example    Name              Effect
---------------------------------------------------------------------
++$a       Pre-increment     Increments $a by one, then returns $a.
$a++       Post-increment    Returns $a, then increments $a by one.
--$a       Pre-decrement     Decrements $a by one, then returns $a.
$a--       Post-decrement    Returns $a, then decrements $a by one.

Estos pueden ir antes o después de la variable.

Si se coloca antes de la variable, la operación de incremento / decremento se realiza en la variable la primera luego se devuelve el resultado. Si se coloca después de la variable, la variable es la primera devuelto, entonces se realiza la operación de incremento / decremento.

Por ejemplo:

$apples = 10;
for ($i = 0; $i < 10; ++$i) {
    echo 'I have ' . $apples-- . " apples. I just ate one.\n";
}

Ejemplo vivo

En el caso anterior ++$i se utiliza, ya que es más rápido. $i++ tendría los mismos resultados.

El preincremento es un poco más rápido porque realmente incrementa la variable y luego 'devuelve' el resultado. El incremento posterior crea una variable especial, copia allí el valor de la primera variable y solo después de que se usa la primera variable, reemplaza su valor por el de la segunda.

Sin embargo, debe utilizar $apples--, ya que primero, desea mostrar el número actual de manzanas, y luego quieres restarle uno.

También puede incrementar letras en PHP:

$i = "a";
while ($i < "c") {
    echo $i++;
}

Once z es alcanzado aa es el siguiente, y así sucesivamente.

Tenga en cuenta que las variables de caracteres se pueden incrementar pero no disminuir y, aun así, solo se admiten caracteres ASCII simples (az y AZ).


Publicaciones de desbordamiento de pila:

respondido 12 nov., 18:08

Por el bien de todos, elimine la información en negrita acerca de que el incremento previo es infinitesimalmente más rápido. Este es el peor ejemplo absoluto de optimización prematura y este tipo de información no debería estar en la cabeza de las personas si recién están comenzando a aprender PHP. - Lotus Notes

@Lotus - Lo considero un hecho divertido. Si eres un principiante en PHP, o C ++, etc., parece bastante extraño que ++ i e i ++ sean lo suficientemente diferentes como para trabajar a diferentes velocidades. Lo encontré fascinante. - Pedro Ajtai

@Peter Ajtai Sí, es interesante, pero por la forma en que ha estructurado su publicación, hace que parezca uno de los principales hechos de PHP que es absolutamente vital para usar el lenguaje. - Lotus Notes

Operador bit a bit

¿Qué es un poco? Un bit es una representación de 1 o 0. Básicamente, OFF (0) y ON (1)

¿Qué es un byte? Un byte se compone de 8 bits y el valor más alto de un byte es 255, lo que significaría que todos los bits están establecidos. Veremos por qué el valor máximo de un byte es 255.

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------

Esta representación de 1 Byte

1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255 (1 byte)

Algunos ejemplos para una mejor comprensión

El operador "Y": &

$a =  9;
$b = 10;
echo $a & $b;

Esto daría como resultado el número 8. ¿Por qué? Bueno, veamos usando nuestro ejemplo de tabla.

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      &     |   0|  0|  0|  0| 1| 0| 0| 0|
------------------------------------------- 

Entonces, puede ver en la tabla que el único bit que comparten juntos es el de 8 bits.

Segundo ejemplo

$a =  36;
$b = 103;
echo $a & $b; // This would output the number 36.
$a = 00100100
$b = 01100111

Los dos bits compartidos son 32 y 4, que cuando se suman devuelven 36.

El operador "O": |

$a =  9;
$b = 10;
echo $a | $b;

Esto daría como resultado el número 11. ¿Por qué?

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      |     |   0|  0|  0|  0| 1| 0| 1| 1|
-------------------------------------------

Notará que tenemos 3 bits establecidos, en las columnas 8, 2 y 1. Sume esos: 8 + 2 + 1 = 11.

Respondido el 19 de Septiembre de 16 a las 13:09

¿Qué pasa si $ a tiene un valor superior a 255? - Aycan Yasit

@ AycanYaşıt La mayor parte del sistema operativo utiliza un sistema de 32 y 64 bits, lo que significa que el límite es mucho más de 255 (8 bits). - AlbertoSamuel

@ AycanYaşıt En realidad, la representación aquí con una longitud de byte ni siquiera es correcta, ya que incluso el entero más pequeño sigue siendo de 64 bits (8 bytes) en la memoria en una plataforma moderna de 64 bits. - kaii

¿Por qué and & is 0 0 0 0 1 0 0 0 y or | is 0 0 0 0 1 0 1 1? - vi_real

<=> Operador de nave espacial

Agregado en PHP 7

LA operador de nave espacial <=> es el último operador de comparación agregado en PHP 7. Es un no asociativo operador binario con la misma precedencia que los operadores de igualdad (==, !=, ===, !==). Este operador permite una comparación de tres vías más simple entre los operandos del lado izquierdo y del lado derecho.

El operador da como resultado una expresión entera de:

  • 0 cuando ambos operandos son iguales
  • Menos que 0 cuando el operando de la izquierda es menor que el operando de la derecha
  • Más que 0 cuando el operando de la izquierda es mayor que el operando de la derecha

p.ej

1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1

Una buena aplicación práctica del uso de este operador sería en las devoluciones de llamada de tipo de comparación que se espera que devuelvan un número entero cero, negativo o positivo basado en una comparación de tres vías entre dos valores. La función de comparación pasó a usort Es uno de esos ejemplos.

Antes de PHP 7 escribirías ...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    if ($a < $b) {
        return -1;
    } elseif ($a > $b) {
        return 1;
    } else {
        return 0;
    }
});

Desde PHP 7 puedes escribir ...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    return $a <=> $b;
    // return -1 * ($a <=> $b); // for reversing order
});

Respondido 26 Abr '21, 01:04

No estoy seguro de cómo $a <=> $b es diferente a $a - $b - acelerar

@AcidoShout $a - $b funciona para números, pero no para cadenas, objetos o matrices. - mcrumley

@mcrumley No, es peor que eso. En general $a - $b ni siquiera funciona con números; funciona solo para enteros. No funciona para números que no son enteros, porque usort lanza los valores de retorno de la función comparadora a int, lo que significa que 0.5 se convierte en 0, lo que significa que dos números con una diferencia de menos de 1, como 4 y 4.6, pueden (dependiendo de cuál se pase como el primer argumento a su función de comparación) comparar incorrectamente como iguales. - marca amery

@MarkAmery la guía de migración no es el comportamiento documentado del operador. Para eso, desea consultar la sección de operadores de idioma del manual para php.net/language.operators.comparación el comportamiento real detrás de esto se basa en varias funciones de comparación de la API, como cuando está haciendo strcmp para cadenas, donde no puede garantizar el valor de retorno real en todos los casos. Claro, casi siempre es 1, 0 o -1, pero para los casos en los que no puede garantizarlo, como al envolver el strcmp de libc, ofrece el mismo comportamiento definido que la especificación subyacente para estar seguro: Jerife

@MarkAmery El punto aquí es no permitir que las personas confíen en un comportamiento indefinido. Para el único caso en el que alguien obtiene un valor que no es exactamente 1, 0 o -1, alguien presenta un informe de error pensando que hay algo mal en el idioma. Es por eso que documentamos que todo lo que podemos garantizar es que el valor será menos que, mayor queo igual a 0, y no necesariamente 1, 0 y -1. - Jerife

_ Alias ​​para gettext ()

El carácter de subrayado '_' como en _() es un alias para el gettext() función.

Respondido 19 Feb 18, 08:02

¿Alguna idea de qué es la función de subrayado doble? __(). Se usa en WordPress. No puedo encontrar una definición para eso dondequiera. Ejemplo de su uso: core.trac.wordpress.org/browser/tags/5.4/src/wp-admin/includes/…. Parece que para usar el WP image_size_names_choose() filtrar, __() debe usarse para agregar el "nombre corto" a la matriz de tamaños nombrados que desea agregar. - sherylhohman

@SherylHohman Parece que es una función de traducción. desarrollador.wordpress.org/reference/functions/__ - mohamed h

¡Muchas gracias! Envidio sus habilidades superiores en Google (y su vasto conocimiento de codificación) :-) - sherylhohman

Sintaxis Nombre Descripción
x == y Igualdad true si xey tienen los mismos pares clave / valor
x != y Desigualdad true si x no es igual ay
x === y Identidad true si xey tienen los mismos pares clave / valor
en el mismo orden y de los mismos tipos
x !== y No identidad true si x no es idéntico ay
++x Pre-incremento Incrementa x en uno, luego devuelve x
x++ Post-incremento Devuelve x, luego incrementa x en uno
--x Pre-decremento Disminuye x en uno, luego devuelve x
x-- Post-decremento Devuelve x, luego disminuye x en uno
x and y Y true si tanto x como y son true. Si x = 6, y = 3 entonces
(x < 10 and y > 1) devoluciones true
x && y Y true si tanto x como y son true. Si x = 6, y = 3 entonces
(x < 10 && y > 1) devoluciones true
x or y Or true si alguno de xoy es true. Si x = 6, y = 3 entonces
(x < 10 or y > 10) devoluciones true
x || y Or true si alguno de xoy es true. Si x = 6, y = 3 entonces
(x < 3 || y > 1) devoluciones true
a . b Concatenación Concatenar dos cadenas: "Hola". "Decir ah"

Respondido 05 Feb 21, 23:02

Constantes mágicas: Aunque estos no son solo símbolos, sino una parte importante de esta familia de tokens. Hay ocho constantes mágicas que cambian dependiendo de dónde se utilicen.

__LINE__: El número de línea actual del archivo.

__FILE__: La ruta completa y el nombre de archivo del archivo. Si se usa dentro de una inclusión, se devuelve el nombre del archivo incluido. Desde PHP 4.0.2, __FILE__ siempre contiene una ruta absoluta con enlaces simbólicos resueltos, mientras que en versiones anteriores contenía una ruta relativa en algunas circunstancias.

__DIR__: El directorio del archivo. Si se usa dentro de una inclusión, se devuelve el directorio del archivo incluido. Esto es equivalente a dirname(__FILE__). Este nombre de directorio no tiene una barra al final a menos que sea el directorio raíz. (Agregado en PHP 5.3.0.)

__FUNCTION__: El nombre de la función. (Agregado en PHP 4.3.0) A partir de PHP 5, esta constante devuelve el nombre de la función tal como se declaró (distingue entre mayúsculas y minúsculas). En PHP 4, su valor siempre está en minúsculas.

__CLASS__: El nombre de la clase. (Agregado en PHP 4.3.0) A partir de PHP 5, esta constante devuelve el nombre de la clase tal como se declaró (distingue entre mayúsculas y minúsculas). En PHP 4, su valor siempre está en minúsculas. El nombre de la clase incluye el espacio de nombres en el que se declaró (p. Ej. Foo\Bar). Tenga en cuenta que a partir de PHP 5.4 __CLASS__ funciona también en rasgos. Cuando se usa en un método de rasgo, __CLASS__ es el nombre de la clase en la que se usa el rasgo.

__TRAIT__: El nombre del rasgo. (Agregado en PHP 5.4.0) A partir de PHP 5.4, esta constante devuelve el rasgo tal como se declaró (distingue entre mayúsculas y minúsculas). El nombre del rasgo incluye el espacio de nombres en el que se declaró (p. Ej. Foo\Bar).

__METHOD__: El nombre del método de la clase. (Agregado en PHP 5.0.0) El nombre del método se devuelve como se declaró (distingue entre mayúsculas y minúsculas).

__NAMESPACE__: El nombre del espacio de nombres actual (distingue entre mayúsculas y minúsculas). Esta constante se define en tiempo de compilación (agregada en PHP 5.3.0).

Fuente

Respondido 21 Feb 14, 00:02

Operadores de tipo

instanceof se utiliza para determinar si una variable de PHP es un objeto instanciado de una determinada clase.

<?php
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass);
var_dump($a instanceof sclass);

El ejemplo anterior dará como resultado:

bool(true)
bool(false)

Razón: Ejemplo anterior $a es un objeto de la mclass así que usa solo un mclass datos no instancia de con el sclass

Ejemplo con herencia

<?php 
class pclass { } 
class childclass extends pclass { } 
$a = new childclass; 
var_dump($a instanceof childclass); 
var_dump($a instanceof pclass);

El ejemplo anterior dará como resultado:

bool(true)
bool(true)

Ejemplo con Clone

<?php 
class cloneable { } 
$a = new cloneable;
$b = clone $a; 
var_dump($a instanceof cloneable); 
var_dump($b instanceof cloneable);

El ejemplo anterior dará como resultado:

bool(true)
bool(true)

respondido 13 mar '16, 01:03

Lo anterior también funciona con 'interfaces'. Esto es útil para verificar que una interfaz en particular esté disponible. - ryan vicente

Una visión general de operadores en PHP:


Operadores logicos:

  • $ a && $ b: VERDADERO si tanto $ a como $ b son VERDADEROS.
  • $ a || $ b: VERDADERO si $ a o $ b es VERDADERO.
  • $ a xo $ b: VERDADERO si $ a o $ b es VERDADERO, pero no ambos.
  • ! $ a: VERDADERO si $ a no es VERDADERO.
  • $ ay $ b: VERDADERO si tanto $ a como $ b son VERDADEROS.
  • $ a o $ b: VERDADERO si $ a o $ b es VERDADERO.

Operadores de comparación:

  • $ a == $ b: VERDADERO si $ a es igual a $ b después del tipo de malabarismo.
  • $ a === $ b: VERDADERO si $ a es igual a $ b, y son del mismo tipo.
  • $ a! = $ b: VERDADERO si $ a no es igual a $ b después del tipo de malabarismo.
  • $ a <> $ b: VERDADERO si $ a no es igual a $ b después del tipo de malabarismo.
  • $ a! == $ b: VERDADERO si $ a no es igual a $ b, o si no son del mismo tipo.
  • $ a <$ b : VERDADERO si $ a es estrictamente menor que $ b.
  • $ a> $ b : VERDADERO si $ a es estrictamente mayor que $ b.
  • $ a <= $ b : VERDADERO si $ a es menor o igual que $ b.
  • $ a> = $ b : VERDADERO si $ a es mayor o igual que $ b.
  • $ a <=> $ b : Un número entero menor, igual o mayor que cero cuando $ a es respectivamente menor, igual o mayor que $ b. Disponible a partir de PHP 7.
  • $ a? $ b: $ c : si $ a devuelve $ b si no devuelve $ c (operador ternario)
  • $ a ?? $ c : ¿Igual que $ a? $ a: $ c (operador de fusión nula - requiere PHP> = 7)

Operadores aritméticos:

  • - $ a : Opuesto a $ a.
  • $ a + $ b : Suma de $ ay $ b.
  • $ a - $ b : Diferencia de $ ay $ b.
  • $ a * $ b : Producto de $ ay $ b.
  • $ a / $ b : Cociente de $ ay $ b.
  • $ a% $ b : Resto de $ a dividido por $ b.
  • $ a ** $ b : Resultado de elevar $ a a la potencia $ b'th (introducido en PHP 5.6)

Operadores incrementales / decrecientes:

  • ++ $ a : Incrementa $ a en uno, luego devuelve $ a.
  • $ a ++ : Devuelve $ a, luego incrementa $ a en uno.
  • - $ a : Disminuye $ a en uno, luego devuelve $ a.
  • $ a-- : Devuelve $ a, luego disminuye $ a en uno.

Operadores bit a bit:

  • $ a y $ b : Se establecen los bits que se establecen tanto en $ a como en $ b.
  • $ a | $ b : Se establecen los bits que se establecen en $ a o $ b.
  • $ a ^ $ b : Se establecen los bits que se establecen en $ a o $ b pero no en ambos.
  • ~ $ a : Los bits que se establecen en $ a no se establecen y viceversa.
  • $ a << $ b : Desplaza los bits de $ a $ b pasos hacia la izquierda (cada paso significa "multiplicar por dos")
  • $ a >> $ b : Mueve los bits de $ a $ b pasos hacia la derecha (cada paso significa "dividir por dos")

Operadores de cadenas:

  • $ a. $ b : Concatenación de $ ay $ b.

Operadores de matrices:

  • $ a + $ b : Unión de $ ay $ b.
  • $ a == $ b : VERDADERO si $ ay $ b tienen los mismos pares clave / valor.
  • $ a === $ b : VERDADERO si $ ay $ b tienen los mismos pares clave / valor en el mismo orden y de los mismos tipos.
  • $ a! = $ b : VERDADERO si $ a no es igual a $ b.
  • $ a <> $ b : VERDADERO si $ a no es igual a $ b.
  • $ a! == $ b : VERDADERO si $ a no es idéntico a $ b.

Operadores de Asignación:

  • $ a = $ b : El valor de $ b se asigna a $ a
  • $ a + = $ b : Igual que $ a = $ a + $ b
  • $ a - = $ b : Igual que $ a = $ a - $ b
  • *$a = $ b : Igual que $ a = $ a * $ b
  • $ a / = $ b : Igual que $ a = $ a / $ b
  • $ a% = $ b : Igual que $ a = $ a% $ b
  • ** $ a = $ b : Igual que $ a = $ a ** $ b
  • $ a. = $ b : Igual que $ a = $ a. $ b
  • $ a & = $ b : Igual que $ a = $ a & $ b
  • $ a | = $ b : Igual que $ a = $ a | $ b
  • $ a ^ = $ b : Igual que $ a = $ a ^ $ b
  • $ a << = $ b : Igual que $ a = $ a << $ b
  • $ a >> = $ b : Igual que $ a = $ a >> $ b
  • $ a ?? = $ b : El valor de $ b se asigna a $ a si $ a es nulo o no está definido (operador de asignación de fusión nula - requiere PHP> = 7.4)

Nota

and operador y or El operador tiene menor precedencia que el operador de asignación. =.

Esto significa que $a = true and false; es equivalente a ($a = true) and false.

En la mayoría de los casos probablemente desee utilizar && y ||, que se comportan de una forma conocida en lenguajes como C, Java o JavaScript.

Respondido el 21 de enero de 21 a las 13:01

Hay un error en $a ?? $c, dice que es lo mismo que $a ? $a : $c, pero el operador ternario verifica si el valor es verdadero, por otro lado, la fusión nula verifica los valores nulos, por lo que, si $ a es 0, obtendrá 0 (porque 0 no es nulo), por ejemplo, si tiene: $a=0; $c=5; luego $a?$a:$c devuelve 5 y $a??$c devuelve 0. - stramin

Operador de nave espacial <=> (Agregado en PHP 7)

Ejemplos para <=> Operador de nave espacial (PHP 7, Fuente: Manual de PHP):

Enteros, flotantes, cadenas, matrices y objetos para la comparación de variables de tres vías.

// Integers
echo 10 <=> 10; // 0
echo 10 <=> 20; // -1
echo 20 <=> 10; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
// Comparison is case-sensitive
echo "B" <=> "a"; // -1

echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1

// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1

// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0

$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; // -1

$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 1

// only values are compared
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; // 1

Respondido el 20 de junio de 20 a las 10:06

{} Llaves

Y algunas palabras sobre la última publicación

$x[4] = 'd'; // it works
$x{4} = 'd'; // it works

$echo $x[4]; // it works
$echo $x{4}; // it works

$x[] = 'e'; // it works
$x{} = 'e'; // does not work

$x = [1, 2]; // it works
$x = {1, 2}; // does not work

echo "${x[4]}"; // it works
echo "${x{4}}"; // does not work

echo "{$x[4]}"; // it works
echo "{$x{4}}"; // it works

contestado el 23 de mayo de 17 a las 13:05

{''} notación para nombres de propiedad. echo $ peliculas-> pelicula -> {'grandes-lineas'} -> linea; se puede utilizar para acceder a datos en SimpleXMLElement. Quizás también se pueda usar en otros casos. php.net/manual/en/simplexml.ejemplos-basic.php - Andrés

Operador de fusión nulo (??)

Este operador se ha agregado en PHP 7.0 para el caso común de necesitar usar un operador ternario junto con isset(). Devuelve su primer operando si existe y no es NULL; de lo contrario, devuelve su segundo operando.

<?php
// 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';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

Respondido 16 Feb 18, 14:02

Cadenas PHP: Las cadenas de PHP se pueden especificar de cuatro formas, no solo de dos formas:

1) Cadenas de comillas individuales:

$string = 'This is my string'; // print This is my string

2) Cadenas de comillas dobles:

$str = 'string';

$string = "This is my $str"; // print This is my string

3) Heredoc:

$string = <<<EOD
This is my string
EOD; // print This is my string

4) Nowdoc (desde PHP 5.3.0):

$string = <<<'END_OF_STRING'
    This is my string 
END_OF_STRING; // print This is my string

Respondido 02 Feb 16, 13:02

@ Rizier123: ¿Qué significa "Heredocs no se puede usar para inicializar propiedades de clase. Desde PHP 5.3, esta limitación es válida solo para heredocs que contienen variables"? - PHPFan

PREGUNTA:

¿Qué => significa?


RESPONDER:

=> ¿Es el símbolo que los humanos decidimos usar para separar "Key" => "Value" pares en matrices asociativas.

ELABORANDO:

Para entender esto, tenemos que saber qué son las matrices asociativas. Lo primero que surge cuando un programador convencional piensa en una matriz (en PHP) sería algo similar a:

$myArray1 = array(2016, "hello", 33);//option 1

$myArray2 = [2016, "hello", 33];//option 2

$myArray3 = [];//option 3
$myArray3[] = 2016; 
$myArray3[] = "hello"; 
$myArray3[] = 33;

Donde, si quisiéramos llamar a la matriz en alguna parte posterior del código, podríamos hacer:

echo $myArray1[1];// output: hello
echo $myArray2[1];// output: hello
echo $myArray3[1];// output: hello

Hasta aquí todo bien. Sin embargo, como seres humanos, es posible que nos resulte difícil recordar ese índice [0] de la matriz es el valor de la año 2016, índice [1] de la matriz es un saludosy el índice [2] de la matriz es un simple valor entero. La alternativa que tendríamos entonces es usar lo que se llama un Matriz asociativa. Una matriz asociativa tiene algunas diferencias con una Matriz secuencial (que es lo que eran los casos anteriores ya que incrementan el índice usado en una secuencia predeterminada, incrementando en 1 para cada valor siguiente).

Diferencias (entre una matriz secuencial y asociativa):

  • Durante la declaración de una matriz asociativa, no solo incluye el value de lo que quieres poner en la matriz, pero también pones el valor del índice (llamado key) que desea usar al llamar a la matriz en partes posteriores del código. La siguiente sintaxis se utiliza durante su declaración: "key" => "value".

  • Cuando se utiliza la matriz asociativa, el key El valor se colocaría dentro del índice de la matriz para recuperar el valor deseado. value.

Por ejemplo:

$myArray1 = array( 
    "Year" => 2016, 
    "Greetings" => "hello", 
    "Integer_value" => 33);//option 1

$myArray2 = [ 
    "Year" =>  2016, 
    "Greetings" => "hello", 
    "Integer_value" => 33];//option 2

$myArray3 = [];//option 3
$myArray3["Year"] = 2016; 
$myArray3["Greetings"] = "hello"; 
$myArray3["Integer_value"] = 33;

Y ahora, para recibir la misma salida que antes, el key El valor se usaría en el índice de matrices:

echo $myArray1["Greetings"];// output: hello
echo $myArray2["Greetings"];// output: hello
echo $myArray3["Greetings"];// output: hello

PUNTO FINAL:

Por lo tanto, a partir del ejemplo anterior, es bastante fácil ver que el => El símbolo se utiliza para expresar la relación de una matriz asociativa entre cada uno de los key y value pares en una matriz DURANTE el inicio de los valores dentro de la matriz.

Respondido el 07 de diciembre de 20 a las 10:12

Pregunta:

¿Qué significa "&" aquí en PHP?

Operador PHP "&"

Hace la vida más fácil una vez que nos acostumbramos. (Ver el ejemplo a continuación con cuidado)

& Por lo general, comprueba que los bits que están configurados tanto en $ a como en $ b estén establecidos.

¿Ha notado siquiera cómo funcionan estas llamadas?

   error_reporting(E_ERROR | E_WARNING | E_PARSE);
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    error_reporting(E_ALL & ~E_NOTICE);
    error_reporting(E_ALL);

Entonces, detrás de todo lo anterior está el juego de operadores bit a bit y bits.

Un caso útil de estos son las configuraciones fáciles como las que se muestran a continuación, por lo que un solo campo entero puede almacenar miles de combos para usted.

La mayoría de la gente ya ha leído los documentos, pero no se basó en el caso de uso del mundo real de estos operadores bit a bit.

Ejemplo que te encantará

<?php

class Config {

    // our constants must be 1,2,4,8,16,32,64 ....so on
    const TYPE_CAT=1;
    const TYPE_DOG=2;
    const TYPE_LION=4;
    const TYPE_RAT=8;
    const TYPE_BIRD=16;
    const TYPE_ALL=31;

    private $config;

    public function __construct($config){
        $this->config=$config;

        if($this->is(Config::TYPE_CAT)){
            echo 'cat ';
        }
        if($this->is(Config::TYPE_DOG)){
            echo 'dog ';
        }
        if($this->is(Config::TYPE_RAT)){
            echo 'rat ';
        }
        if($this->is(Config::TYPE_LION)){
            echo 'lion ';
        }
        if($this->is(Config::TYPE_BIRD)){
            echo 'bird ';
        }
        echo "\n";
    }

    private function is($value){
        return $this->config & $value;
    }
}

new Config(Config::TYPE_ALL);
// cat dog rat lion bird
new Config(Config::TYPE_BIRD);
//bird
new Config(Config::TYPE_BIRD | Config::TYPE_DOG);
//dog bird
new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT);
//rat lion bird

respondido 20 mar '17, 05:03

== se utiliza para comprobar la igualdad sin considerando variable tipo de datos

=== se utiliza para comprobar la igualdad de ambas La variable propuesta de y tipo de datos

Ejemplo

$a = 5

  1. if ($a == 5) - evaluará como verdadero

  2. if ($a == '5') - se evaluará como verdadero, porque al comparar ambos valores, PHP convierte internamente ese valor de cadena en un número entero y luego compara ambos valores

  3. if ($a === 5) - evaluará como verdadero

  4. if ($a === '5') - se evaluará como falso, porque el valor es 5, pero este valor 5 no es un número entero.

Respondido el 20 de junio de 20 a las 10:06

Operador Null Coalesce "??" (Agregado en PHP 7)

No es el nombre más atractivo para un operador, pero PHP 7 trae la fusión nula bastante útil, así que pensé en compartir un ejemplo.

En PHP 5, ya tenemos un operador ternario, que prueba un valor y luego devuelve el segundo elemento si devuelve verdadero y el tercero si no lo hace:

echo $count ? $count : 10; // outputs 10

También hay una abreviatura para eso que le permite omitir el segundo elemento si es el mismo que el primero: echo $ count?: 10; // también produce 10

En PHP 7 obtenemos adicionalmente el ?? operador que, en lugar de indicar una confusión extrema, que es la forma en que normalmente usaría dos signos de interrogación juntos, nos permite encadenar una cadena de valores. Leyendo de izquierda a derecha, el primer valor que existe y no es nulo es el valor que se devolverá.

// $a is not set
$b = 16;

echo $a ?? 2; // outputs 2
echo $a ?? $b ?? 7; // outputs 16

Esta construcción es útil para dar prioridad a uno o más valores que provienen quizás de la entrada del usuario o de la configuración existente, y recurrir con seguridad a un valor predeterminado dado si falta esa configuración. Es una característica pequeña, pero sé que usaré tan pronto como mis aplicaciones se actualicen a PHP 7.

Respondido el 06 de diciembre de 17 a las 16:12

Declaración de tipo de retorno que acepta valores NULL

PHP 7 agrega soporte para declaraciones de tipo de retorno. De manera similar a las declaraciones de tipo de argumento, las declaraciones de tipo de retorno especifican el tipo de valor que se devolverá desde una función. Los mismos tipos están disponibles para declaraciones de tipo de retorno que están disponibles para declaraciones de tipo de argumento.

La escritura estricta también tiene un efecto en las declaraciones de tipo de retorno. En el modo débil predeterminado, los valores devueltos se forzarán al tipo correcto si aún no son de ese tipo. En modo fuerte, el valor devuelto debe ser del tipo correcto; de lo contrario, se lanzará un TypeError.

A partir de PHP 7.1.0, los valores de retorno se pueden marcar como anulables al anteponer el nombre del tipo con un signo de interrogación (?). Esto significa que la función devuelve el tipo especificado o NULL.

<?php
function get_item(): ?string {
    if (isset($_GET['item'])) {
        return $_GET['item'];
    } else {
        return null;
    }
}
?>

Fuente

contestado el 01 de mayo de 19 a las 09:05

Three DOTS como operador de Splat (...) (desde PHP 5.6)

PHP tiene un operador "..." (Tres puntos) que se conoce como Operador Splat. Se utiliza para pasar un número arbitrario de parámetros en una función y este tipo de función se llama Funciones Variadic. Tomemos ejemplos del uso de "..." (tres puntos).

Ejemplo 1:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}

echo calculateNumbers(10, 20, 30, 40, 50);

//Output 150
?>

Cada argumento de la función calculateNumbers () pasa a través de $ params como una matriz cuando se usa "…".

Hay muchas formas diferentes de utilizar el operador "...". A continuación algunos ejemplos:

Ejemplo 2:

<?php
function calculateNumbers($no1, $no2, $no3, $no4, $no5){
    $total = $no1 + $no2 + $no3 + $no4 + $no5;
    return $total;
}

$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers(...$numbers);

//Output 150
?>

Ejemplo 3:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}
$no1 = 70;
$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers($no1, ...$numbers);

//Output 220
?>

Ejemplo 4:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}

$numbers1 = array(10, 20, 30, 40, 50);
$numbers2 = array(100, 200, 300, 400, 500);
echo calculateNumbers(...$numbers1, ...$numbers2);

//Output 1650

?>

Respondido el 30 de Septiembre de 19 a las 16:09

[TODO] Incluir nueva funcionalidad en PHP8 para usar el operador splat con "parámetros con nombre" ref: stackoverflow.com/a/64997399/2943403 - mickmackusa

Operador NullSafe "? ->" (posiblemente) desde php8

En PHP8 se ha aceptado este nuevo operador, puedes encontrar la documentación aquí. ?-> es el NullSafe Operator, vuelve null en caso de que intente invocar funciones u obtener valores de null...

Ejemplos:

<?php
$obj = null;
$obj = $obj?->attr; //return null
$obj = ?->funct(); // return null
$obj = $objDrive->attr; // Error: Trying to get property 'attr' of non-object
?>

Respondido el 21 de Septiembre de 20 a las 16:09

Agregar esto se siente bastante prematuro, nadie verá este operador en ningún código en vivo, y es posible que ni siquiera se agregue. Sería mejor esperar hasta que los detalles estén finalizados y documentarlos adecuadamente. - IMSoP

@IMSoP estoy contigo, sin embargo me invitaron a hacerlo aquí stackoverflow.com/questions/62178354/… ... - berto99

Parece que ahora tenemos dos respuestas sobre esto. Personalmente, simplemente habría votado para cerrar la otra pregunta en lugar de intentar responder, porque en este momento no existe tal operador. - IMSoP

@IMSoP hay muchas preguntas aquí en StackOverflow sobre la propuesta de C ++, y no se han cerrado: a pesar de eso, estoy con usted sobre no publicar aquí este operador por el momento - berto99

No sé mucho sobre el proceso de C ++ y cuándo es razonable discutir propuestas, y para ser justos, parece bastante probable que esta tenga éxito en la modificación del entrenamiento, pero en general hay una montón de características propuestas para PHP que nunca llegan al lenguaje, y sería bastante confuso para los usuarios encontrarlas todas en listas de referencia. Dicho esto, en parte solo estoy siendo un viejo gruñón aquí: P - IMSoP

? -> Operador NullSafe

Agregado en PHP 8.0

Es el NullSafe Operator, vuelve null en caso de que intente invocar funciones u obtener valores de null. El operador Nullsafe se puede encadenar y se puede utilizar tanto en los métodos como en las propiedades.

$objDrive = null;
$drive = $objDrive?->func?->getDriver()?->value; //return null
$drive = $objDrive->func->getDriver()->value; // Error: Trying to get property 'func' of non-object

El operador Nullsafe no funciona con claves de matriz:

$drive['admin']?->getDriver()?->value //Warning: Trying to access array offset on value of type null

$drive = [];
$drive['admin']?->getAddress()?->value //Warning: Undefined array key "admin"

respondido 27 nov., 20:22

Agregar esto se siente bastante prematuro, nadie verá este operador en ningún código en vivo, y es posible que ni siquiera se agregue. Sería mejor esperar hasta que los detalles estén finalizados y documentarlos adecuadamente. - IMSoP

Ya estamos recibiendo preguntas al respecto. : / Si la propuesta falla, podemos decidir si vale la pena mantenerla. - John Conde

@JohnConde Me sentiría tentado a cerrarlos como fuera de tema, porque están preguntando sobre un lenguaje de programación imaginario; o tal vez "esta pregunta pertenece a una parte diferente de la línea de tiempo, verifique la configuración en su máquina del tiempo";) - IMSoP

lol El pensamiento cruzó por mi mente. Me pregunté si esto ofrecería valor a los futuros visitantes y, por ahora, la respuesta es "sí". Pero eso puede cambiar ... - John Conde

@JohnConde El problema es que todavía no podemos dar una respuesta correcta: el comportamiento real del operador puede cambiar por completo, o es posible que nunca se agregue, por lo que cualquier cosa que escribamos ahora es tan probable que induzca a error como información. La única respuesta honesta es "un error de sintaxis, pero existe la posibilidad de que signifique algo en el futuro". - IMSoP

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.