Question

Je n'ai pas fait beaucoup dans beaucoup de programmation langues, mais je sais que dans C (++), vous devez déclarer un type variable (int, char, etc).

En PHP vous, bien sûr, ne pas le faire. Vous pouvez commencer avec $str = "something"; puis plus tard $str = array("something" => "smells"); et elle est heureuse.

Comment compiler PHP? Comment sait-il ce qui va être le type de variable? Est-ce même soin?

Cette question n'a rien à voir tout ce que je fais. Je suis juste curieux.

EDIT.

Je dois clarifier cette question un peu.

En C, si je dis:

int y;

Il se réserve un montant x d'octets pour y. Si les dépassements de y, mauvaises nouvelles.

PHP n'a pas cette nature (au moins je ne pense pas que ce soit).

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

Il est tout de même à la langue. Comment sait-il combien réserve? Ou suis-je comparer des pommes oranges? Si je vais sur ce mal, avez-vous des bons sujets que je peux lire pour mieux comprendre?

Était-ce utile?

La solution

Puisque vous avez de l'expérience C, envisager une variable PHP à être comme suit:

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

lorsque vous créez une nouvelle variable, il va créer un variable_t, donnez-lui une étiquette de type (permet de dire que 1 pour int, 2 pour la chaîne), et la stocker dans un endroit de la liste (par la portée, la référence par son nom). Le contenu réel seront stockés dans *data. Lorsque la variable est accessible à nouveau, le type peut être déterminée à partir int varType, et l'action prise sur void* data correspond le, comme l'utilisation comme un int ou une chaîne.

Imaginez que le PHP Snippet:

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

produit instructions comme suit (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

Ce type d'oeuvres de données dans bytecoded augmentée, compilés ou diriger des langages interprétés.

Il y a plus de détails en ce qui concerne à différentes implémentations de la machine virtuelle (allocation locale, l'allocation tas, machines virtuelles registre, etc.). Si vous voulez vraiment comprendre comment les machines virtuelles travail, la meilleure référence est Lua. Très propre langue, bytecode très propre, et la machine virtuelle très propre. PHP est probablement la dernière application que vous devriez regarder.

Autres conseils

PHP ne compile pas vraiment -. Il sera interprété (en op-codes)

Quasiment si vous essayez de faire quelque chose sur un certain type de données qui ne peut être fait, il vous donnera une erreur. Il n'y a pas de vérification de type.

Il ne compile pas. Il est langage interprété , comme Javascript.

Je sais que c'est une vieille question, mais voici quelques informations plus précises sur la façon dont les poignées PHP questions posées par l'OP.

Ceci est la page de la référence PHP que vous voudriez commencer par:

Introduction aux variables

Je sais pas de liaison est préféré, mais ce lien doit être stable et je ne veux pas copier de gros documents de référence PHP. Voici les faits saillants.

  

OP: Comment savoir PHP quel type de variables qu'il utilise (ou le fait)

PHP est écrit en C et utilise un typedef struct C qui appelle une zval avec un typedef union C qui est appelle zval_value pour représenter toutes les variables.

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;

« Les tentatives de moteur pour couvrir la complexité du concept d'une variable qui peut être tout type en fournissant un ensemble uniforme et intuitive des macros permettant d'accéder aux structures divers domaines . »

"PHP est une dynamique, langage faiblement typé, qui utilise copy-on-write et le comptage de référence." Comptage de référence et Copy-on-write (GC) sont deux utilisations PHP concepts puissants que je ne vais pas développer ici, mais lisez une valeur d'environ.

" typage faible est implicite de la préférence du moteur à convertir ou variables COERCE dans le type requis au moment de l'exécution . Comptage de référence est le moyen par lequel le moteur peut déduire lorsqu'aucun une variable plus a toute référence dans le code de l'utilisateur, et est donc en mesure de libérer les structures associées à la variable ".

" Le zval_value est une union qui peut représenter tous les types une variable peut tenir. "

» ... une variable peut être d'un type, les données variables est représentée par le champ approprié dans l'Union zval_value. Zval lui-même contient le type, le nombre de référence et un drapeau pour indiquer si une variable est une référence. "

  

Comment compiler PHP?

« Compile » est un grand mot qui peut avoir des significations différentes et PHP ne compile pas dans le sens traditionnel du terme. Il fait faire une sorte de pré-compilation qui convertit le code source en opcodes qui sont des instructions qui peuvent être exécutées par le processeur. Ces opcodes sont mises en cache qui empêche PHP d'avoir à analyser des scripts fréquemment appelés.

  

Comment sait-il ce que le type de variable va être? Est-ce même soin?

Comme déjà cité ci-dessus, il est le moteur PHP est « préférence à convertir ou variables COERCE dans le type requis au moment de l'exécution . » Baiscally PHP ne stocke toujours ce qu'il détermine le type d'une variable à quand il est créé, mais quand une variable est référencée PHP fait une autre détermination de ce type est basée sur le contexte dans lequel il est utilisé.

" PHP est faiblement typé, en tant que tel le moteur fournit des fonctions d'API pour convertir les variables d'un type à l'autre. "

Le moteur a un ensemble de macros qu'il utilise pour travailler avec les Zvals pour convertir avec cela.

afin que vous n'avez pas l'habitude de traiter le type d'une variable

Si vous voulez voir ce Zvals regard comme dans l'action, ils peuvent être sous-évaluées avec:

debug_zval_dump($variableName);

"Comment compiler PHP? Comment sait-il ce que le type variable va être? Est-ce même soin?

Cette question n'a rien à voir tout ce que je fais. Je suis juste curieux. "

PHP est un langage interprété et il ne compile pas.

PHP ne sait pas quel type de la variable va être, parce que le type de la variable est déterminée par le type de la valeur qui a été attribué la dernière fois à cette variable.

Vous pouvez faire ceci:

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

Comme vous pouvez le voir, chaque fois qu'une valeur est affectée à foo, le type peut être modifié.

PHP ne se soucient pas du type de votre variable, car il est un langage de programmation et il ne dispose pas de sentiments.

EDIT:

"Ou suis-je comparer des pommes oranges?"

Oui, vous êtes. vous pouvez en savoir plus sur la langue.

EDIT2:

PHP est un langage de script avec un interprète et sans un compilateur. Cela signifie que PHP vous ne pouvez obtenir des erreurs d'exécution. Il est une langue libérale si l'on considère les types, parce que vous avez le droit de faire quoi que ce soit avec vos variables et leurs types seront modifiés en fonction de l'utilisation d'entre eux.

Ces liens pourraient vous être utile:

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

http: // www .webmaster-talk.com / codage forum / 186350-différences fondamentales-entre-php-cc.html

variable différence de portée entre PHP et C: la portée du bloc est pas exactement la même

Notez que PHP est exécuté sur le serveur, si vous voulez créer des événements client, Javascript est ma suggestion.

PHP supporte maintenant le type hinting, vous pouvez inclure des choses comme « chaîne » ou « tableau » dans les définitions de fonction qui sont pris comme les scripts sont analysés pour indiquer il y a une incompatibilité de type.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top