Type faible principe de mise en œuvre de PHP

$a = 123;
$b = '456';

var_dump($a); // int(123)
var_dump($b); // string(3) "456"

Une petite grenouille: Les étudiants, aujourd'hui nous partageons le contenu sont les suivants: réalisation du PHP principe faiblement typé, au-dessus du code que nous avons écrit à plusieurs reprises, ne sais pas si vous avez le doute, lorsque la sortie de celui-ci est de savoir comment $ purement numérique et $ b est une chaîne?

Une petite grenouille: Ceci est le type de caractéristiques faibles de PHP, le type faible est de savoir comment y parvenir, nous avons d'abord regarder les variables PHP sous-jacentes pour atteindre

typedef struct _zval_struct zval;
...
struct _zval_struct {
    zvalue_value value; /* 储存变量的值 */
    zend_uint refcount__gc; /* 引用计数,用于GC */
    zend_uchar type; /* 储存变量类型 */
    zend_uchar is_ref__gc; /* 是否为引用,即 &$a */
};

A Ray: Je suis désolé professeur, interrompre, voici ce langage, il semble que vous savez de quelque part - vous vous souvenez?

Une petite grenouille: Oui, vous avez vu, c'est la célèbre langage C, PHP est d'utiliser le langage C, il y a toujours une langue inconnue derrière toutes les langues avec succès -

Un Ray: professeur, je comprends, tapez le type d'enregistrement de la variable, mais ce genre de choses zvalue_value vraiment valeur stockée de la variable

Une petite grenouille: la réponse est correcte, mais le problème à nouveau, nous le savons, mais le langage fortement typé C, 123 et « 456 » à zvalue_value en est de savoir comment le stocker?

A Ray: Ce ...

甲 小浩: Talk est pas cher, montrez-moi le code

typedef union _zvalue_value {
    long lval; /* 长整型 */
    double dval; /* 浮点型 */
    struct {
        char *val;
        int len; /* 字符串的长度 */
    } str; /* 字符串 */
    HashTable *ht; /* 哈希 */
    zend_object_value obj; /* 对象 */
} zvalue_value;

A Ray: C'est ce que l'enfer?

Une petite grenouille: Ceci est un type de données dans la langue C - Communauté: Permet d'adresses de mémoire différentes du même type de données de stockage, vous pouvez définir une variété de types de données, mais chaque fois il ne peut y avoir qu'un seul membre d'une valeur .

Un Ray: tout à coup le brouillard, enfin comprendre PHP est faiblement typé est de savoir comment atteindre, et merveilleux, vraiment merveilleux. Cependant, je trouve à l'intérieur de l'absence de membres de type bool, ni les membres du réseau de stockage, comment est-il?

Une petite grenouille: Très bonne question, parce que la valeur bool seul vrai et faux, peut être comprise comme 1 et 0, de temps peut également être utilisé pour stocker la valeur de la bool, en outre, un tableau PHP est stocké dans la table de hachage, comment atteindre des résultats précis vous pouvez vérifier les informations suivantes

Une petite grenouille: la façon d'ajouter un peu de contenu, beaucoup d'étudiants au moment de l'écriture, je vais écrire

$a = 'abcdefg';
$alen = strlen($a);
for ($i = 0; $i < $alen; $i++) {
    // do something
}

$b = [1, 2, 3, 4, 5, 6];
$bsize = count($b);
for ($j = 0; $j < $bsize; $j++) {
    // do something
}

Une petite grenouille: la peur d'appeler strlen fréquemment et méthode de comptage aura une incidence sur la performance du programme, parce que chaque fois qu'ils doivent calculer la longueur ...... mais en fait tout l'effet contraire, regardé les variables PHP pour atteindre, nous savons que l'appel strlen et seulement lorsque le nombre a acquis len valeurs correspondantes Hashtable et la taille de celui-ci, et ne vont pas à recalculer la longueur et la taille (ce qui est similaire à la mise en œuvre dans de nombreux langues de niveau élevé), nous créons une nouvelle variable pour stocker la taille et à la place LEN nous avons besoin d'ouvrir un nouvel espace pour les stocker, de perdre la mémoire, plus de mal que de bien

Une petite grenouille: soit dit en passant, pour ajouter un peu de contenu, afin d'établir la communauté maximum de membres, à savoir: zend_object_value, espace communautaire occupe 24 octets dans le système 64 bits, zend_object_value occupe 16 octets, et si une valeur bool est stockée, encore va ouvrir beaucoup de mémoire, il a été optimisé pour atteindre ici PHP7 en faveur de la façon dont le pointeur est pas directement stocké dans l'objet lui-même, afin de mettre la communauté spatiale est réduite, ce qui est PHP7 rapidement devenir une raison importante .

Une petite grenouille: Ceci conclut la part d'aujourd'hui! Rendez-vous ~

Publié trois articles originaux · louange gagné 3 · Vues 135

Je suppose que tu aimes

Origine blog.csdn.net/epwqgdnbrh/article/details/104749714
conseillé
Classement