Почему оператор конкатенации строки php является точкой (.)?

В PHP оператор строки (.) Используется для конкатенации строк. Например:

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

Оператор точек всегда, кажется, путает людей (включая меня) в первый раз, когда они его видят, тем более, что, когда вы используете его для конкатенации 2 строк, операция не выдает ошибку, а просто «тихо» терпит неудачу. Это также распространенная ошибка при переключении между PHP и другими языками, такими как JavaScript, Python и т. Д., Которые не используют этот оператор.

Мой вопрос: почему язык использует оператор dot (.) Вместо более широко используемого оператора, такого как plus (+)? Есть ли какие-либо исторические причины, по которым вы можете указать, почему этот оператор был выбран? Это просто потому, что точка может передавать другие типы переменных в строку? Например:

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

Благодаря!

Я думаю, что неплохо иметь другого оператора, потому что точка и плюс делают совершенно разные вещи.

Что такое "a string" + "another string"; на самом деле означает, с нечеткой языковой точки зрения?

Значит ли это

  • Добавьте числовое значение двух строк или,
  • объединить две строки

Вы считаете, что это второй, но знак плюса используется для численного добавления во всех случаях, кроме строк. Зачем?

Кроме того, из слабо типизированной точки зрения (которая является PHP), php-скрипт

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

Таким образом, точка-точка указывает, что она явно используется для конкатенации.

Дело не в том, что это сбивает с толку, это не интуитивно, потому что все другие языки делают это по-другому. И, это хорошая причина для отслеживания этой тенденции? Делать вещи так, как они всегда делаются, это не всегда правильный путь.

Знак плюса не так «широко принят», как вы могли бы вообразить для конкатенации строк. Существует много языков, которые не используют его, в том числе Perl и C, и поскольку это те, где корни PHP лежат, для PHP имеет смысл следовать этому примеру. На многих языках даже нет оператора; вам придется использовать функцию concat() .

PHP слабо типизирован и будет делать неявное преобразование типов, когда он увидит знак плюса или точку. Это означает, что если вы делаете $x = "45 inches" + "20 inches"; , PHP установит $x на 65 . Если вы используете оператор конкатенации точек, результат будет сильно отличаться. То же самое относится, если у вас есть $y = 5 . 10; $y = 5 . 10; , Это даст вам 510 , но изменит его на знак плюса, и вы получите совершенно другой результат.

Кроме того, рассуждая логически, противоположность плюса – минус. Но это не так легко сопоставляется с конкатенацией. (Я видел один язык, который его пробовал, но это действительно не имело большого смысла)

Ваше предпочтение знаку плюса как конкатенатора сводится к сопротивлению изменениям при изучении нового языка (довольно обычная вещь – я знаю несколько человек, которые изначально ненавидели Python, потому что ему не хватает фигурных скобок!)

Как человек, который долго программировал на многих языках, могу сказать, что я предпочитаю иметь однозначный оператор конкатенации. Использование одного и того же оператора для добавления и конкатенации на свободно типизированном языке требует неприятностей; на самом деле, я бы сказал, что это один из самых больших недостатков Javascript (и это происходит от кого-то, кто вообще является поклонником Javascript).

Python стробируется, что означает, что он может уйти с использованием знака «плюс» в качестве оператора добавления и конкатенации, поскольку он заставляет вас работать с одним и тем же типом; вы не можете добавить целое число в строку в Python; если вам нужно, то вам нужно явно использовать ваши типы, поэтому нет никакой двусмысленности, по крайней мере, не для компилятора.

Тем не менее, существует еще двусмысленность для читателя – это может быть не сразу очевидным из чтения того, что подразумевалось под любым значком плюса в коде. В Python проще работать, но лично я бы предпочел иметь однозначного оператора. Но это только личное предпочтение; если я работаю с Python, Javascript или Visual Basic, тогда я должен работать с их правилами.

Невозможно использовать + в качестве оператора конкатенации в PHP из-за эквивалентности между строками цифр и чисел. У вас будет два оператора, использующих один и тот же символ, и результат от "3" + 3 должен быть неопределенным. Теперь "3" + 3 равно 6 и "3" . 3 "3" . 3"33" .