Skip to content

Commit 0bf11fd

Browse files
xingskycnxingskycn
authored andcommitted
add 12.md
1 parent 873515f commit 0bf11fd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+71946
-0
lines changed

02.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
4,解释
3737

38+
#define ZEND_FE_END { NULL, NULL, NULL, 0, 0 }
39+
3840
//参数相关宏的定义 (Zend/zend_API.h)
3941
#define ZEND_ARG_INFO(pass_by_ref, name) { #name, sizeof(#name)-1, NULL, 0, 0, 0, pass_by_ref},
4042

10.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# 类与对像2
2+
3+
1,创建一个扩展
4+
5+
./ext_skel --extname=objects2
6+
7+
8+
2,

12.md

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# 资源类型
2+
3+
1,创建一个扩展
4+
5+
./ext_skel --extname=resource
6+
7+
2,操作函数
8+
9+
/*resource类型在内核中的定义*/
10+
typedef struct _zend_rsrc_list_entry {
11+
void *ptr;
12+
int type;
13+
int refcount;
14+
} zend_rsrc_list_entry;
15+
16+
17+
/*添加分类
18+
zend_register_list_destructors => 没有类别名, resource(4) of type (Unknown)
19+
zend_register_list_destructors_ex => 有类别名, resource(4) of type (Person)
20+
*/
21+
ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void *), int module_number);
22+
ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number);
23+
24+
25+
/*注册resource*/
26+
#define ZEND_REGISTER_RESOURCE(rsrc_result, rsrc_pointer, rsrc_type) zend_register_resource(rsrc_result, rsrc_pointer, rsrc_type TSRMLS_CC);
27+
28+
29+
/*获取resource*/
30+
#define ZEND_FETCH_RESOURCE(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type)
31+
rsrc = (rsrc_type) zend_fetch_resource(passed_id TSRMLS_CC, default_id, resource_type_name, NULL, 1, resource_type);
32+
ZEND_VERIFY_RESOURCE(rsrc);
33+
34+
/*校验resource*/
35+
#define ZEND_VERIFY_RESOURCE(rsrc) \
36+
if (!rsrc) { \
37+
RETURN_FALSE; \
38+
}
39+
40+
3,代码说明
41+
42+
#define PERSON_RESOURCE_TYPE "Person" //resource类型名称
43+
static int person_len; //resource id
44+
typedef struct _person { //resource 结构
45+
char *name;
46+
int name_len;
47+
int age;
48+
}person;
49+
50+
51+
/*添加resource分类*/
52+
PHP_MINIT_FUNCTION(resource){
53+
person_len = zend_register_list_destructors_ex(person_dtor, NULL, PERSON_RESOURCE_TYPE, module_number);
54+
//person_len = zend_register_list_destructors(person_dtor, NULL, module_number);
55+
return SUCCESS;
56+
}
57+
58+
/*释放resource资源,在脚本结束后执行*/
59+
static void person_dtor(void *pers) {
60+
php_printf("call person_dtor function...\n");
61+
person **p = (person**)pers;
62+
if (p && *p) {
63+
if ((*p)->name) {
64+
efree((*p)->name);
65+
}
66+
efree(*p);
67+
}
68+
}
69+
70+
71+
/*实例化并注册resource*/
72+
ZEND_BEGIN_ARG_INFO(person_create_arginfo, 0)
73+
ZEND_ARG_INFO(0, name)
74+
ZEND_ARG_INFO(0, age)
75+
ZEND_END_ARG_INFO()
76+
static PHP_FUNCTION(person_create) {
77+
char *name;
78+
int name_len;
79+
long age;
80+
person *new_person;
81+
82+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &name, &name_len, &age) == FAILURE) {
83+
return;
84+
}
85+
86+
new_person = emalloc(sizeof(person));
87+
new_person->name = estrndup(name, name_len);
88+
new_person->name_len = name_len;
89+
new_person->age = age;
90+
91+
ZEND_REGISTER_RESOURCE(return_value, new_person, person_len);
92+
}
93+
94+
/*获取resource*/
95+
ZEND_BEGIN_ARG_INFO(person_get_name_arginfo, 0)
96+
ZEND_ARG_INFO(0, person)
97+
ZEND_END_ARG_INFO()
98+
static PHP_FUNCTION(person_get_name) {
99+
zval *zperson;
100+
person *p;
101+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zperson) == FAILURE) {
102+
return;
103+
}
104+
ZEND_FETCH_RESOURCE(p, person*, &zperson, -1, PERSON_RESOURCE_TYPE, person_len);
105+
RETURN_STRING(p->name, 1);
106+
}
107+
108+
109+
110+
111+
112+
113+
114+
115+
116+

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020

2121
[9,类与对像1](https://github.com/Leon2012/php-ext/blob/master/09.md)
2222

23+
10,类与对像2
24+
25+
11,类与对像3
26+
27+
[12,资源](https://github.com/Leon2012/php-ext/blob/master/12.md)
28+
2329

2430
#### 附录
2531

codes/resource/.deps

Whitespace-only changes.

codes/resource/.libs/resource.la

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../resource.la

codes/resource/.libs/resource.lai

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# resource.la - a libtool library file
2+
# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.492 2008/01/30 06:40:56)
3+
#
4+
# Please DO NOT delete this file!
5+
# It is necessary for linking the library.
6+
7+
# The name that we can dlopen(3).
8+
dlname='resource.so'
9+
10+
# Names of this library.
11+
library_names='resource.so resource.so resource.so'
12+
13+
# The name of the static archive.
14+
old_library=''
15+
16+
# Libraries that this one depends upon.
17+
dependency_libs=''
18+
19+
# Version information for resource.
20+
current=0
21+
age=0
22+
revision=0
23+
24+
# Is this an already installed library?
25+
installed=yes
26+
27+
# Should we warn about portability when linking against -modules?
28+
shouldnotlink=yes
29+
30+
# Files to dlopen/dlpreopen
31+
dlopen=''
32+
dlpreopen=''
33+
34+
# Directory that this library needs to be installed in:
35+
libdir='/Users/kentchen/GitHub/php/php-5.5.20/ext/resource/modules'

codes/resource/.libs/resource.o

24.4 KB
Binary file not shown.

codes/resource/.libs/resource.so

9.99 KB
Binary file not shown.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>English</string>
7+
<key>CFBundleIdentifier</key>
8+
<string>com.apple.xcode.dsym.resource.so</string>
9+
<key>CFBundleInfoDictionaryVersion</key>
10+
<string>6.0</string>
11+
<key>CFBundlePackageType</key>
12+
<string>dSYM</string>
13+
<key>CFBundleSignature</key>
14+
<string>????</string>
15+
<key>CFBundleShortVersionString</key>
16+
<string>1.0</string>
17+
<key>CFBundleVersion</key>
18+
<string>1</string>
19+
</dict>
20+
</plist>

0 commit comments

Comments
 (0)