dedlfix: Literale

Beitrag lesen

Hi!

Unter Literal verstehe ich die menschlich lesbare Darstellung eines Wertes, die meistens abhängig von der verwendeten (Programmier-)Sprache ist.

Fast. Der Code-Parser muss es lesen können. Für den Menschen ist es lesbar, wenn er die Besonderheiten der Literale der jeweiligen Programmiersprache kennt - vor allem Quotier- und Maskierregeln -, damit er weiß, für welchen Wert das Literal steht.

aber ein Literal ist die Darstellung eines Wertes mit Hilfe von Code. In einer Variable steht eine für die interne Verarbeitung günstige Form des Wertes, aber üblicherweise kein Literal.
Naja, das ist jetzt wirklich Philosophie. Das Literal A meint i.d.R. schon das Zeichen A, es sei denn ...

Das ist auch praktisch relevant, wenn man sich vorstellen will, was intern abläuft. Von einer Abstraktionsebene weiter oben geschaut, kann man schon sagen, dass da ein A in der Variable steht, aber tatsächlich ist es üblicherweise nicht als Zeichen sondern in einer kodierten Form abgelegt. Es geht aber nicht nur um einzelne Buchstaben. Der Unterschied zwischen Literal und Wert kommt vor allem dann zum Vorschein, wenn mehrdeutige Zeichen verwendet werden, wie Anführungszeichen.

Außerdem, ist das Literal des Zeichens A unter PHP nicht A sondern 'A' oder "A" oder "\x41" oder "\0101" (plus viele weitere Möglichkeiten, wenn man die Heredoc- oder Nowdoc-Syntax hinzunimmt). Die Anführungszeichen gehören bei Strings zum Literal, damit man es von Bezeichnern unterscheiden kann.

Klar, und was käme heraus, wenn man '42' oder 42 oder 000101010 ausführen lassen wollte? ;-P

Ist nicht weiter relevant, weil es nicht geht.

In diesem Falle (bei Verwendung als Funktionsname) steht ja in der Variablen wieder nur ein Name, keine Adresse für den Code-Pointer. Dieser Name wird für die Ausführung wieder als Literal (im speziellen Kontext) verwendet, um den passenden Punkt in der Symbol-Tabelle zu finden.

Der Wert wird zum Finden der Funktion mit diesem Namen verwendet. Ein Literal spielt dabei keine Rolle, weil du ja foo() aufrufen willst und nicht "foo"(). Es werden keine Begrenzungszeichen benötigt, um den Funktionsnamen zu finden. Ein String-Literal unter PHP hat jedoch welche (Heredoc und Nowdoc nicht weiter beachtet).

Lo!