web-dev-qa-db-fra.com

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

Dans PHP, le Opérateur de cordes DOT (.) Est utilisé pour concaténer des chaînes. Par exemple:

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

L'opérateur de points semble toujours confondre les personnes (incluses de moi-même) la première fois qu'ils le voient, d'autant plus que lorsque vous l'utilisez pour concaténer 2 chaînes, l'opération ne jette pas une erreur mais "silencieusement" échoue. C'est aussi une erreur commune lors de la commutation entre PHP et d'autres langues telles que JavaScript, Python, etc. qui n'utilisent pas cet opérateur.

Ma question est de savoir pourquoi la langue utilise-t-elle l'opérateur DOT (.) Au lieu d'un opérateur plus largement accepté tel que plus (+)? Y a-t-il des raisons historiques que vous pouvez indiquer pourquoi cet opérateur a été sélectionné? Est-ce juste parce que le point peut-il lancer d'autres types de variables à la chaîne? Par exemple:

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

Merci!

38
Justin Ethier

Je pense que c'est une bonne idée d'avoir un opérateur différent, car DOT et plus font des choses complètement différentes.

Que fait "a string" + "another string"; réellement signifié, d'un point de vue de la langue non spécifique?

Est-ce que ça veut dire que

  • Ajouter la valeur numérique des deux chaînes ou,
  • concaténer les deux cordes

Vous supposeriez que c'est le second, mais un signe plus est utilisé pour l'ajout numérique dans tous les cas, à l'exception des chaînes. Pourquoi?

En outre, à partir d'un point de vue typé de typement (qui PHP est), un script PHP

$myvar = 1;
$myvar2 = 2;

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

La notation DOT spécifie donc qu'il est clairement utilisé pour la concaténation.

Ce n'est pas que c'est confus, c'est que ce n'est pas intuitif car toutes les autres langues le font d'une manière différente. Et c'est une bonne raison de suivre la tendance? Faire des choses comme elles sont toujours faites, n'est pas toujours la bonne façon.

30
Codemwnci

Le signe plus n'est pas aussi "largement accepté" comme vous l'imagineriez pour des chaînes concaténantes. Il y a un lot des langues qui ne l'utilisent pas, y compris Perl et C, et que celles-ci sont lesquelles sont les racines de PHP, cela a du sens pour PHP Suivre la poursuite. De nombreuses langues n'ont même pas d'opérateur pour cela; vous devez utiliser une fonction concat().

PHP est faiblement dactylographié et fera une conversion de type implicite lorsqu'il voit le signe plus ou un point. Cela signifie que si vous faites $x = "45 inches" + "20 inches";, PHP définira $x à 65. Si vous utilisez l'opérateur de concaténation DOT, le résultat sera clairement très différent. La même chose s'applique si vous avez $y = 5 . 10;. Cela vous donnera 510, mais changez-le à un signe plus et vous obtenez un résultat complètement différent.

En outre, réfléchir logiquement, le contraire d'un plus est un moins. Mais cela ne correspond pas si facilement à la concaténation. (J'ai vu une langue qui l'a essayé, mais cela n'avait vraiment pas beaucoup de sens)

Votre préférence pour le signe plus en tant que concatéenateur est purement réduite à une résistance au changement lors de l'apprentissage d'une nouvelle langue (une chose commune - je connais quelques personnes qui ont initialement détesté Python parce qu'il manque de bouclée croisillons!)

En tant que personne programmée depuis longtemps en utilisant beaucoup de langues, je peux vous dire que je préfère beaucoup avoir un opérateur de concaténation sans ambiguïté. L'utilisation du même opérateur pour l'addition et la concaténation dans une langue floquinée est de demander des problèmes; En fait, je dirais que c'est l'un des plus gros défauts de Javascript (et cela vient de quelqu'un qui en général est un fan de JavaScript).

Python est frappé de manière stronée, ce qui signifie qu'il peut s'en tirer avec le signe plus comme l'opérateur d'addition et de concaténation, car cela vous oblige à travailler avec le même type; Vous ne pouvez pas ajouter un entier à une corde en python; Si vous avez besoin, vous devez alors lancer explicitement vos types, il n'y a donc aucune ambiguïté, du moins pas au compilateur.

Il y a cependant toujours l'ambiguïté du lecteur - il peut ne pas être immédiatement évident de lire ce que l'on entendait par aucun signe plus dans le code. C'est plus facile dans Python= pour le calculer, mais personnellement, je préférerais toujours avoir un opérateur sans ambiguïté. Mais c'est juste une préférence personnelle; si je travaille avec python, javascript ou visuel Basique alors je dois travailler à leurs règles.

10
Spudley

Il n'est pas possible d'utiliser + comme opérateur de concaténation en PHP, en raison de l'équivalence entre chaînes de chiffres et de chiffres. 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".

6
Rosh Oxymoron