Sie können entweder Anführungszeichen oder Apostrophe zur Abgrenzung von Zeichenketten verwenden. Ich persönlich bevorzuge nur **Apostrophe**, es sei denn, es handelt sich um ein besonderes Zeilenumbruchzeichen oder einen Tabulator.
Dafür gibt es eine Reihe von Gründen, gehen wir sie konstruktiv durch.
Der Hauptgrund, keine Anführungszeichen zu verwenden, ist die Sicherheit und die unsachgemäße Behandlung von Datentypen.
Wenn wir HTML-Code in einer Zeichenkette zurückgeben müssen und die Zeichenkette in Anführungszeichen einbetten, müssen wir sie ziemlich umständlich escapen:
return "<a href=\"{$link}\">{$text}</a>";
Oder machen Sie dasselbe auf eine lesbarere Art und Weise, indem Sie die Anführungszeichen beibehalten, ohne sie zu escapen:
return '<a href="' . $link . '">' . $text . '</a>';
Es gibt nichts Schlimmeres, als Variablen in einer Zeichenkette direkt übereinander zu platzieren, so dass man nicht auf Anhieb erkennen kann, was eine Variable und was eine Zeichenkette ist:
$url = "{$baseImageUrl}/{$dirName}/{$basename}.{$ext}";
Diese Schreibweise hat keine negativen Auswirkungen auf die Funktionalität, lediglich die einzelnen Variablen und festen Zeichen aus der Zeichenkette werden zu dicht aneinandergereiht, was die Lesbarkeit verschlechtert.
Versuchen wir es noch einmal und machen es lesbarer:
$url = $baseImageUrl . '/' . $dirName . '/' . $basename . '.' . $ext;
Der Hauptvorteil, den ich sehe, ist die Sauberkeit rund um die Variablen, wo keine unnötigen Zeichen im Namen im Weg sind.
Außerdem ist es einfacher, die Zeichenkette umzubrechen und es gibt keine umbrechenden Zeichen in der Zeichenkette ;)
$url = $baseImageUrl. '/' . $dirName. '/' . $basename . '.' . $ext;
Aber eine Variable kann das, weshalb "etwas" außerhalb der Zeichenkette angehängt wird (vor allem bei Funktionen), während Variablen wieder in die Zeichenkette geschrieben werden. Und manchmal hängt der Programmierer die Variable sogar an die Zeichenkette an. Kurz gesagt: Verwirrung über Verwirrung.
Warum können wir die Dinge nicht einheitlich angehen?
Betrachten Sie den folgenden Funktionsaufruf:
echo getFullName("{$user->name}");function getFullName(string $name): string{// ... Implementierung ...}
Es ist möglich, Variablen in Anführungszeichen zu setzen, was dazu führt, dass sie als String umgeschrieben werden. Befindet sich die Variable jedoch in der Zeichenkette selbst und hat einen anderen Datentyp als string, kann die Information über den ursprünglichen Datentyp verfälscht werden. Wenn zum Beispiel das Konstrukt $user->name
false
oder null
zurückliefert, können wir nicht sagen, dass es sich um einen Fehler handelt.
Eine Anwendung sollte eine Fehlerbedingung immer erkennen und ordnungsgemäß fehlschlagen, anstatt sie zu ignorieren. Eine korrekte Fehlermeldung führt zu einer besseren Fehlersuche in der Zukunft.
Gelegentlich kann es zu Überschreibungen kommen, insbesondere weil eine Funktion einen bestimmten Datentyp erfordert:
trim("{$returnText}");
In diesem Fall bin ich eher geneigt, sie aufzuschreiben:
trim ((string) $returnText);
was nicht so "magisch" ist, und es ist auch für weniger erfahrene Benutzer offensichtlich, was mit der Variablen passiert ist.
Angenommen, wir rufen den Namen eines Hotels aus einer Datenbank ab:
return "{$row->hotel->name}";
Was aber, wenn der Name nicht existiert und null
ist? Durch die Verwendung von Anführungszeichen haben wir einen potenziell schwer zu erkennenden Fehler erzeugt, da er in eine leere Zeichenfolge umgeschrieben wird. Wir möchten jedoch eine echte "Null" zurückgeben. Es macht einen Unterschied, ob der Datensatz nicht existiert oder zwar existiert, aber leer ist.
Die richtige Vorgehensweise wäre also, nichts anzugeben:
return $row->hotel->name;
Erfordert die Funktion die Rückgabe eines bestimmten Datentyps und ist sie diesbezüglich streng? Wenn wir die Spezifikation nicht erfüllen können, sollten wir eine Ausnahme auslösen.
function getHotelName(int $hotelId): string{// Durchführungif ($row->hotel->name === null) {throw new \Exception('Der Hotelname existiert nicht.');}return $row->hotel->name;}
Es ist nicht ungewöhnlich, dass man auf Konstruktionen wie diese stößt:
echo "{$returnCode}" . self::CRLF;
Was besser geschrieben wird als:
echo $returnCode . "\n";
Die Verwendung von Anführungszeichen um die Variable herum ist in diesem Fall unnötig und erschwert nur die Lesbarkeit, da es sich um zusätzliche unnötige Zeichen handelt. Gleichzeitig ist der Zeilenumbruch des Typs CRLF
nicht mehr zeitgemäß und es ist besser, nur \n
zu verwenden, das in der UTF-8
-Kodierung enthalten ist.
Der Datentyp für den Code könnte noch validiert werden. Zum Beispiel, dass es sich um eine Zahl handelt und möglicherweise eine Ersetzung zurückgibt. Dies kann mit dem ternary operator geschehen:
echo (is_int($returnCode) ? $returnCode : '?') . "\n";
Hinweis: Die Verwendung der Funktion
is_int()
deutet auf ein schlechtes Anwendungsdesign hin, denn es sollte nie passieren, dass wir den Datentyp einer Variablen nicht kennen.
Oft ist es notwendig, den Ausgabestring einer Variablen im Ausnahmetext in Anführungszeichen oder Apostrophe einzuschließen. Wenn die Zeichenfolge mit demselben Zeichen beginnt und endet, ist es nicht möglich, bei mehreren Zeichenfolgen schnell und eindeutig festzustellen, wo die Zeichenfolge beginnt und endet, wenn ein Apostroph darin vorkommt:
throw new \Exception(__METHOD__ . ": Unsupported data type '{$fileType}'");
Ich persönlich löse das Problem, indem ich sie in einen anderen Zeichentyp einfüge (eckige Klammern funktionieren bei mir gut), so dass der Anfang und das Ende der Zeichenkette elegant zu erkennen sind:
throw new \Exception(__METHOD__ . ': Nicht unterstützter Datentyp [' . $fileType . ']');
Oder:
throw new \Exception("Status '{$status}' is invalid");
Kann umgetauscht werden gegen:
throw new \Exception('Status [' . $status . '] ist ungültig');
Anführungszeichen sind z. B. für das Parsing durch eine neue Zeile nützlich:
foreach(explode("\n", $text) as $line) {// Durchführung}
Sie wurden speziell für diesen Zweck geschaffen.
Wenn Sie jedoch ein komplexeres Dokument verarbeiten müssen (z. B. Quellcode einer Programmiersprache oder eine HTML-Seite), empfehle ich Tokenizer zusammen mit regulären Ausdrücken.
Wenn Sie aus irgendeinem Grund trotzdem Anführungszeichen verwenden, sollten Sie sie wenigstens durchgängig beibehalten.
Dies ist ein Fall der Abschreckung:
throw new \Exception("Das Bild in der URL existiert nicht. AntwortGröße:" . strlen($result) . ')');
Dabei wird der Anfang der Zeichenfolge durch Anführungszeichen und das Ende durch Apostrophe abgegrenzt.
Dieser Fehler tritt insbesondere bei der Verwendung von automatischen Formatierungswerkzeugen (wie Code Sniffer) auf, die versuchen, Konventionen zu vereinheitlichen, was aber nicht immer gelingt.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | de