Methods to implement weak type variables in PHP: 1. Use C to implement weak types through the Zend engine, and use the structure zval to save them in ZE; 2. Use the Zend engine to identify and store various data in PHP Type, select to obtain the value of [zvalue_value] based on type.
Method to implement PHP weakly typed variables:
PHP is a weakly typed, dynamic language script. When declaring a variable, you do not need to specify the data type it holds. For example:
<?php $var = 1; $var = "variable"; $var = 1.00; $var = array(); $var = new Object();
Dynamic variables can be changed during runtime, and there is no need to declare the variable type before use.
Related learning recommendations: PHP programming from entry to proficiency
Question 1. How does the Zend engine use C to implement this weak What about the type?
Actually, variables declared in PHP are stored in ZE using the structure zval.
First we open Zend/zend.h
to see the definition of zval:
typedef struct _zval_struct zval; struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount__gc; zend_uchar type; /* active type */ zend_uchar is_ref__gc; }; typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; } zvalue_value;
Zend/zend_types.h:
typedef unsigned char zend_bool; typedef unsigned char zend_uchar; typedef unsigned int zend_uint; typedef unsigned long zend_ulong; typedef unsigned short zend_ushort;
From the above code, you can see that _zvalue_value
is the key part that actually saves the data. Weakly typed variable declaration through union
Question 2. How does the Zend engine identify and store multiple data types in PHP?
_zval_struct.type
stores the real type of a variable. According to type, you can choose how to get the value of zvalue_value.
Type value list (Zend/zend.h):
#define IS_NULL 0 #define IS_LONG 1 #define IS_DOUBLE 2 #define IS_BOOL 3 #define IS_ARRAY 4 #define IS_OBJECT 5 #define IS_STRING 6 #define IS_RESOURCE 7 #define IS_CONSTANT 8 #define IS_CONSTANT_ARRAY 9
Let’s look at a simple example:
<?php $a = 1; //此时zval.type = IS_LONG,那么zval.value就去取lval. $a = array(); //此时zval.type = IS_ARRAY,那么zval.value就去取ht.
The most complex one, And what is often needed in developing third-party extensions is the "resource type".
In PHP, any variable that does not belong to PHP's built-in variable type will be regarded as a resource and saved.
For example: database handle, open file handle, open socket handle.
For resource types, lval will be used. At this time, it is an integer indicator. Then PHP will query the corresponding resource list in a built-in resource list of PHP based on this indicator. resource.
It is precisely because of ZE's processing method that PHP implements weak types, and for ZE, it always faces the same type zval.
The above is the detailed content of How to implement weakly typed variables in php?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Dreamweaver Mac version
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.
