PHP7 Kernel Analysis 6 Functions
The content of this article is about the functions of PHP7 kernel analysis 6. Now I share it with you. Friends in need can refer to it
1. The storage structure of the function
typedef union _zend_function zend_function; union _zend_function { zend_uchar type; struct { zend_uchar type; zend_uchar arg_flags[3]; uint32_t fn_flags; zend_string *function_name; zend_class_entry *scope; //成员方法所属类,面向对象实现中用到 union _zend_function *prototype; uint32_t num_args; //参数数量 uint32_t required_num_args; //必传参数数量 zend_arg_info *arg_info; //参数信息 } common; zend_op_array op_array; //自定义函数(函数实际编译为普通的zend_op_array) zend_internal_function internal_function; //内部函数(通过扩展或者内核提供的C函数) };
zend_function.common.xx快速访问到zend_function.zend_op_array.xx及zend_function.zend_internal_function.xx zend_function.type取到zend_function.op_array.type及zend_function.internal_function.type
2. Function parameters
The function parameters are actually the same as the local variables within the function in terms of kernel implementation. When the function is called, the value of the parameter will first be copied at the calling location. Go to the respective positions of each parameterAll the above parameter results are saved in the zend_op_array.arg_info array. If the function declares a return value type, a zend_arg_info will also be created for it. This structure is in the first position of the arg_info array. , in this case zend_op_array->arg_info actually points to the second position of the array, and the structure of the return value is read through zend_op_array->arg_info[-1]//参数的额外信息 typedef struct _zend_arg_info { zend_string *name; //参数名 zend_string *class_name; zend_uchar type_hint; //显式声明的参数类型,比如(array $param_1) zend_uchar pass_by_reference; //是否引用传参,参数前加&的这个值就是1 zend_bool allow_null; //是否允许为NULL zend_bool is_variadic; //是否为可变参数,即...用法,function my_func($a, ...$b){...} } zend_arg_info;Copy after login
3. Internal functions
Internal functions refer to functions written in C language provided by the kernel and extensions. Such functions do not need to go through the opcode compilation process, so they are more efficient. Higher than PHP user-defined functions, there is no difference from ordinary C programs when called. The Zend engine defines many internal functions for users to use in PHP, such as: define, defined, strlen, method_exists, class_exists, function_exists...etc., in addition to the internal functions defined in the Zend engine, PHP extensions also A large number of internal functions are provided, and we can also flexibly customize it through extensions.Related recommendations://zend_internal_function头部是一个与zend_op_array完全相同的common结构 typedef struct _zend_internal_function { /* Common elements */ zend_uchar type; zend_uchar arg_flags[3]; /* bitset of arg_info.pass_by_reference */ uint32_t fn_flags; zend_string* function_name; zend_class_entry *scope; zend_function *prototype; uint32_t num_args; uint32_t required_num_args; zend_internal_arg_info *arg_info; /* END of common elements */ void (*handler)(INTERNAL_FUNCTION_PARAMETERS); //函数指针,展开:void (*handler)(zend_execute_data *execute_data, zval *return_value) struct _zend_module_entry *module; void *reserved[ZEND_MAX_RESERVED_RESOURCES]; } zend_internal_function;Copy after loginPHP7 Kernel Analysis 5-Compilation of PHP Code
PHP7 Kernel Analysis 4-Local Variables, Global Variables , Constant
PHP7 Kernel Analysis 3 Variables
The above is the detailed content of PHP7 Kernel Analysis 6 Functions. 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

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

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

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
