찾다
php教程php手册浅析PHP Extension开发基础篇(3)

浅析PHP Extension开发基础篇(3)

Jun 13, 2016 am 10:42 AM
parsephpzend단계매개변수베이스개발하다분석하다통과하다

解析参数,这一步通过zend_parse_parameters函数实现,这个函数的作用是从函数用户的输入栈中读取数据,然后转换成相应的函数参数填入变量以供后面核心功能代码使用。zend_parse_parameters的第一个参数是用户传入参数的个数,可以由宏“ZEND_NUM_ARGS() TSRMLS_CC”生成;第二个参数是一个字符串,其中每个字母代表一个变量类型,我们只有一个字符串型变量,所以第二个参数是“s”;最后各个参数需要一些必要的局部变量指针用于存储数据,下表给出了不同变量类型的字母代表及其所需要的局部变量指针。

参数解析完成后就是核心功能代码,我们这里只是输出一行字符,php_printf是Zend版本的printf。

最后的返回值也是通过宏实现的。RETURN_TRUE宏是返回布尔值“true”。

使用宏ZEND_BEGIN_ARG_INFO和ZEND_END_ARG_INFO定义参数信息

参数信息是函数所必要部分,这里不做深究,直接给出相应代码:

ZEND_BEGIN_ARG_INFO(arginfo_say_hello_func, 0)    ZEND_END_ARG_INFO()  如需了解具体信息请阅读相关宏定义。

使用宏PHP_FE将函数加入到say_hello_functions中

最后,我们需要将刚才定义的函数和参数信息加入到say_hello_functions数组里,代码如下:

const zend_function_entry say_hello_functions[] = {         PHP_FE(say_hello_func, arginfo_say_hello_func)        {NULL, NULL, NULL}    };  这一步就是通过PHP_EF宏实现,注意这个数组最后一行必须是{NULL, NULL, NULL} ,请不要删除。

下面是编写完成后的say_hello.c全部代码:

 /*       +---------------------------------------------------------------------+    | PHP Version 5                                                        |       +----------------------------------------------------------------------+       | Copyright (c) 1997-2010 The PHP Group                                |       +----------------------------------------------------------------------+      | This source file is subject to version 3.01 of the PHP license,      |     | that is bundled with this package in the file LICENSE, and is        |      | available through the world-wide-web at the following url:           |      | http://www.php.net/license/3_01.txt                                  |      | If you did not receive a copy of the PHP license and are unable to   |       | obtain it through the world-wide-web, please send a note to          |       | license@php.net so we can mail you a copy immediately.               |       +----------------------------------------------------------------------+       | Author:                                                              |      +----------------------------------------------------------------------+     */    /* $Id: header 297205 2010-03-30 21:09:07Z johannes ___FCKpd___14nbsp;*/    #ifdef HAVE_CONFIG_H    #include "config.h"     #endif    #include "php.h"    #include "php_ini.h"     #include "ext/standard/info.h"     #include "php_say_hello.h"     /* If you declare any globals in php_say_hello.h uncomment this:     ZEND_DECLARE_MODULE_GLOBALS(say_hello)     */    /* True global resources - no need for thread safety here */   static int le_say_hello;     /* {{{ PHP_FUNCTION      */   PHP_FUNCTION(say_hello_func)     {         char *name;         int name_len;      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE)       {           return;         }        php_printf("Hello %s!", name);       RETURN_TRUE;     }    ZEND_BEGIN_ARG_INFO(arginfo_say_hello_func, 0)     ZEND_END_ARG_INFO()     /* }}} */    /* {{{ say_hello_functions[]      *      * Every user visible function must have an entry in say_hello_functions[].     */    const zend_function_entry say_hello_functions[] = {         PHP_FE(say_hello_func, arginfo_say_hello_func)         {NULL, NULL, NULL}  /* Must be the last line in say_hello_functions[] */    };     /* }}} */   /* {{{ say_hello_module_entry      */   zend_module_entry say_hello_module_entry = {     #if ZEND_MODULE_API_NO >= 20010901         STANDARD_MODULE_HEADER,     #endif        "say_hello",        say_hello_functions,        NULL,        NULL,         NULL,         NULL,        PHP_MINFO(say_hello),     #if ZEND_MODULE_API_NO >= 20010901        "0.1", /* Replace with version number for your extension */    #endif        STANDARD_MODULE_PROPERTIES     };     /* }}} */   #ifdef COMPILE_DL_SAY_HELLO     ZEND_GET_MODULE(say_hello)    #endif     /* {{{ PHP_MINFO_FUNCTION      */   PHP_MINFO_FUNCTION(say_hello) &nb

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구