Warum ist der PHP-String-Verkettungsoperator ein Punkt (.)? [closed]

Lesezeit: 6 Minuten

Warum ist der PHP String Verkettungsoperator ein Punkt closed
Justin Ethier

In PHP ist die String-Operator Punkt (.) wird verwendet, um Zeichenfolgen zu verketten. Beispielsweise:

$msg = "Hello there, " . $yourName;

Der Punktoperator scheint die Leute (mich eingeschlossen) immer zu verwirren, wenn sie ihn zum ersten Mal sehen, zumal, wenn Sie ihn verwenden, um zwei Strings zu verketten, die Operation keinen Fehler auslöst, sondern einfach “stillschweigend” fehlschlägt. Es ist auch ein häufiger Fehler beim Wechsel zwischen PHP und anderen Sprachen wie JavaScript, Python usw., die diesen Operator nicht verwenden.

Warum verwendet die Sprache den Punkt-Operator (.) anstelle eines allgemein akzeptierten Operators wie Plus (+)? Gibt es historische Gründe für die Auswahl dieses Anbieters? Liegt es nur daran, dass der Punkt andere Variablentypen in Strings umwandeln kann? Beispielsweise:

echo 1 . 2;                // Prints the string "12"

  • Die Verwendung eines + wäre in einer locker geschriebenen Sprache nicht besonders praktisch: sollte echo 1 + 2; 12 oder 3 geben?

    – Mark Baker

    24. November ’10 um 12:37

  • “Ist es nur, weil der Punkt andere Variablentypen in Strings umwandeln kann?” Wie alles, was erwartet, dass ein String primitiven Typ in Strings umwandelt: Ja, das ist der Grund 😉

    – KingCrunch

    24. November ’10 um 12:48

  • Inwiefern ist dieser Markt nicht als nicht-konstruktiv?

    – Ummasswerfer

    25. März ’13 um 23:34

  • 16.000 Menschen haben diesen Thread bis 2017 gesehen – warum ist das nicht konstruktiv?

    – duhaime

    2. Dezember ’17 um 19:41

  • In den Antworten fehlt hier der eigentliche Grund, warum PHP “.” verwendet. zur Verkettung: Weil es es von Perl geliehen hat. PHP war ursprünglich ein Satz von Perl-Skripten und entlehnte eine Reihe von Dingen aus der Perl-Syntax. Warum Perl “.” verwendet zur Verkettung weiß ich nicht 🙂

    – Alice Heaton

    2. Dezember ’20 um 11:38

Ich denke, es ist eine gute Idee, einen anderen Operator zu haben, da Punkt und Plus völlig unterschiedliche Dinge tun.

Was macht "a string" + "another string"; eigentlich bedeuten, aus einer nicht spezifischen sprachlichen Sicht?

Bedeutet es

  • Addieren Sie den numerischen Wert der beiden Strings, oder
  • verketten Sie die beiden Saiten

Sie würden annehmen, dass es die zweite ist, aber ein Pluszeichen wird in allen Fällen außer bei Strings für die numerische Addition verwendet. Wieso den?

Auch aus einer locker typisierten Sicht (welche PHP ist) ein PHP-Skript

$myvar = 1;
$myvar2 = 2;

// would we expect a concatenation or addition?
$concat = $myvar + $myvar2;

Die Punktnotation gibt daher an, dass sie eindeutig zur Verkettung verwendet wird.

Es ist nicht verwirrend, es ist nicht intuitiv, weil alle anderen Sprachen es anders machen. Und ist das ein guter Grund, dem Trend zu folgen? Dinge so zu tun, wie sie immer gemacht werden, ist nicht immer der richtige Weg.

  • Ich weiß Ihre logischen Gründe zu schätzen, aber ich bin völlig anderer Meinung. Der Punkt ist einfach verwirrend und eines der wenigen Dinge, die ich an PHP wirklich hasse.

    – Marco Demaio

    2. Dezember ’12 um 17:36


  • Warum ist das “nur verwirrend”? Ihr obiger Kommentar scheint nichts anderes zu implizieren als eine persönliche Vorliebe für die + Operator (was ich vermuten würde, stammt aus Ihrer Erfahrung mit anderen Sprachen, die es verwenden?).

    – traq

    3. Januar ’13 bei 6:56


  • Ich denke, es ist zumindest a kleine etwas verwirrend das 1 . 2 ist ungleich zu 1.2. Und jemand mit mathematischem Hintergrund könnte denken $x . $y gemeint $x multipliziert mit $y. (Aber natürlich sollte jeder, der mit dem Programmieren in einer neuen Sprache beginnt, die grundlegenden Operatoren für diese Sprache lernen.)

    – nnnnnn

    20. Mai ’13 um 13:16


  • Das Argument ist gültig, aber die Prämisse ist falsch. PHP erzeugt die Mehrdeutigkeit, die die Punktoperatoren aufgrund seines schwachen Typsystems lösen. Es ist ein Kompromiss zwischen strengeren Variablentypen und strengeren Operationsargumenttypen: In JavaScript ist “+” im Allgemeinen eindeutig, da von Ihnen erwartet wird, dass Sie Benutzereingaben in den richtigen Typ konvertieren, bevor Sie sie verwenden; in PHP muss “+” seine Argumenttypen erzwingen (dh seine Argumente automatisch in Zahlen umwandeln), da von Ihnen erwartet wird, dass Sie Benutzereingaben einfach als Strings weitergeben können. Dies ist einer der Gründe, warum so viele PHP für schlampig halten.

    – Alan Pflaume

    13. September ’14 um 13:12

Warum ist der PHP String Verkettungsoperator ein Punkt closed
Spudley

Das Pluszeichen wird nicht so “weit akzeptiert”, wie Sie es sich beim Verketten von Zeichenfolgen vorstellen würden. Es gibt a viel von Sprachen, die es nicht verwenden, einschließlich Perl und C, und da hier die Wurzeln von PHP liegen, ist es sinnvoll, dass PHP diesem Beispiel folgt. Viele Sprachen haben nicht einmal einen Operator dafür; du müsstest a verwenden concat() Funktion.

PHP ist schwach typisiert und führt eine implizite Typkonvertierung durch, wenn es das Pluszeichen oder einen Punkt sieht. Dies bedeutet, dass, wenn Sie dies tun $x = "45 inches" + "20 inches";, PHP wird gesetzt $x zu 65. Wenn Sie den Punktverkettungsoperator verwenden, wird das Ergebnis deutlich anders ausfallen. Das gleiche gilt, wenn Sie haben $y = 5 . 10;. Das gibt dir 510, aber ändern Sie es in ein Pluszeichen und Sie erhalten ein völlig anderes Ergebnis.

Logisch betrachtet ist auch das Gegenteil von Plus ein Minus. Aber das lässt sich nicht so leicht einer Verkettung zuordnen. (Ich habe eine Sprache gesehen, die es ausprobiert hat, aber es hat wirklich nicht viel Sinn gemacht)

Ihre Vorliebe für das Pluszeichen als Verkettung ist rein auf den Widerstand gegen Veränderungen beim Erlernen einer neuen Sprache zurückzuführen (eine ziemlich häufige Sache – ich kenne ein paar Leute, die Python anfangs hassten, weil es geschweifte Klammern fehlt!)

Als jemand, der schon lange mit vielen Sprachen programmiert hat, kann ich Ihnen sagen, dass ich einen eindeutigen Verkettungsoperator viel lieber habe. Die Verwendung des gleichen Operators für Addition und Verkettung in einer locker geschriebenen Sprache ist problematisch; Tatsächlich würde ich sagen, dass es einer der größten Fehler von Javascript ist (und das kommt von jemandem, der im Allgemeinen ein Fan von Javascript ist).

Python ist streng typisiert, was bedeutet, dass es mit dem Pluszeichen als Additions- und Verkettungsoperator auskommen kann, da es Sie zwingt, mit demselben Typ zu arbeiten; Sie können in Python keine ganze Zahl zu einer Zeichenfolge hinzufügen. Wenn es sein muss, müssen Sie Ihre Typen explizit umwandeln, damit es keine Mehrdeutigkeiten gibt, zumindest nicht für den Compiler.

Es gibt jedoch immer noch die Mehrdeutigkeit für den Leser – es ist möglicherweise nicht sofort ersichtlich, was mit einem bestimmten Pluszeichen im Code gemeint ist. In Python ist es einfacher, es zu berechnen, aber ich persönlich würde es trotzdem vorziehen, einen eindeutigen Operator zu haben. Aber das ist nur eine persönliche Präferenz; wenn ich mit Python, Javascript oder Visual Basic arbeite, muss ich nach deren Regeln arbeiten.

  • C Sprache verwendet nicht + -Operator, weil er überhaupt keinen String-Verkettungsoperator hat! Sie können Klassenoperatoren nur in überladen C++ und ich erinnere mich noch daran, dass eines der ersten Dinge, die ich beim Lernen gemacht habe C++ war ein MyString Klasse mit dem + Operator zum Verketten von Zeichenfolgen. Es war cool!

    – Marco Demaio

    2. Dezember ’12 um 17:40

Es ist nicht möglich, + als Verkettungsoperator in PHP zu verwenden, wegen der Äquivalenz zwischen Ziffern- und Zahlenfolgen. Sie hätten zwei Operatoren, die dasselbe Symbol verwenden, und das Ergebnis von "3" + 3 müsste undefiniert sein. Jetzt, "3" + 3 ist 6, und "3" . 3 ist "33".

  • “”3″ + 3 müsste undefiniert sein.” – Es würde nicht verfügen über um undefiniert zu sein, könnte es einfach in einen String umgewandelt werden, wie es viele andere Sprachen schaffen, ohne das eigentliche Gefüge von Zeit und Raum zu entwirren.

    – nnnnnn

    20. Mai ’13 um 13:14

.

266140cookie-checkWarum ist der PHP-String-Verkettungsoperator ein Punkt (.)? [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy