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 "+" ?
Bunun için herhangi bir avantaj ya da herhangi bir neden var mı? Ya da sadece ister mi? : O)
The most obvious reason would probably be that PHP inherits a lot of its syntax from Perl - and Perl uses a dot (.
) dize birleştirme için. Strong>
Ama biz bunun içine derin defterleri ve bu Perl yılında uygulamaya neden anlamaya - +
operatörü en yaygın matematiksel denklemler için kullanılır - değişken türü tanımlayabilirsiniz hangi sadece dilde birleştirme için kullanılan Operatör işleri (örneğin C # basit bir açıklamadır) hangi yolu
var intAddition = 1 + 2;
Console.WriteLine(intAddition); // Prints 3
var stringConcat = "1" + "2";
Console.WriteLine(stringConcat); // Prints "12"
^ Gördüğünüz gibi, +
operatörü hem de C # ile birleştirme ve ek için kullanılır.
Belki akıl alt düzey gidiyor ve bağlı logic gates in boolean cebir için - +
vasıtası OR
mantık kapıları, .
ise string birleştirme gelince mantıklı - AND
operatörü olarak kullanılır.
Bu iki ayrı operatörleri, birleştirme için bir tane ve ek için bir tane mantıklı - bu iki dolayı diğer dillere kadar karışık olabilir ki, sadece talihsiz.
PHP'nin sözdizimi Perl etkilenmiş, ve .
Perl dize birleştirme operatörü olduğunu.
Kullandığınız bir dil için değişkenler coerces hangi tip etkileyecektir: zayıf yazılı bir dil, farklı bir dize birleştirme ve sayısal ekleme operatörleri olmasının avantajları vardır.
Gibi olur .
nesne üye erişim için kullanılan olacak çünkü, Perl 6, yerine dize birleştirme için bir nokta .
bir tilde ~
kullanacaktır. Yani Perl tasarımcıları şimdi kötü bir seçim olduğunu düşünüyorum görünüyor.
Belki, Perl ve PHP erken, non-Object-Oriented gün içinde, herhangi bir gibi iyi bir seçim gibi görünüyordu. Belki her ikisi de dil tasarımcıları onları güçlü OO dilleri haline öngörülen asla.
Ister PHP gelince bir gün .
için ->
üyesi erişim sözdizimi, bilen hendek olacak?
PHP dize birleştirme operatörü olarak noktanın kullanımı muhtemelen geri Perl dayanıyor. PHP kez Perl betikleri bir grup başka bir şey olduğunu hatırlıyorum.
Ayrıca özellikle zayıf-yazdığınız dilde, farklı dize birleştirme ve ekleme operatörleri olması mantıklı. Yeterince tuzaklar ayak kendinizi çekmek için zaten PHP vardır, başka bir tane eklemek gerekmez.
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
Ben de yerine bir artı işareti Nokta kullanmayı tercih ediyorum matematiksel denklemler ile genellikle ortak + çünkü.
Örneğin "this is a string " + 56 + 20
Bu derleyici / yorumlayıcı ve geliştirici her ikisi için çok kafa karıştırıcı olabilir.
Ancak birleştirme operatörü için tam durdurmak kullanarak dezavantajı ekranda sadece bir nokta olduğunu ve bazen de dize veya dize dışında olup olmadığını göremiyorum ki.
Bu sadece bir şey paylaşmak istedim soruya, cevap vermez.
PHP Manual: String Operators itibaren, birisi ben çok ilginç buluyorum bu yayınlanmıştır. Alan çıkışında bir rol oynar dikkat edin.
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
?>
+
her zaman değişmeli işlemi (yani, A + B = B + A) olarak tanımlanmalıdır. Dize birleştirme durumunda, bu ("foo" + "bar"! = "Bar" + "foo") durumda değil. Gibi +
birleştirme işlemi için kullanılacak iyi bir operatör değil. Onlar görülecektir (Değişmelilik tutmak gerekmez hangi için, çarpma operatörü yakın olan) yerine .
kullanılan, ama yine de iyi bir karar iken dil yazarlar aklında bu vardı olsun veya olmasın.
Burada tarihsel bağlamın bir parçasıdır.
Perl ve PHP uzantısı tarafından, untyped değişkenleri vardır.
"5" == 5
"5" + 5 == 10
"5" . 5 == 55
->
..
kullanmaya başladı oldu..
bu kullanıma birkaç karakter biriydi. Kullanmak mantıklı olur sadece diğeri şimdi Perl 6 birleştirme operatörü muhtemelen neden olan, ~
olduğunu.