Why did the designers of PHP decide to use a full stop / period / "." as the string concatenation operator rather than the more usual plus symbol "+" ?
Is there any advantage to it, or any reason at all? Or did they just like to? :o)
Why did the designers of PHP decide to use a full stop / period / "." as the string concatenation operator rather than the more usual plus symbol "+" ?
Is there any advantage to it, or any reason at all? Or did they just like to? :o)
I would too prefer to use a full stop instead of a plus sign because I usually associate + with mathematical equations.
For Example "this is a string " + 56 + 20
This would be very confusing for both the compiler/interpreter and the developer.
However the disadvantage to using full stop for concatenation operator is that it is just a dot on the screen and sometimes you can't see whether is it in the string or outside the string.
PHP's syntax is influenced by Perl, and .
is the string concatenation operator in Perl.
In a weakly typed language there are advantages to having a different string concatenation and numeric addition operators: which one you use will influence which type the language coerces the variables to.
As it happens, Perl 6 will use a tilde ~
instead of a dot .
for string concatenation, because .
will be used for object member access. So it seems the designers of Perl now think it was a bad choice.
Perhaps, in Perl and PHP's early, non-Object-Oriented days, it seemed like as good a choice as any. Maybe the designers of both languages never envisaged them becoming strong OO languages.
As for whether PHP will one day ditch its ->
member access syntax for .
, who knows?
The use of the dot as string concatenation operator in PHP probably dates back to Perl. Remember that PHP once was nothing more than a bunch of Perl scripts.
Also it makes sense to have distinct string concatenation and addition operators, especially in weakly-typed languages. There are enough pitfalls in PHP already to shoot yourself in the foot, you don't need to add another one.
I guess it is so you can concatenate numbers with strings?
$i=100;
$str="hello";
$str2 = $str.$i
Since you don't declare variable types, with a + it could give a result of 100 instead of "hello100."
Logically + is used for numbers. While a dot is used to concatenate two sentences (strings) in a paragraph for example. Hence dot is used to concatenate strings. So it is pretty logical i believe. It is better that way...
This doesn't answer the question, just wanted to share something.
From PHP Manual: String Operators, someone posted this which I find rather interesting. Notice how the space plays a part in the output.
Excerpt:
If you attempt to add numbers with a concatenation operator, your result will be the result of those numbers as strings.
<?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
?>
I am not a PHP expert, but, how else do you do differentiate that last two lines?
$first = 100;
$second = 20;
$stringresult = $first . $second;
$arithmeticresult = $first + $second;
The most obvious reason would probably be that PHP
inherits a lot of its syntax from Perl
- and Perl
uses a dot (.
) for string concatenation.
But, we can delve deeper into it and figure out why this was implemented in Perl
- the +
operator is most commonly used for mathematical equations - it's only used for concatenation in languages in which the variable type can define the way in which the operator works (simple explanation, example is C#
)
var intAddition = 1 + 2;
Console.WriteLine(intAddition); // Prints 3
var stringConcat = "1" + "2";
Console.WriteLine(stringConcat); // Prints "12"
^ As you can see, the +
operator is used both for concatenation and addition in C#.
Perhaps the reasoning goes lower level and is due to the boolean algebra of logic gates - +
means OR
in logic gates, whereas .
is used as the AND
operator - which makes sense when it comes to string concatenation.
It makes sense to have two separate operators, one for concatenation and one for addition - it's just unfortunate that these two can be mixed up due to other languages.
Here is a bit of historical context.
Perl, and by extension PHP, has untyped variables.
"5" == 5
"5" + 5 == 10
"5" . 5 == 55
->
..
for method access..
was one of the few characters available for this use. The only other one that would make sense to use is ~
, which is probably why that is now the Perl 6 concatenation operator.+
should always be defined as a commutative operation (i.e., A+B = B+A). In the case of string concatenation, this is not the case ("foo" + "bar" != "bar" + "foo"). As such, +
is not a good operator to use for the concatenation operation. Whether or not the language authors had this in mind when they used .
instead (which is close to the multiplication operator, for which commutativity need not hold) remains to be seen, but it was a good decision nonetheless.
Douglas Crockford thinks that + for Concatenation is a Bad Idea:
JavaScript has its share of design errors, such as the overloading of + to mean both addition and concatenation with type coercion