返回首页 - Notes - 2014

《深入理解 PHP 内核》阅读笔记


C语言基础补遗

宏定义中,单双 # 号的区别

  1. #:对其后的宏参数进行字符串操作
  2. ##:将两个语言符号组合成单个语言符号

可借用 do-while(0) 结构定义多行宏,示例如下:

#include <stdio.h>

#define MACRO_IF(x) \
do { \
    if ((x) > 0) { \
        printf("Yes\n"); \
    } else { \
        printf("No\n"); \
    } \
} while (0);


int main (int argc, char *argv[]) {
    MACRO_IF(1)
    MACRO_IF(0)

    return 0;
}

预处理后的代码如下:

int main (int argc, char *argv[]) {
    do { if ((1) > 0) { printf("Yes\n"); } else { printf("No\n"); } } while (0);
    do { if ((0) > 0) { printf("Yes\n"); } else { printf("No\n"); } } while (0);

    return 0;
}

定义空操作宏的两种方法:

  1. define MACRO_FREE() do {} while (0)
  2. define MACRO_FREE(...)

改变文件行号(__LINE__)和文件名(__FILE__),如:#line 32 "lib/main.c"


Zend引擎

每一个请求从开始到结束经历的过程如下

  1. 模块初始化:PHP_MINIT_FUNCTION
  2. 模块激活:PHP_RINIT_FUNCTION
  3. 停用模块:PHP_RSHUTDOWN_FUNCTION
  4. 关闭模块:PHP_MSHUTDOWN_FUNCTION

date : 2014-04-03