40 votes

Pourquoi l'opérateur de concaténation de chaînes php est-il un point (.)?

En PHP, la chaîne de l'opérateur point (.) est utilisé pour concaténer des chaînes. Par exemple:

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

L'opérateur point semble toujours confondre les gens (moi y compris) la première fois qu'ils le voient, surtout depuis quand vous l'utilisez pour concaténer 2 chaînes, l'opération ne génère pas une erreur, mais juste "silencieusement" échoue. C'est aussi une erreur lors de la commutation entre PHP et d'autres langages tels que JavaScript, Python, etc qui n'utilisent pas de cet opérateur.

Ma question est, pourquoi l'usage de la langue le point (.) opérateur au lieu d'un plus largement acceptée opérateur plus (+)? Existe-il des raisons historiques que l'on peut montrer pourquoi cet opérateur a été choisi? Est-ce juste parce que la dot peut lancer d'autres types de variables de chaîne de caractères? Par exemple:

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

Merci!

32voto

Codemwnci Points 28817

Je pense que c'est une bonne idée d'avoir un opérateur différent, parce que la dot et de plus faire des choses complètement différentes.

Qu'est - "a string" + "another string"; signifie réellement, à partir d'un non spécifique de la langue de point de vue?

Signifie-t-il

  • Ajouter de la valeur numérique des deux chaînes, ou,
  • concaténer deux chaînes de caractères

Vous pourriez penser qu'il est le deuxième, mais le signe est utilisé pour le numérique plus dans tous les cas, à l'exception des Cordes. Pourquoi?

Aussi, à partir d'un faiblement typé point de vue (qui est PHP), un script php

$myvar = 1;
$myvar2 = 2;

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

Le pointillé indique ainsi qu'il est clairement utilisé pour la concaténation.

Ce n'est pas que c'est déroutant, c'est qu'il n'est pas intuitive car toutes les autres langues de le faire d'une manière différente. Et, est-ce une bonne raison pour suivre la tendance? Faire les choses de la façon dont ils sont toujours fait, n'est pas toujours la bonne façon.

10voto

Spudley Points 85371

Le signe n'est pas aussi "largement acceptée" comme vous pouvez l'imaginer pour la concaténation de chaînes. Il y a beaucoup de langues qui ne l'utilisez pas, tels que Perl et C, et puisque ce sont qui sont des lieux de PHP sur les racines, il fait sens pour PHP suivre. Beaucoup de langues n'ont même pas un opérateur pour elle; vous auriez à utiliser une concat() fonction.

PHP est faiblement typé, et il en fera de conversion de type implicite lorsqu'il voit le signe plus ou un point. Cela signifie que si vous n' $x = "45 inches" + "20 inches";, PHP va ensemble $x de 65. Si vous utilisez le point opérateur de concaténation, le résultat sera bien évidemment très différents. La même chose s'applique si vous avez $y = 5 . 10;. Cela vous donnera 510, mais de le changer pour un signe plus et vous obtenez un résultat complètement différent.

Aussi, penser logiquement, à l'opposé d'un "plus" est un moins. Mais ce n'est pas la carte si facilement à la concaténation. (J'ai vu une langue qu'il a essayé, mais il n'a pas vraiment beaucoup de sens)

Votre préférence pour le signe plus comme un concatenator est purement bas à une résistance au changement lors de l'apprentissage d'une nouvelle langue (une chose assez rare - je connais quelques personnes qui, au départ, détesté Python parce qu'il manque des accolades!)

Comme quelqu'un qui est programmé pour une longue période à l'aide d'une beaucoup de langues, je peux vous dire que je préfère de beaucoup avoir une sans ambiguïté l'opérateur de concaténation. En utilisant le même opérateur pour l'addition et la concaténation dans un faiblement typé langue est d'avoir des ennuis; en fait, je dirais que c'est l'un de Javascript plus gros défauts (et cela vient de quelqu'un qui, en général, est un fan de Javascript).

Python est fortement typé, ce qui signifie qu'il peut s'en sortir en utilisant le signe que l'ajout et l'opérateur de concaténation, car il vous oblige à travailler avec le même type; vous ne pouvez pas ajouter un entier en une chaîne de caractères en Python, si vous en avez besoin, alors vous devez explicitement convertir vos types, donc il n'y a pas d'ambiguïté, du moins pas pour le compilateur.

Il est, cependant, encore de l'ambiguïté pour le lecteur, il peut ne pas être immédiatement évident à la lecture de ce qui a été signifié par un signe plus dans le code. C'est plus facile en Python pour s'en sortir, mais personnellement, je préfère encore avoir une sans ambiguïté de l'opérateur. Mais c'est juste une question de préférence personnelle; si je travaille avec Python, Javascript, Visual Basic ou puis-je travailler à leurs règles.

6voto

Rosh Oxymoron Points 6965

Il n'est pas possible d'utiliser + comme opérateur de concaténation en PHP, en raison de l'équivalence entre les chaînes de chiffres et de nombres. Vous auriez deux opérateurs utilisant le même symbole, et le résultat de "3" + 3 devrait être indéfini. Maintenant, "3" + 3 est 6 et "3" . 3 est "33" .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X