모든 것은 처음이 어렵죠, 그렇죠! !
개발
개발 시 주의해야 할 몇 가지 사항을 기록해 보세요.
여기에는 몇 가지 부분만 있습니다. 자세한 내용은 제 소스 코드를 보시면서 배우는 것이 가장 좋은 방법이라고 생각합니다. 직접 확인하는 방법을 모르면 더 깊은 메모리를 갖게 됩니다.
zval 구조를 이해하세요. zval은 PHP 커널에 정의된 데이터 구조입니다.
함수에 매개변수를 전달하는 방법<code>//定义在Zend/zend_types.h:55 和 Zend/zend.h:322行 typedef struct _zval_struct zval; struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount; zend_uchar type; /* active type */ zend_uchar is_ref; }; 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; //其中的zval.type表示变量的类型,基本类型有下面几种,定义在Zend/zend.h:583中 #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 //部分常用的zval相关函数或者宏,定义在Zend/zend_operators.h:441行 Z_LVAL_P(zval_p) //获取zval_p指针所指向的zval结构的值,值得类型为LONG Z_STRVAL_P(zval_p)</code>
<code>PHP扩展中接受参数的时候通过函数zend_parse_parameters,类似下面的形式进行传参: zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &msg, &msg_len); 第二个参数是要传入参数类型的列表,有下面规范</code>
<code>从PHP5.3开始, zend_parse_paramters_函数新增了如下几个新的类型描述符: f - function or array containing php method call info (returned as zend_fcall_info and zend_fcall_info_cache) H - array or HASH_OF(object) (returned as HashTable) L - long, limits out-of-range numbers to LONG_MAX/LONG_MIN (long) Z - the actual zval (zval**)</code>
<code>zend_declare_property_null(mylogs_ce, ZEND_STRL("level"), ZEND_ACC_PRIVATE TSRMLS_CC); //类似上面的函数是类进行初始化的时候设置变量 zend_declare_class_constant_long(mylogs_ce, ZEND_STRL("LOG_DEBUG"), 0 TSRMLS_CC); //类似上面的函数是类型进行初始化的时候设置常量 zend_read_property(mylogs_ce, instance, ZEND_STRL("level"), 0 TSRMLS_CC); //上面的是从实例instance中读取变量的值 zend_hash_find(&ce->constants_table, ZEND_STRS("LOG_DEBUG"), (void **)&_level); //上面的是从mylogs_ce这个类中读取常量 zend_update_property_long(mylogs_ce, instance, ZEND_STRL("level"), level TSRMLS_CC); //上面的是从instance中读取变量level</code>
<code>centos虚拟机,64位 内存 1G CPU i5-2410M @ 2.30GHz #这个获取到的是我电脑的</code>
次数 | PHP代码 | PHP扩展 |
---|---|---|
第一次 | 8.83s | 6.13s |
第二次 | 8.60s | 6.14s |
平均 | 8.72s | 6.14s |
모든 코드는 github에 올렸습니다:
로그인용 PHP 확장 싱글톤 모드
참고 기사
심층 PHP 변수 저장 구조 - Wen Daxia
2015년 5월 24일 오후 3시 10분 45초이 기사의 저작권은 저자(luluyrt@163.com)에게 있습니다. 기사를 재인쇄한 후 어떠한 형태의 재인쇄도 금지됩니다. , 저자와 저자는 기사 페이지에 명확하게 명시되어야 합니다. 그렇지 않으면 당사는 법적 책임을 추구할 권리를 갖습니다.
위 내용은 내용의 측면을 포함하여 롤링 로깅을 구현하기 위한 PHP 확장-C 확장을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.