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

Почему полная остановка, "." а не символ плюса, "+", для конкатенации строк в PHP?

Почему разработчики PHP решили использовать полную остановку/период/ "." как строка оператор конкатенации, а не более обычный плюс символ "+"?

Есть ли у него какое-либо преимущество или вообще какая-либо причина? Или они просто хотели?: О)

4b9b3361

Ответ 1

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

Но мы можем углубиться в это и выяснить, почему это было реализовано в Perl - оператор + наиболее часто используется для математических уравнений - он используется только для конкатенации на языках, где тип переменной может определять способ в котором работает оператор (простое объяснение, пример С#)

var intAddition = 1 + 2;
Console.WriteLine(intAddition); // Prints 3
var stringConcat = "1" + "2";
Console.WriteLine(stringConcat); // Prints "12"

^ Как вы можете видеть, оператор + используется как для конкатенации, так и для добавления в С#.


Возможно, рассуждение идет на более низкий уровень и связано с булевой алгеброй логических ворот - + означает OR в логических затворах, тогда как . используется как оператор AND, что имеет смысл, когда дело доходит до конкатенации строк.

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

Ответ 2

Синтаксис PHP зависит от Perl, а . - оператор конкатенации строк в Perl.

В слабо типизированном языке есть преимущества наличия разных операторов конкатенации строк и числовых сложения: какой из них вы используете, будет влиять на какой тип язык принуждает переменные к.

Как это бывает, Perl 6 будет использовать тильду ~ вместо точки . для конкатенации строк, потому что . будет использоваться для доступа к объекту. Итак, дизайнеры Perl теперь считают, что это плохой выбор.

Возможно, в ранних, не-объектно-ориентированных днях Perl и PHP это казалось хорошим выбором, как любой. Возможно, разработчики обоих языков никогда не предполагали, что они становятся сильными OO-языками.

Что касается того, будет ли PHP однажды пропустить свой синтаксис доступа к элементу -> для ., кто знает?

Ответ 3

Я не эксперт по PHP, но как иначе вы различаете последние две строки?

$first  = 100;
$second = 20;
$stringresult     = $first . $second; // "10020"
$arithmeticresult = $first + $second; // 120

Ответ 4

Логически + используется для чисел. Хотя точка используется для конкатенации двух предложений (строк) в абзаце, например. Следовательно, точка используется для конкатенации строк. Так что это довольно логично, я верю. Это лучше...

Ответ 6

Использование точки в качестве оператора конкатенации строк в PHP, вероятно, относится к Perl. Помните, что PHP был всего лишь кучей скриптов Perl.

Также имеет смысл иметь различные операторы конкатенации и сложения строк, особенно на слабо типизированных языках. На PHP уже достаточно ловушек, чтобы стрелять в ногу, вам не нужно добавлять еще один.

Ответ 7

Я бы тоже предпочел использовать полную остановку вместо знака плюса, потому что обычно я связываю + с математическими уравнениями.

Пример "this is a string " + 56 + 20

Это будет очень запутанно для компилятора/интерпретатора и разработчика.

Однако недостатком использования полной остановки для оператора конкатенации является то, что это просто точка на экране, и иногда вы не можете увидеть, находится ли она в строке или вне строки.

Ответ 8

Это не отвечает на вопрос, просто хочет поделиться чем-то.

Из Руководство PHP: Операторы строк, кто-то разместил это, что я считаю довольно интересным. Обратите внимание, как пространство играет роль в выходе.

Выдержки:
Если вы попытаетесь добавить числа с помощью оператора конкатенации, ваш результат будет результатом этих чисел в виде строк.

<?php

echo "thr"."ee";           //prints the string "three"
echo "twe" . "lve";        //prints the string "twelve"
echo 1 . 2;                //prints the string "12"
echo 1.2;                  //prints the number 1.2
echo 1+2;                  //prints the number 3

?>

Ответ 9

Вот немного исторического контекста.

  • Язык PHP начинался как набор скриптов Perl.
  • Таким образом, PHP получает большую часть синтаксиса из Perl.
  • Perl, а также расширение PHP, имеет нетипизированные переменные.

         "5"  ==   5
    "5" + 5   ==  10
    "5" . 5   ==  55
    
  • Чтобы определить разницу между добавлением и конкатенацией, они должны были быть двумя разными операторами.
  • Perl скопировал оператор доступа к методу из C ->.
  • Это было до, многие из более современных языков программирования начали использовать . для доступа к методу.
  • Конкатенация является одной из наиболее распространенных операций и должна использовать меньшее количество символов. Согласно кодировке Хаффмана.
  • . был одним из немногих символов, доступных для этого использования. Единственный другой, который имел бы смысл использовать, - это ~, что, вероятно, поэтому является теперь оператором конкатенации Perl 6.

Ответ 10

+ всегда следует определять как коммутативную операцию (т.е. A + B = B + A). В случае конкатенации строк это не так ( "foo" + "bar"!= "Bar" + "foo" ). Таким образом, + не является хорошим оператором для операции конкатенации. Независимо от того, знали ли авторы этого языка, когда они использовали . (что близко к оператору умножения, для которого не требуется переносить), пока не видно, но это было хорошее решение тем не менее.

Ответ 11

Хотя это не историческая причина, это может показать вам, почему хорошо иметь отдельный оператор для добавления и конкатенации в случае PHP.

Причина в том, что мы видим в JavaScript. Мы используем символ + для конкатенации и добавления. В PHP у нас есть отдельный оператор для двух, который важен для динамически типизированных языков, где также присутствует неявное преобразование типов.

В PHP

echo  5  + 1; //6
echo  5  . 1; //51
echo "5" + 1; //6
echo "5" . 1; //51

Это неудивительно для всех, потому что мы всегда четко указывали, хотим ли мы добавить или объединить две переменные. Или, другими словами, если мы думаем о них как о числах или о строках.

В JavaScript

console.log( 5  +  1);  //6
console.log("5" +  1);  //51
console.log( 5  + "1"); //51
console.log("5" + "1"); //51

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

В Python

Python также использует оператор + для конкатенации и для добавления тоже, но не допускает неявного преобразования типов. Вы должны явно указать преобразование типа.

print  5  + 1 //6
print "5" + 1 //TypeError: cannot concatenate 'str' and 'int' objects

Мы должны сделать преобразование типов, чтобы заставить его работать: a + int(b)

Всего

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

Ответ 12

Я предполагаю, что вы можете объединить числа со строками?

$i=100;
$str="hello";
$str2 = $str.$i

Поскольку вы не объявляете типы переменных, с +, он может дать результат 100 вместо "hello100".