Frage

Ich habe nicht viel programing in vielen Sprachen getan, aber ich weiß, in C (++), haben Sie eine Variablentyp (int, char, etc.) zu erklären.

In PHP Sie natürlich, haben nicht das zu tun. Sie können dann mit $str = "something"; beginnen später $str = array("something" => "smells"); und sie ist glücklich.

Wie funktioniert PHP kompilieren? Woher weiß er, was der Variablentyp sein wird? Ist es sogar egal?

Diese Frage hat keine Bedeutung für alles, was ich tue. Ich bin nur neugierig.

EDIT.

Ich brauche diese Frage ein wenig zu klären.

C, wenn ich sage:

int y;

Es behält x Anzahl der Bytes für y. Wenn y überläuft, eine schlechte Nachricht.

PHP nicht diese Art hat (zumindest ich glaube nicht, es tut).

$i = "a number";
$i = 8;
$i = 1000000000000000000;

Es ist alles das Gleiche auf die Sprache. Woher weiß er, wie viel zu reservieren? Oder bin ich zu vergleichen Äpfel mit Orangen? Wenn ich über dieses Unrecht werde, tun Sie gute Themen haben, dass ich besser lesen kann, verstehen?

War es hilfreich?

Lösung

Da Sie C Erfahrung haben, einen PHP-Variable berücksichtigen wie die folgende sein:

typedef struct {
 int varType;
 void* data;
} variable_t;

Wenn Sie eine neue Variable zu erstellen, wird es ein variable_t erstellen, gibt einen Typ-Tag (1 läßt sagen für int, 2 für string), und speichern sie in einer Liste irgendwo (nach Umfang, Referenz namentlich). Der eigentliche Inhalt wird in *data gespeichert werden. Wenn die Variablen erneut zugegriffen wird, kann der Typ von int varType bestimmt werden, und die zuständigen Wirkung auf void* data genommen, wie es als int oder Zeichenfolge verwendet wird.

Stellen Sie sich vor, dass das PHP Snippet:

 $data = 12;
 $data2 = $data + 1;
 $data = "Hello";

erzeugt Anweisungen wie die folgenden (pseudo-CISH):

Line 1:
variable_t* var = new_variable(TYPE_INT, data);
store_variable("data", var);

Line 2:
variable_t* var = get_variable("data2");
if (var->varType == TYPE_INT)
   int value = 1 + *(int*)var->data);
else
   error("Can't add non int");
var = new_variable(TYPE_INT, value);
store_variable("data2", var);

Line 3:
variable_t* var = get_variable("data");
if (var)
  destroy_variable(var);
// Do like line 1, but for TYPE_STRING

Diese Art von Augmented Daten Werke in bytecoded, kompiliert oder interpretiert Sprachen lenken.

Es gibt weitere Informationen in Bezug auf verschiedene virtuelle Maschine-Implementierungen (lokale Zuordnung, Heapzuordnung, registrieren Sie VMs, etc). Wenn Sie möchten, um tatsächlich zu verstehen, wie virtuelle Maschinen arbeiten, ist die beste Referenz Lua. Sehr saubere Sprache, sehr sauber Bytecode und sehr sauber virtuelle Maschine. PHP ist wahrscheinlich die letzte Implementierung Sie betrachten sollten.

Andere Tipps

PHP nicht wirklich zusammenstellen -. Es ist interpretted (in Op-Codes)

So ziemlich, wenn Sie versuchen, etwas zu einem bestimmten Datentyp zu tun, die nicht getan werden können, wird es einen Fehler geben. Es gibt keine Typprüfung.

Es lässt sich nicht kompilieren. Es ist ein interpretierte Sprache , wie Javascript.

Ich weiß, dies ist eine alte Frage, aber hier einige weitere spezifische Informationen, wie PHP behandelt die Fragen des OP gefragt.

Dies ist die Seite von der PHP-Referenz, die Sie mit starten wollen würden:

Einführung in die Variablen

Ich weiß Verknüpfung ist nicht bevorzugt, aber diese Verbindung sollte stabil sein, und ich will nicht zu Großhandel Kopie PHP Referenzdokumentation. Hier sind die Highlights.

  

OP: Wie funktioniert PHP wissen, welche Art von Variablen verwendet er (oder tut es)

PHP ist in C geschrieben und verwendet eine C-Struktur typedef die es eine zval ruft zusammen mit einem C Vereinigung typedef das ist nennt ein zval_value alle Variablen darzustellen.

typedef struct _zval_struct {
    zvalue_value value;        /* variable value */
    zend_uint refcount__gc;    /* reference counter */
    zend_uchar type;           /* value type */
    zend_uchar is_ref__gc;     /* reference flag */
} zval;

Der Motor versucht, die Komplexität des Konzepts einer Variablen zu verschleiern, die jede Art, indem sie eine einheitliche und intuitive Reihe von Makros für den Zugriff auf die Strukturen verschiedene Bereiche sein kann.“

"PHP ist eine dynamische, lose typisierte Sprache, dass Anwendungen copy-on-write und Referenzzählung." Referenzzählung und Copy-on-Write (COW) sind zwei leistungsstarke Konzepte PHP Anwendungen, die ich hier nicht näher eingehen, sondern sind lesenswert zu.

" Schwache Typisierung von der Präferenz des Motors implizit zu konvertieren, oder coerce Variablen in die gewünschte Art zur Ausführungszeit . Referenzzählung ist das Mittel, durch das die Maschine ableiten kann, wenn eine Variable nicht mehr hat Verweise in dem Benutzer-Code und so in die Lage, die Strukturen mit den variablen verbunden zu befreien. "

" Die zval_value ist eine Vereinigung, die alle Arten eine Variable halten kann darstellen kann. "

“... eine Variable eines Typs sein kann, die variable Daten werden durch das entsprechende Feld in der zval_value Vereinigung vertreten. Die zval selbst hält die Art, Referenzzähler und einen Flag, um anzuzeigen, wenn eine Variable eine Referenz. "

  

Wie funktioniert PHP kompilieren?

„Compile“ ist ein breites Wort, das verschiedene Bedeutungen haben kann und PHP kompiliert nicht im traditionellen Sinne. Es tut eine Art Pre-Kompilation, die den Quellcode in Opcodes umwandelt, sind Anweisungen, die von dem Prozessor ausgeführt werden können. Dieser OP-Codes wird zwischengespeichert, welche PHP verhindert, dass es häufig verwendeten Skripts analysieren müssen.

  

Wie weiß es, was der Variablentyp sein wird? Ist es sogar egal?

Wie bereits oben zitierte es ist die PHP-Engine „ Präferenz zu konvertieren, oder coerce Variablen in die gewünschte Art zur Ausführungszeit .“ Baiscally PHP nicht immer speichern, was es der Typ einer Variablen bestimmt, wenn es erstellt wird, aber wenn eine Variable referenziert wird PHP macht eine weitere Bestimmung dessen, was der Typ basierend auf dem Kontext, in dem sie verwendet wird.

" PHP schwach typisiert ist, die als solche der Motor-API-Funktionen bietet für Variablen von einem Typ in einen anderen umzuwandeln. "

Der Motor eine Reihe von Makros hat es verwendet, um mit den zvals arbeiten so den Typ einer Variablen zu konvertieren, dass Sie in der Regel müssen nicht damit umgehen.

Wenn Sie sehen wollen, was aussehen wie in Aktion zvals können sie mit abgeladen werden:

debug_zval_dump($variableName);

"Wie funktioniert PHP kompiliert? Woher weiß er, was der Variablentyp sein wird? Ist es sogar egal?

Diese Frage hat keine Bedeutung für alles, was ich tue. Ich bin nur neugierig. "

PHP ist eine interpretierte Sprache und es lässt sich nicht kompilieren.

PHP weiß nicht, was geben Sie die Variable sein wird, weil die Art der Variablen durch die Art des Wertes bestimmt wird, die letzte Zeit auf der Variablen zugewiesen wurde.

Sie können dies tun:

$foo = 5;
var_dump($foo);
$foo = "5";
var_dump($foo);
$foo = array();
$foo[] = 0;
$foo[] = 1;
$foo[] = 2;
var_dump($foo);

Wie Sie sehen können, wann immer ein Wert foo zugewiesen wird, kann der Typ geändert werden.

PHP kümmert sich nicht um die Art Ihrer Variable, weil es sich um eine Programmiersprache ist und es nicht über Gefühle.

EDIT:

"Oder bin ich die Äpfel mit Orangen vergleichen?"

Ja, Sie sind. Hier mehr über die Sprache lernen können.

EDIT2:

ist PHP eine Skriptsprache, mit einem Dolmetscher und ohne einen Compiler. Dies bedeutet, dass in PHP können Sie nur Laufzeitfehler erhalten. Es ist eine liberale Sprache, wenn wir Arten betrachten, weil man sich das Recht vor, etwas zu tun mit Ihren Variablen und deren Typen entsprechend wird modifiziert werden müssen, um die Nutzung von ihnen.

Diese Links könnten Ihnen nützlich sein:

http://www.gidforums.com/t-11866.html

http: // www .webmaster-talk.com / Codierung-Forum / 186350-grundlegende-Differenzen-zwischen-php-cc.html

Variable Umfang Unterschied zwischen PHP und C: Block Umfang ist nicht genau die gleiche

Beachten Sie, dass PHP auf dem Server ausgeführt wird, wenn Sie Client-Ereignisse erstellen möchten, Javascript ist mein Vorschlag.

PHP unterstützt jetzt Type Hinting, können Sie Dinge wie ‚string‘ oder ‚Array‘ in Funktionsdefinitionen enthalten, die als die Skripte werden analysiert gefangen werden, um anzuzeigen, gibt es einen Typenkonflikt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top