От MSDN:
, Если один из указанных путей является строкой нулевой длины, этот метод возвращает другой путь. Если path2 содержит полный путь, этот метод возвращает path2.
В Вашем примере, path2 является абсолютным.
Наиболее очевидной причиной, вероятно, будет то, что 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
, что имеет смысл, когда дело доходит до конкатенации строк.
Имеет смысл иметь два отдельных оператора, один для конкатенации, а другой для сложения - просто жаль, что эти два могут быть перепутаны из-за других языков.
Вот немного исторического контекста.
->
. .
для доступа к методам. .
был одним из немногих персонажей, доступных для этого использования. Единственный другой, который имеет смысл использовать, - это ~
, вероятно, поэтому теперь он является оператором конкатенации Perl 6. Думаю, это для того, чтобы вы могли объединять числа со строками?
$i=100;
$str="hello";
$str2 = $str.$i
Поскольку вы не объявляете типы переменных, с помощью + он может дать результат 100 вместо «hello100».
Это не отвечает на вопрос, просто хотел чем-то поделиться.
Из Руководство по 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
?>
Я бы тоже предпочел использовать точку вместо знака плюс, потому что я обычно связывают + с математическими уравнениями.
Например «это строка» + 56 + 20
Это может сбить с толку как компилятор / интерпретатор, так и разработчика.
Однако недостатком использования точки для оператора конкатенации является то, что это просто точка на экране, и иногда вы можете ' t посмотреть, находится ли он в строке или вне строки.
+
всегда следует определять как коммутативную операцию (т. Е. A + B = B + A). В случае конкатенации строк это не так («foo» + «bar»! = «Bar» + «foo»). Таким образом, +
не является подходящим оператором для операции конкатенации. Имели ли это в виду авторы языка, когда использовали .
вместо этого (который близок к оператору умножения, для которого коммутативность не обязательна) еще предстоит увидеть, но, тем не менее, это было хорошее решение.
Я не эксперт по PHP, но как еще вы можете различать последние две строки?
$first = 100;
$second = 20;
$stringresult = $first . $second; // "10020"
$arithmeticresult = $first + $second; // 120
Логически + используется для чисел. В то время как точка используется, например, для соединения двух предложений (строк) в абзаце. Следовательно, точка используется для объединения строк. Я считаю, что это довольно логично. Так лучше ...
На синтаксис PHP влияют Perl и .
- это оператор конкатенации строк в Perl.
В языке со слабой типизацией разные операторы конкатенации строк и сложения чисел дают преимущества: какой из них будет влиять на тип, к которому язык приводит переменные.
Как он происходит, Perl 6 будет использовать тильду ~
вместо точки .
для конкатенации строк, потому что .
будет использоваться для доступа к члену объекта. Так что кажется, что разработчики Perl теперь думают, что это плохой выбор.
Возможно, в ранние, не объектно-ориентированные дни Perl и PHP это казалось таким же хорошим выбором, как и любой другой. Возможно, разработчики обоих языков никогда не предполагали, что они станут сильными объектно-ориентированными языками.
Дуглас Крокфорд считает, что + для конкатенации - плохая идея :
JavaScript имеет свою долю ошибок проектирования, таких как перегрузка + для обозначения обоих сложение и конкатенация с приведением типов
Использование точки в качестве оператора конкатенации строк в PHP, вероятно, восходит к Perl. Помните, что PHP когда-то был не более чем набором сценариев Perl.
Также имеет смысл иметь отдельные операторы конкатенации и сложения строк, особенно в языках со слабой типизацией. В PHP уже достаточно подводных камней, чтобы прострелить себе ногу, добавлять еще не нужно.