with variable concatenate concatenar caracter array agregar php operators string-concatenation

variable - ¿Por qué el operador de concatenación de cadena php es un punto(.)?



php concat variables (3)

Creo que es una buena idea tener un operador diferente, porque dot y plus hacen cosas completamente diferentes.

¿Qué significa "a string" + "another string"; realmente significa, desde un punto de vista del lenguaje no específico?

Eso significa

  • Agregue el valor numérico de las dos cadenas, o
  • concatenar las dos cuerdas

Usted supondría que es el segundo, pero se usa un signo más para la suma numérica en todos los casos excepto en Cadenas. ¿Por qué?

Además, desde un punto de vista poco tipado (que PHP es), un script php

$myvar = 1; $myvar2 = 2; // would we expect a concatenation or addition? $concat = $myvar + $myvar2;

La notación de punto por lo tanto especifica que se usa claramente para la concatenación.

No es que sea confuso, es que no es intuitivo porque todos los otros lenguajes lo hacen de otra manera. Y, ¿es esta una buena razón para seguir la tendencia? Hacer las cosas de la manera en que siempre se hacen, no siempre es la manera correcta.

En PHP, el operador de cadena punto (.) Se utiliza para concatenar cadenas. Por ejemplo:

$msg = "Hello there, " . $yourName;

El operador de punto siempre parece confundir a las personas (yo mismo incluido) la primera vez que lo ven, especialmente cuando lo usa para concatenar 2 cadenas, la operación no arroja un error sino que falla "silenciosamente". También es un error común al cambiar entre PHP y otros lenguajes como JavaScript, Python, etc. que no usan este operador.

Mi pregunta es, ¿por qué el lenguaje usa el operador punto (.) En lugar de un operador más ampliamente aceptado como más (+)? ¿Hay alguna razón histórica por la que pueda señalar por qué se seleccionó este operador? ¿Es solo porque el punto puede convertir otros tipos de variables en una cadena? Por ejemplo:

echo 1 . 2; //prints the string "12"

¡Gracias!


El signo más no es tan "ampliamente aceptado" como se podría imaginar para concatenación de cadenas. Hay muchos idiomas que no lo usan, como Perl y C, y dado que son las raíces de PHP, tiene sentido que PHP haga lo mismo. Muchos idiomas ni siquiera tienen un operador para eso; tendrías que usar una función concat() .

PHP está débilmente tipado, y hará una conversión de tipo implícita cuando vea el signo más o un punto. Esto significa que si haces $x = "45 inches" + "20 inches"; , PHP establecerá $x a 65 . Si usa el operador de concatenación de puntos, el resultado será claramente muy diferente. Lo mismo aplica si tienes $y = 5 . 10; $y = 5 . 10; . Esto le dará 510 , pero cámbielo a un signo más y obtendrá un resultado completamente diferente.

Además, pensando lógicamente, lo contrario de un más es un menos. Pero eso no se asigna tan fácilmente a la concatenación. (He visto un idioma que lo probó, pero realmente no tenía mucho sentido)

Su preferencia por el signo más como concatenación es puramente una resistencia al cambio cuando se aprende un nuevo idioma (cosa bastante común: conozco a algunas personas que inicialmente odiaban a Python porque carecía de llaves).

Como alguien que ha programado durante mucho tiempo el uso de muchos idiomas, puedo decirle que prefiero tener un operador de concatenación inequívoco. Usar el mismo operador para la adición y la concatenación en un lenguaje de tipo suelto es pedir problemas; de hecho, diría que es uno de los defectos más grandes de Javascript (y esto viene de alguien que en general es un fanático de Javascript).

Python tiene un tipado fuerte, lo que significa que puede salirse con la suya usando el signo más como el operador de suma y concatenación porque lo obliga a trabajar con el mismo tipo; no puede agregar un número entero a una cadena en Python; si lo necesita, entonces tiene que emitir explícitamente sus tipos, por lo que no hay ambigüedad, al menos no para el compilador.

Sin embargo, todavía hay ambigüedad para el lector; puede que no sea inmediatamente obvio al leer lo que significaba cualquier signo más en el código. En Python es más fácil resolverlo, pero personalmente preferiría tener un operador inequívoco. Pero eso es solo una preferencia personal; si estoy trabajando con Python, Javascript o Visual Basic, entonces tengo que trabajar según sus reglas.


No es posible usar + como un operador de concatenación en PHP, debido a la equivalencia entre cadenas de dígitos y números. Tendría dos operadores usando el mismo símbolo, y el resultado de "3" + 3 debería estar definido. Ahora, "3" + 3 es 6 y "3" . 3 "3" . 3 es "33" .