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

От MSDN:

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

В Вашем примере, path2 является абсолютным.

34
задан Daniel May 10 February 2010 в 12:54
поделиться

11 ответов

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

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

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

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


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

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

24
ответ дан 27 November 2019 в 16:00
поделиться

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

  • Язык PHP начинался как набор сценариев Perl.
  • Таким образом, PHP получает большую часть » «5» + 5 == 10 «5». 5 == 55
  • Чтобы отличить сложение от конкатенации, они должны были быть двумя разными операторами.
  • Perl скопировал оператор доступа к методу из C -> .
  • Это было ] до многие из более современных языков программирования начали использовать . для доступа к методам.
  • Конкатенация - одна из наиболее распространенных операций, в которой должно использоваться меньше символов. Согласно кодировке Хаффмана.
  • . был одним из немногих персонажей, доступных для этого использования. Единственный другой, который имеет смысл использовать, - это ~ , вероятно, поэтому теперь он является оператором конкатенации Perl 6.
2
ответ дан 27 November 2019 в 16:00
поделиться

Думаю, это для того, чтобы вы могли объединять числа со строками?

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

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

0
ответ дан 27 November 2019 в 16:00
поделиться

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

Из Руководство по 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

?>
5
ответ дан 27 November 2019 в 16:00
поделиться

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

Например «это строка» + 56 + 20

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

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

5
ответ дан 27 November 2019 в 16:00
поделиться

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

2
ответ дан 27 November 2019 в 16:00
поделиться

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

$first  = 100;
$second = 20;
$stringresult     = $first . $second; // "10020"
$arithmeticresult = $first + $second; // 120
21
ответ дан 27 November 2019 в 16:00
поделиться

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

13
ответ дан 27 November 2019 в 16:00
поделиться

На синтаксис PHP влияют Perl и . - это оператор конкатенации строк в Perl.

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

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

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

35
ответ дан 27 November 2019 в 16:00
поделиться

Дуглас Крокфорд считает, что + для конкатенации - плохая идея :

JavaScript имеет свою долю ошибок проектирования, таких как перегрузка + для обозначения обоих сложение и конкатенация с приведением типов

8
ответ дан 27 November 2019 в 16:00
поделиться

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

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

7
ответ дан 27 November 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: