Подтвердить что ты не робот

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

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

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

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

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

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

Спасибо!

4b9b3361

Ответ 1

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

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

Означает ли это

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

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

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

$myvar = 1;
$myvar2 = 2;

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

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

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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