篁˜・・F. PHP 3・・‹≦宍

・・・
PHP 3・吾・–∽•違・・・
・・ƒ若‚吟ƒ守–∽•違・‚潟ƒ若ƒ・–号・
・・ƒ・ƒ若・‡阪Š›

・“・・‚祉‚・‚激ƒсƒ潟・HP3・・‹≦宍・号・・・–≪™・‹・・・‚‚・よ‡㏍„・‡・≪с™・‚ PHP4・・–√・・Œ・‚・‹・・с‚・Œ・違€Zend API・・ ・祉‚・‚激ƒсƒ潟‚’茯㏍‚“・с・・•・„・‚PHP・純ƒ若‚鴻・┏・…・・ƒ•・<‚ゃƒ・‚‚ 茯㏍‚€・・‚ˆ・„・с—・‡・†・‚ README.SELF-CONTAINED-EXTENSIONS・„ README.EXT_SKEL・с™・‚

PHP 3・吾・–∽•違・・・

・∽•違ƒ—・㏍ƒˆ・帥‚ゃƒ—

・・・・–∽•違・・・・‚ˆ・†・・就綣・с™・‚
void php3_foo(INTERNAL_FUNCTION_PARAMETERS) {
      
}
・∽•違Œ綣•・違‚’・–・‰・・„・翫ˆ・с‚‚・・“・・‚ˆ・†・・就綣・с‚潟ƒ若ƒ・•・Œ・障™・‚

・∽•違・・・乿/A >

綣•・違・幻・ǖval・‹・с™・‚・“・・ž‹・・€絎Ÿ・›・・・・違・ž‹・’・<ƒ潟ƒ・若・™・‹ union・’・‰・—・・„・障™・‚ ・∽•違Œ篋Œ・ゃ・・・違‚’・–・‹・翫ˆ・・∽•違・œ€・・・・・・‚ˆ・†・・‡・†・’ 茵Œ・・†・“・・・・‚Š・障™・‚

箴‹ F-1. 綣•・違・–緇—

pval *arg1, *arg2;
if (ARG_COUNT(ht) != 2 || getParameters(ht,2,&arg1,&arg2)==FAILURE) {
   WRONG_PARAM_COUNT;
}
羈・„: 綣•・違・€ゆ検・—・с‚‚・‚・ф検・—・с‚‚・‹・障„・障›・“・‚・・<‚‰・・翫ˆ・с‚‚ &(pval *) ・’ getParameters ・・検・™綽…荀・Œ・‚・Š・障™・‚ n ・・›・・ƒ‘・・ƒ<ƒ若‚帥Œ・‚・ф検・—・с‚・‹・‹・・†・‹・’茯帥鴻Ÿ・„・翫ˆ・ ・∽•・ParameterPassedByReference(ht,n) ・’篏睡”・™・‹・“・・Œ・с・障™・‚ ・“・・–∽•違・€1 ・障Ÿ・・0 ・’菴”・—・障™・‚

羝<•・Œ・Ÿ・‘・・ƒ<ƒ若‚帥・・‚Œ・‹・’紊‰・眼™・‹・翫ˆ・ ・‚・ф検・—・с‚・‹・‹・・ゆ検・—・с‚・‹・‹・・‹・‹・・‰・š・ pval_destructor ・’・潟ƒ若ƒ・™・‹・“・・・‚ˆ・Š・・Ÿ・–・™・‹・‹・ ARRAY・・ƒ‘・・ƒ<ƒ若‚帥‚’・・ˆ・Ÿ・„・翫ˆ・・・€ 菴”・Š・ゃ‚’ ARRAY・・—・・‡・†・™・‹ internal_functions.h ・・賢・・–∽•違・・篌若・–∽•違‚’篏睡”・™・‹・“・・Œ・・ƒ純с™・‚

・障Ÿ・・‘・・ƒ<ƒ若‚帥‚’ IS_STRING ・・・・眼™・‹・翫ˆ・ estrdup() ・•・Œ・Ÿ・‡絖—・—・・–‡絖—・—・・•激•・’・€・・・‰蚊‚Š篁˜・‘・Ÿ緇Œ・у・・・・ ・‹・’ IS_STRING ・・・・眼™・‹・“・・Œ・・ƒ純с‚・‹・“・・・絵・・—・・・・•・„・‚ ・™・с・IS_STRING ・障Ÿ・・IS_ARRAY ・с‚・‹・‘・・ƒ<ƒ若‚帥・–‡絖—・—・’ 紊‰・眼™・‹・翫ˆ・・€・・・pval_destructor ・’絎Ÿ茵Œ・™・‹綽…荀・Œ・‚・Š・障™・‚

綣•・違・戎・・/A >

・„綣•・違・ž‹・・pval ・‹・•・cƒ若ƒ・ƒ‰・・・絖˜・•・Œ・障™・‚ ・“・・ž‹・・€罨<・・‚Œ・‹・・™・‹・“・・Œ・с・障™・‚

茵・F-1. PHP ・…・・・ž‹

IS_STRING・‡絖—・—
IS_DOUBLE・膕上墾羌・‹•絨・亥‚姈/TD >
IS_LONG・膕上墾・贋•乿/TD >
IS_ARRAY・・—
IS_EMPTY腥孌/TD >
IS_USER_FUNCTION??
IS_INTERNAL_FUNCTION?? (・“・・†・<・„・・ゃ‹・・–∽•違・検・™・“・・Œ・с・障›・“・‚ - ・Š・・
IS_CLASS??
IS_OBJECT??

・‚・‹・‹・・・・違‚’緇—・Ÿ・Œ・篁–・・ž‹・т戎・・—・Ÿ・„・翫ˆ・・障Ÿ・・€ ・・・・・違‚’綣桁ˆ句š„・・‚・‹・‹・т戎・・—・Ÿ・„・翫ˆ・ 罨<・・・›・∽•違・・‚Œ・‹・’篏睡”・™・‹・“・・Œ・с・障™・‚
convert_to_long(arg1);
convert_to_double(arg1);
convert_to_string(arg1); 
convert_to_boolean_long(arg1); /* ・‡絖—・—・Œ "" ・障Ÿ・・"0" ・・翫ˆ 0・・・・・・・翫ˆ 1 ・・・‚Š・障™ */
convert_string_to_number(arg1);  /* ・‡絖—・—・・・・˜・・€ゃ‚’ LONG ・障Ÿ・・DOUBLE ・・・・眼—・障™  */

・“・Œ・‰・・–∽•違・€・・・・・眼у・・›・•・Œ・障™・‚ ・ゃ・…・菴”・•・Œ・障›・“・‚

絎Ÿ綣•・違・€腟・ˆ篏“・・・・・•・Œ・障™・‚ ・<ƒ潟ƒ・若・€罨<・‚ˆ・†・・・‚Š・障™・‚

  • IS_STRING: arg1->value.str.val

  • IS_LONG: arg1->value.lval

  • IS_DOUBLE: arg1->value.dval

・∽•違・Š・‘・‹・<ƒ≪ƒ・ƒ主・・†

・∽•違・‚ˆ・Š綽…荀・・•・Œ・‹・・・・ƒ<ƒ≪ƒ・ƒ若・€ emalloc() ・障Ÿ・・estrdup() ・・・<‚‰・‹・・‚ˆ・Š 腆坂・・•・Œ・‹綽…荀・Œ・‚・Š・障™・‚・“・Œ・‰・・–∽•違・€ ・š絽吾・malloc() ・Š・ˆ・・strdup() ・∽•違・室・Ÿ ・<ƒ≪ƒ・ƒ守–∫€e‡・†・’茵Œ・†・処院・∽•違с™・‚ ・<ƒ≪ƒ・ƒ若・€efree() ・・‚ˆ・Š・‹・障•・Œ・‹綽…荀・Œ・‚・Š・障™・‚

・“・・ƒ—・㏍‚違ƒ・ƒ・・・€2腮・・・・ƒ<ƒ≪ƒ・ƒ若Œ・‚・Š・障™・‚ ・ゃ障‚Š・・‘・若‚泣ƒ若・・・違・—・・・・•・Œ・‹・<ƒ≪ƒ・ƒ若・ ・…・・–∽•違с・・罨∞š„・・・・狗˜・Ÿ・・・・荀・・ƒ<ƒ≪ƒ・ƒ若с™・‚ ・‡絖—・—・’・‚・‹紊‰・違・撮・ャ—・‘・若‚泣ƒ若・・・—・Ÿ・„・翫ˆ・ ・障š emalloc() ・障Ÿ・・estrdup() ・・・<‚‰・‹・・‚ˆ・Š ・<ƒ≪ƒ・ƒ若‚’腆坂・・™・‹綽…荀・Œ・‚・Š・障™・‚ ・“・・ƒ<ƒ≪ƒ・ƒ若・€・Œ・˜・∽•違・Š・„・・…ƒ・・撮・ュ€ゃ‚’筝Š・吾・—・・„・・Š ・‹・障™・‹・“・・・с・障›・“・‚ (・“・・┏・・ƒ—・㏍‚違ƒ・ƒŸ・潟‚井・・・€・・エ・•・Œ・障›・“・‚)

・・ˆ†・・–∽•違ƒ祉ƒ・‚ゃƒ–・・ƒ・у・荀・・・・‚・„・紙宛膓š・„・<ƒ≪ƒ・‚’腆坂・・™・‹・Ÿ・・・・€ emalloc()・estrdup()・efree() ・∽•違‚’篏睡”・™・‹綽…荀・Œ・‚・Š・障™・‚ ・“・Œ・‰・・–∽•違・€・・Œ・ž・Œ・Œ絲上・・™・‹・∽•・(malloc,strdup,free) ・・…・・Œ・˜・•篏œ・’・—・障™・‚ emalloc() ・障Ÿ・・estrdup() ・’絎Ÿ茵Œ・—・Ÿ・翫ˆ・ ・Ÿ・・—・・—・㏍‚違ƒ・ƒ絎Ÿ茵Œ腟‚篋†・‚・障х∈篆・—・ゃャ‘・‹・ゃ‚‚・Š・с‚・‹・翫ˆ・’・ゃ・ ・・“・‹・・efree() ・’茵Œ・†綽…荀・Œ・‚・Š・障™・‚ ・•・‚・・・違€・<ƒ≪ƒ・ƒ若ƒ・ƒ若‚・‚’莎激“・™・・ƒ醇€сŒ・‚・Š・障™・‚ ・∽•違Œ絲上・・™・‹・・Œ・ž・Œ・Œ・∽•違・…・・Œ・˜・•篏œ・’・™・‹・・„・†・・潟・ 罨<・‚ˆ・†・・‚‚・・с™・‚ ・ゃ障‚Š・emalloc() ・‚ estrdup() ・‚・•・Œ・・„・・„・<ƒ≪ƒ・ƒ若・ゃ„・・efree() ・’茵Œ・cŸ・翫ˆ・・祉‚違ƒ<ƒ潟ƒ†・若‚激ƒсƒ潟ƒ•・・ƒ・ƒˆ・’・榊”Ÿ・™・‹・・ƒ醇€сŒ・‚・Š・障™・‚ ・“・・Ÿ・・羔ˆ莢祉—・Ÿ・<ƒ≪ƒ・ƒ若‚’茹f”障™・‹・›・・・絵・・—・・・・•・„・‚

"-DDEBUG" ・с‚潟ƒ潟ƒ‘・ゃƒ・—・Ÿ・翫ˆ・PHP 3・・€・‡絎š・—・Ÿ・鴻‚・ƒ・ƒ—・ˆ・・・茵Œ・Œ 腟‚篋†・—・Ÿ・›・・€emalloc() ・Š・ˆ・・estrdup() ・х∈篆・—・Ÿ・Œ efree() ・с障・‹・障•・Œ・・„・・„・・ƒ<ƒ≪ƒ・ƒ若・ƒ・‚鴻ƒˆ・’ 茵・ず・—・障™・‚

紊‰・違・‚激ƒ潟ƒœ・・ƒ†・若ƒ–・・吾・┃絎š

・激ƒ潟ƒœ・・ƒ†・若ƒ–・・・・・違‚’荐㊤・・™・‹・“・・‚’絎号˜“・・™・‹・Ÿ・・・ 篁ヤ・・・‚ˆ・†・・ƒž・・ƒ㏍Œ・・„・•・Œ・・„・障™・‚

  • SET_VAR_STRING(name,value)

  • SET_VAR_DOUBLE(name,value)

  • SET_VAR_LONG(name,value)

茘・‘Š

SET_VAR_STRING・’篏睡”・™・‹・翫ˆ・・絵・・Œ綽…荀・с™・‚ value ・・€・<ƒ≪ƒ・・・†・潟ƒ若ƒ‰・Œ緇Œ・・“・・ƒ・ゃƒ潟‚帥・ゃ„・・free ・’ 茵Œ・Š・†・・™・‹・Ÿ・・・‹・•・・malloc ・’茵Œ・†綽…荀・Œ・‚・Š・障™・‚ ・™・„・・∈篆・•・Œ・Ÿ・<ƒ≪ƒ・ƒ若‚’ SET_VAR_STRING ・・検・—・・・・‚Š・障›・“・‚

PHP・・‚激ƒ潟ƒœ・・ƒ†・若ƒ–・・・€・・ƒ・激ƒャƒ†・若ƒ–・・・—・・・茖…・•・Œ・・„・障™・‚ ・„・ゃ・‚“・・・с‚‚ &symbol_table ・・'main' ・激ƒ潟ƒœ・・ƒ†・若ƒ–・・吾・ ・・ゃƒ潟‚帥ƒ若с‚・Š・active_symbol_table ・・上œ・‚≪‚・ƒ†・cƒ–・・ ・激ƒ潟ƒœ・・ƒ†・若ƒ–・・‚’・‡・—・・„・障™・‚(・“・・・・ゃ・・茵Œ・‹紮‹・‚・・・Œ・˜・с™・Œ・ ・∽•違・賢・・„・‹・‚・・・•違・c・„・障™・‚)

罨<・・・・'active_symbol_table' ・’篏睡”・—・障™・‚ 'main' ・激ƒ潟ƒœ・・ƒ†・若ƒ–・・‚’篏睡”・—・Ÿ・„・翫ˆ・・・€ ・“・Œ・’ &symbol_table ・х舟・・‹・ˆ・‹綽…荀・Œ・‚・Š・障™・‚ ・障Ÿ・篁ヤ・・・・・・™・‹・ˆ・†・・Œ・˜・∽•違‚’・・—・・‚‚・・”・™・‹・“・・Œ・с・障™・‚

箴‹ F-3. $foo ・Œ・激ƒ潟ƒœ・・ƒ†・若ƒ–・・・・・・™・‹・‹・・†・‹・’茯帥鴻‚‹

if (hash_exists(active_symbol_table,"foo",sizeof("foo"))) { exists... }
else { doesn't exist }

箴‹ F-4. ・激ƒ潟ƒœ・・ƒ†・若ƒ–・・・‚・‹紊‰・違・‚泣‚ゃ‚冴・・・号–姈/B >

hash_find(active_symbol_table,"foo",sizeof("foo"),&pvalue);
check(pvalue.type);
PHP・・Š・‘・‹・・—・・€・激ƒ潟ƒœ・・ƒ†・若ƒ–・・・Œ・˜・・・ƒ・激ƒャƒ†・若ƒ–・・ ・・‚ˆ・Š絎Ÿ茖…・•・Œ・・„・障™・‚ ・“・・Ÿ・・筝Š荐˜・・・・ゃ・–∽•違・…・—・・†…・・у・・違‚’腆肴・・™・‹・Ÿ・・・‚‚ 篏睡”・・ƒ純с™・‚

・激ƒ潟ƒœ・・ƒ†・若ƒ–・・・…・—・’・域・・・・臂・—・Ÿ・„・翫ˆ・ 罨<・‚ˆ・†・・™・‹綽…荀・Œ・‚・Š・障™・‚

・障š・hash_exists() ・障Ÿ・・hash_find() ・’・・„・・ ・・・…・—・・・・・‚„・・・ˆ‡・・–‹・障•・Œ・・„・‹・‹・・†・‹・’ 腆肴・・™・‹・鴻Œ・・„・с—・‡・†・‚

罨<・€・・・…・—・’罨<・‚ˆ・†・・ˆ・Ÿ・–・—・障™・‚

箴‹ F-5. ・域・・・…・—・・ˆ・Ÿ・–

pval arr;
   
if (array_init(&arr) == FAILURE) { failed... };
hash_update(active_symbol_table,"foo",sizeof("foo"),&arr,sizeof(pval),NULL);
・“・・‚潟ƒ若ƒ‰・・€・≪‚・ƒ†・cƒ–・激ƒ潟ƒœ・・ƒ†・若ƒ–・・・Š・„・・–域・・・—・’絎h・・—・・„・障™・‚ ・“・・…・—・・・・с™・‚

篁ヤ・・・–違—・„・・ƒ潟ƒˆ・・‚’・“・・…・—・・Š・ˆ・‹箴‹・’腓冴—・障™・‚

箴‹ F-6. ・域・・・—・・‚・ƒ潟ƒˆ・・‚’・・ˆ・‹

pval entry;
   
entry.type = IS_LONG;
entry.value.lval = 5;
   
/* $foo["bar"] = 5 ・’絎š臂・™・‹ */
hash_update(arr.value.ht,"bar",sizeof("bar"),&entry,sizeof(pval),NULL); 
 
/* $foo[7] = 5 ・’絎š臂・™・‹ */
hash_index_update(arr.value.ht,7,&entry,sizeof(pval),NULL); 
 
/* $foo[] ・・Š・‘・‹罨<・・・・<ƒ≪ƒ・ƒ若€・ゃ障‚Š $foo[8] ・’ 5 ・・・臂・™・‹
 * (php2 ・・Œ罕˜・・‹•篏œ・—・障™)
 */
hash_next_index_insert(arr.value.ht,&entry,sizeof(pval),NULL);
・・ƒ・激ƒャ・Œ水…ャ•・Œ・Ÿ・ゃ‚’篆・③・—・Ÿ・„・翫ˆ・ ・障š・・ƒ・激ƒャ‹・‰・ゃ‚’・–・Š・冴™綽…荀・Œ・‚・Š・障™・‚ ・・ƒ若ƒ・若ƒ˜・ƒ・‰・’・帥‘・‹・Ÿ・・ pval ** ・’ ・・ƒ・激ƒヤ・・・∽•違・・・ˆ・ ・・ƒ・激ƒャ・†…・・・Œ水…ャ•・Œ・Ÿ荀膣・・‚≪ƒ‰・・‚鴻‚’腓冴™ pval * ・’・・„・・›贋–違‚’茵Œ・†・“・・Œ・с・障™・‚ (筝Š荐˜・・…・・・・・・‚ˆ・†・å・“・・€ゃŒ・NULL ・・翫ˆ・・“・・ƒ‘・・ƒ<ƒ若‚帥・ ・∴・・•・Œ・障™・‚

hash_next_index_insert() ・・€PHP 2.0 ・・"$foo[] = bar;" ・・祉弱Œ・˜・㏍‚吾ƒƒ・・‚’・・„・・„・障™・‚

・∽•違‹・‰・・—・’菴”・™罕‹・・・™・‹・翫ˆ・ 篁ヤ・・・‚ˆ・†・・™・‹・・‘・ч…・—・・ˆ・Ÿ・–・’茵Œ・†・“・・Œ・с・障™・‚

if (array_init(return_value) == FAILURE) { failed...; }

膓š・„・・€・˜・・ƒ‘・守–∽•違‚’・・„・・€ゃ‚’篁˜・・—・障™・‚

add_next_index_long(return_value,long_value);
add_next_index_double(return_value,double_value);
add_next_index_string(return_value,estrdup(string_value));

・‚・<‚・“・篁˜・・Œ・・—・・ˆ・Ÿ・–・翫・・・・・・Œ・・„・翫ˆ・・・€ ・・—・’・障š腆肴・・™・‹綽…荀・Œ・‚・‹・“・・с—・‡・†・‚
pval *arr;
   
if (hash_find(active_symbol_table,"foo",sizeof("foo"),(void **)&arr)==FAILURE) { can't find... }
else { use arr->value.ht... }

hash_find ・・pval ・・ゃƒ潟‚帥吾・ƒ・ゃƒ潟‚帥‚’・—・‘・–・Š・ pval ・・ゃƒ潟‚帥с・・„・“・・・絵・・—・・・・•・„・‚

・祉・‚“・・…・・・ƒ・ƒ・激ƒラ–∽•違・€SUCCESS・障Ÿ・・AILURE・’菴”・—・障™・‚ (・Ÿ・・—・茫–・†・ゃ‚’菴”・™ hash_exists() ・’・ゃ・障™・‚)

膂≦˜・・€ゃ‚’菴”・™・翫ˆ

・∽•違‹・‰・・・・Š・ゃ‚’篏œ・・™・‹・“・・‚’絎号˜“・・™・‹・Ÿ・・・ 茲‡・違・ƒž・・ƒ㏍Œ・・”・・ƒ純с™・‚

RETURN_* ・ž・・ƒ㏍・€・・・・・Š・ゃ‚’・祉ƒƒ・ˆ・—・∽•違‹・‰・祉‚Š・障™・‚

  • RETURN

  • RETURN_FALSE

  • RETURN_TRUE

  • RETURN_LONG(l)

  • RETURN_STRING(s,dup) dup・ŒTRUE・・翫ˆ・・‡絖—・—・’・潟ƒ”・若—・障™・‚

  • RETURN_STRINGL(s,l,dup) ・‡絎š・•・Œ・Ÿ・激•(l)・・–‡絖—・—(s)・’菴”・—・障™・‚

  • RETURN_DOUBLE(d)

RETVAL_* ・ž・・ƒ㏍・・・Š・ゃ‚’・祉ƒƒ・ˆ・—・障™・Œ・・∽•違‹・‰・祉‚Š・障›・“・‚

  • RETVAL_FALSE

  • RETVAL_TRUE

  • RETVAL_LONG(l)

  • RETVAL_STRING(s,dup) dup ・Œ TRUE ・・翫ˆ・・‡絖—・—・’・潟ƒ”・若—・障™・‚

  • RETVAL_STRINGL(s,l,dup) ・‡絎š・•・Œ・Ÿ・激• (l) ・・–‡絖—・— (s) ・’菴”・—・障™・‚

  • RETVAL_DOUBLE(d)

筝Š荐˜・・–‡絖—・—・ž・・ƒ㏍・€・・・'s' 綣•・違・estrdup() ・’茵Œ・„・障™・‚ ・“・・Ÿ・・・ž・・ƒ㏍‚’・潟ƒ若ƒ・—・Ÿ緇Œ・綣•・違‚’絎‰・・・–‹・障™・‹・“・・Œ・с・障™・‚ 篁–・・御Šž・≪・—・・・€・™・„・・∈篆・•・Œ・Ÿ・<ƒ≪ƒ・‚’篏睡”・™・‹・“・・‚‚・с・障™・‚

・∽•違Œ茫–・†・ゃ・—・・ˆ・Ÿ/・・ƒ・ƒ若・・膈”・’菴”・™・翫ˆ・ ・・Œ・ž・Œ RETURN_TRUE ・Š・ˆ・・RETURN_FALSE ・’篏睡”・™・‹・ˆ・†・・—・・・・•・„・‚

茲‡・‘・・€ゃ‚’菴”・™・翫ˆ

・∽•違・‚・ƒ–・吾‚с‚・ƒˆ・„・・—・・„・cŸ茲‡・‘・・ƒ‡・若‚水ž‹・’菴”・™・“・・‚‚・・ƒ純с™・‚

・・ƒ–・吾‚с‚・ƒˆ・’菴”・™・・・€罨<・‚ˆ・†・・—・障™・‚

  1. object_init(return_value) ・’・潟ƒ若ƒ・—・障™・‚

  2. ・・ƒ–・吾‚с‚・ƒˆ・’・ゃуŸ‹・・障™・‚・“・・š›・・”・„・‹・∽•違・・荀с‚’ 篁ヤ・・・ず・—・障™・‚

  3. ・・ƒ純・‚‰・違€・“・・‚・ƒ–・吾‚с‚・ƒˆ・・・–∽•違‚’・脂Œ蚊—・障™・‚ ・・ƒ–・吾‚с‚・ƒˆ・‹・‰・ゃ‚’緇—・‹・Ÿ・・・€・∽•違・€active_symbol_table ・‹・‰ "this" ・’・–緇—・™・‹綽…荀・Œ・‚・Š・障™・‚ "this" ・・ž‹・・€IS_OBJECT ・с‚・‹綽…荀・Œ ・‚・Š・障™・‚・“・Œ・・€・堺œ・š„・・€š絽吾・ƒ・ƒ・激ƒャƒ†・若ƒ–・・с™・‚ (・™・・‚・<€.value.ht ・・€š絽吾・ƒ・ƒ・激ƒラ–∽•違Œ篏睡”・・ƒ純с™) 絎Ÿ・›・・–∽•違・™脂Œ蚊・€罨<・‚ˆ・†・・—・・・茵Œ・с・障™・‚
    add_method( return_value, function_name, function_ptr );

・・ƒ–・吾‚с‚・ƒˆ・’・篏œ・™・‹・Ÿ・・・–∽•違‚’篁ヤ・・・ず・—・障™・‚

  • add_property_long( return_value, property_name, l ) - long ・‹・・'1' ・・„・†・ゃ‚’・‰・™・‹ 'property_name' ・・„・†・・・・ƒ—・㏍ƒ‘・†・c‚’菴遵Š・—・障™

  • add_property_double( return_value, property_name, d ) - ・Œ・˜・с™・Œ・・膕上墾絎Ÿ・違‚’・・ˆ・‹・・“・・Œ・•・„・障™・‚

  • add_property_string( return_value, property_name, str ) - ・Œ・˜・с™・Œ・・‡絖—・—・’・・ˆ・‹・・“・・Œ・•・„・障™・‚

  • add_property_stringl( return_value, property_name, str, l ) - ・Œ・˜・с™・Œ・・激• 'l' ・・–‡絖—・—・’・・ˆ・‹・・“・・Œ・•・„・障™・‚

・・—・’菴”・™・・・・・・‚ˆ・†・・—・障™・‚

  1. array_init(return_value) ・’・潟ƒ若ƒ・—・障™・‚

  2. ・・—・’・ゃуŸ‹・・障™・‚・“・・”・€”・・”・„・‹・∽•違・・荀с‚’篁ヤ・・・ず・—・障™・‚

・・—・’・・„・‹・Ÿ・・・–∽•違・・・・‚ˆ・†・・‚‚・・с™・‚

  • add_assoc_long(return_value,key,l) - ・㏍ƒ・・Œ 'key' ・・‚・ƒ潟ƒˆ・・・long ・・'l' ・’・・ˆ・障™・‚

  • add_assoc_double(return_value,key,d)

  • add_assoc_string(return_value,key,str,duplicate)

  • add_assoc_stringl(return_value,key,str,length,duplicate) ・‡絖—・—・・•激•・’・‡絎š・—・障™・‚

  • add_index_long(return_value,index,l) - 膣√・・Œ 'index' ・・・‚‹・・ƒ潟ƒˆ・・・long ・・'l' ・’・・ˆ・障™・‚

  • add_index_double(return_value,index,d)

  • add_index_string(return_value,index,str)

  • add_index_stringl(return_value,index,str,length) - ・‡絖—・—・激•・’・‡絎š・—・障™・‚

  • add_next_index_long(return_value,l) - 罨<・‚≪‚・‚祉‚鴻•・Œ・‹・・—・・ƒ潟ƒˆ・・・long ・・'l' ・’・・ˆ・障™・‚

  • add_next_index_double(return_value,d)

  • add_next_index_string(return_value,str)

  • add_next_index_stringl(return_value,str,length) - ・‡絖—・—・激•・’・‡絎š・—・障™・‚

・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・戎・・・

PHP ・・・・…・・ž‹・・ƒ・‚純ƒ若‚鴻‚’・・†・™・‹罔™羣–・„・・‰‹罧泣‚’・‰・—・・„・障™・‚ ・“・・‰‹罧泣・€PHP 2.0 ・・ƒ・ƒ潟‚・・・・‚鴻ƒˆ・’絎Œ・・・舟・・‹・ˆ・‹・‚・・с™・‚

・・”・・ƒ純・–∽•乵

  • php3_list_insert(ptr, type) - ・域・・・Œ水…ャ•・Œ・Ÿ・・‚純ƒ若‚鴻・ 'id' ・’菴”・—・障™・‚

  • php3_list_delete(id) - id ・фŒ‡絎š・•・Œ・Ÿ・・‚純ƒ若‚鴻‚’・Š・ゃ—・障™・‚

  • php3_list_find(id,*type) - ・‡絎š・—・Ÿ id ・Œ・‡・™・・‚純ƒ若‚鴻吾・ƒ・ゃƒ潟‚帥‚’ 菴”・—・type ・・・・ƒ・‚純ƒ若‚鴻・ž‹・’篁e…ャ—・障™・‚

・š絽吾€・“・Œ・‰・・–∽•違・SQL ・‰・・‚ゃƒ・主”・・戎・・•・Œ・障™・Œ・ ・•・<‚ゃƒ・・菴医・・・・・†膈‰・・・・・›・š„・・ 篏睡”・™・‹・“・・‚‚・・ƒ純с™・‚

・後ž‹・„・・‚潟ƒ若ƒ‰・・€罨<・‚ˆ・†・・・‚Š・障™・‚

箴‹ F-7. ・域・・・‚純ƒ若‚鴻・申・

RESOURCE *resource;
 
/* ...・・‚純ƒ若‚合”・・ƒ<ƒ≪ƒ・‚’腆坂・・—・・・‚純ƒ若‚鴻‚’・峨・・—・障™... */
/* ・域・・・ƒ・‚純ƒ若‚鴻‚’・・‚鴻ƒˆ・・申・・—・障™ */
return_value->value.lval = php3_list_insert((void *) resource, LE_RESOURCE_TYPE);
return_value->type = IS_LONG;

箴‹ F-8. ・√・・・ƒ・‚純ƒ若‚鴻・戎・・・

pval *resource_id;
RESOURCE *resource;
int type;
 
convert_to_long(resource_id);
resource = php3_list_find(resource_id->value.lval, &type);
if (type != LE_RESOURCE_TYPE) {
php3_error(E_WARNING,"resource index %d has the wrong type",resource_id->value.lval);
	RETURN_FALSE;
}
/* ...・・‚純ƒ若‚鴻‚’篏睡”・—・障™... */

箴‹ F-9. ・√・・・ƒ・‚純ƒ若‚鴻・‰Š・・/B >

pval *resource_id;
RESOURCE *resource;
int type;
 
convert_to_long(resource_id);
php3_list_delete(resource_id->value.lval);
・・‚純ƒ若‚劫ž‹・・php3_list.h ・・enum list_entry_type ・・・™脂Œ蚊™・‹綽…荀・Œ ・‚・Š・障™・‚・・ˆ・・€・・・・–域・・・‚純ƒ若‚劫ž‹・・・臂・・š›・ list.c ・・list_entry_destructor() ・・賢・・shutdown ・・・‚潟ƒ若ƒ‰・’ ・・ˆ・‹綽…荀・Œ・‚・Š・障™・‚(shutdown ・・賢・т・・‚・™・‹綽…荀・Œ・・„・翫ˆ・с‚‚・ 腥冴・‚潟ƒ若ƒ‰・’・・ˆ・‹綽…荀・Œ・‚・Š・障™・‚)

・膓š・„・・‚純ƒ若‚鴻ƒ†・若ƒ–・・・戎・・/A >

PHP ・・€・膓š・„・・‚純ƒ若‚妋・™・・‚・<€・≪‚・‚祉‚拷–“・・・・・•・Œ・‹・・‚純ƒ若‚妌 ・’篆絖˜・™・‹罔™羣–・„・・‰‹罧泣‚’・‰・—・・„・障™・‚ ・“・・・・純‚’・・„・Ÿ・€・・・ƒ≪‚吾ƒャƒ若ƒ・・€MySQL ・≪‚吾ƒャƒ若ƒ・с‚・Š・ mSQL ・Œ緇Œ・・・・・障—・Ÿ・‚ ・“・・Ÿ・・mysql.c ・’茯㏍‚€・“・・・‚ˆ・Š・膓š・„・・‚純ƒ若‚鴻・・荀・с・–≪™・‹ 筝€・・š„・・„Ÿ荀š・’緇—・‹・“・・Œ・с・障™・‚ 荀‹・‹綽…荀・Œ・‚・‹・∽•違・・・・‚ˆ・†・・‚‚・・с™・‚

php3_mysql_do_connect
php3_mysql_connect()
php3_mysql_pconnect()

・膓š・„・≪‚吾ƒャƒ若ƒ・・・・・š„・・€ƒ・ˆ・・・・・‚ˆ・†・・‚‚・・с™・‚

  1. ・祉‚・‚激ƒсƒ・(9) ・・・莠‰・•・Œ・Ÿ罔™羣–・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・…宴・ ・•篏œ・™・‹・≪‚吾ƒャƒ若ƒ・…・・・’・潟ƒ若ƒ‡・cƒ潟‚違—・障™・‚

  2. ・・・ƒ・‚純ƒ若‚鴻Œ・膓š・„・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・—≪・・・・™・‹・‹・・†・‹・’ 腆肴・・™・‹・劫ˆャ・・膓š・∽•違‚’・潟ƒ若ƒ‡・cƒ潟‚違—・障™・‚ ・“・・・罐㏍Œ絎Œ篋†・—・・„・‹・翫ˆ・罔™羣–・・ƒ・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・ ・膓š・„・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・吾・ƒ・ゃƒ潟‚帥・—・・“・・–∽•違‚’・脂Œ蚊—・障™・‚ (1.・…・・‚ˆ・Š・罧‹・Š・・‚潟ƒ若ƒ‰・・›眼<・‹•篏œ・™・‹・・š・с™・‚) 絎Œ篋†・—・・„・・„・翫ˆ・・“・Œ・’篏œ・・—・Ÿ緇Œ・・膓š・„・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・Š・ˆ・ 罔™羣–・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・“・・–∽•違‚’・‡・™・・ゃƒ潟‚帥‚’・・ˆ・障™・‚ ・“・・翫ˆ・・“・・ƒ・ゃƒ潟‚帥Œ罔™羣–・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・‚・‹・Ÿ・・ ・潟ƒ若ƒ‰・・・・Œ・•篏œ・—・障™・‚ 罨≦›ž・ョ・・—・Ÿ・›・・・€・・・ƒ・‚純ƒ若‚鴻Œ・膓š・„・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ ・・‚・‹・Ÿ・・・綺・・・・•・Œ・‹・“・・・篏睡”・•・Œ・障™・‚ ・“・Œ・‰・・ƒ・‚純ƒ若‚鴻・€・ャ・ž‹・・—・・™脂Œ蚊™・‹綽…荀・Œ・‚・Š・障™・‚ (箴‹・ˆ・違€・ž・膓š・„・・ƒ潟‚・”・・LE_MYSQL_LINK・ ・膓š・„・・ƒ潟‚・”・・LE_MYSQL_PLINK)

mysql.c ・’茯㏍‚€・・€・ˆ・Š茲‡・‘・・・膓š・∽•違‚’・ゃ„・・・ƒ≪‚吾ƒャƒ若ƒ・・・・・ƒ・ˆ†・’ 紊‰・眼™・‹綽…荀・Œ・・„・・„・†・“・・Œ・†・‹・‹・с—・‡・†・‚

'list' ・Œ 'plist' ・・舟・・‹・ˆ・‰・Œ・‹・・‘・с€ ・・・Œ・˜・ゃƒ潟‚帥ƒ若ƒ•・сƒ若‚鴻Œ・罔™羣–・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・ ・膓š・„・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・・・・—・障™・‚

  • php3_plist_insert(ptr, type) - ・域・・・Œ水…ャ•・Œ・Ÿ・・‚純ƒ若‚鴻・'id' ・’菴”・—・障™・‚

  • php3_plist_delete(id) - ・‡絎š・•・Œ・Ÿ id ・・ƒ・‚純ƒ若‚鴻‚’・Š・ゃ—・障™・‚

  • php3_plist_find(id,*type) - ・‡絎š・•・Œ・Ÿ id ・・ƒ・‚純ƒ若‚鴻吾・ƒ・ゃƒ潟‚帥‚’菴”・—・ 'type' ・’・・・ƒ・‚純ƒ若‚鴻・ž‹・ф›贋–違—・障™・‚

・—・‹・—・・膓š・„・≪‚吾ƒャƒ若ƒ・‚’絎Ÿ茖…・—・ˆ・†・・™・‹・›・・ ・“・Œ・‰・・–∽•違Œ綵鴻・・・Ÿ・・„・“・・Œ・・‹・‹・翫ˆ・‚・‚・Š・ˆ・障™・‚ ・š絽吾・翫ˆ・・膓š・„・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・Œ・・ƒ・激ƒャƒ†・若ƒ–・・・・‚‚・・с‚・‹ ・・„・†篋‹絎Ÿ・Œ・・”・•・Œ・障™・‚ 箴‹・ˆ・違€MySQL/mSQL ・≪‚吾ƒャƒ若ƒ・・Š・„・・€pconnect() ・潟ƒ若ƒą・膓š・„・ョ・) ・Œ・‚・cŸ・翫ˆ・・・・–∽•違・€・∽•違・検・•・Œ・‹・›・鴻ƒˆ・祉ƒ・ƒ若‚吟ƒ若ƒ祉ƒ‘・鴻ƒ・ƒ若ƒ‰ ・‹・‰・‡絖—・—・’篏œ・・—・障™・‚・・—・・€・“・・–‡絖—・—・’・㏍ƒ若・—・・ SQL ・・ƒ潟‚・‚’・・ƒ・激ƒャ・Š・ˆ・障™・‚ 罨<・・・‹・Œ pconnect() ・’・Œ・˜・›・鴻ƒˆ・祉ƒ・ƒ若‚吟ƒ若ƒ祉ƒ‘・鴻ƒ・ƒ若ƒ‰・с‚潟ƒ若ƒ・ ・—・Ÿ・翫ˆ・・Œ・˜・㏍ƒ若Œ・Ÿ・・•・Œ・障™・‚ ・“・・翫ˆ・・“・・–∽•違・Œ膓š・„・・ƒ潟‚・・ƒ・‚鴻ƒˆ・・‚・‹ SQL ・・ƒ潟‚・‚’荀‹・ゃ‘・障™・‚

・ˆ・Š荅括完・・・菴違Œ茵Œ・・Œ・‹・ˆ・†・・・‚‹・障с€ plist ・・ƒ・ƒ・激ƒャƒ†・若ƒ–・・・・純・戎・・・・’・ャ‚‹・Ÿ・・・・€ mysql.c ・障Ÿ・・msql.c ・’荀‹・‹綽…荀・Œ・‚・Š・障™・‚

羈・„・™・鴻・荀・・‚姃・膓š・„・・‚純ƒ若‚鴻ƒ・‚鴻ƒˆ・・Š・ˆ・‰・Œ・‹・・‚純ƒ若‚鴻・€ PHP ・・ƒ<ƒ≪ƒ・ƒ若ƒž・・若‚吾ƒcх∈篆・•・Œ・Ÿ・‚・・с‚・c・・・‚Š・障›・“・‚ ・™・・‚・<€emalloc(),estrdup()膈‰・х”Ÿ・・•・Œ・Ÿ・‚・・с‚・c・・・‚Š・障›・“・‚ ・€・—・・・š絽吾・malloc(),strdup() 膈‰・’篏睡”・™・‹・鴻・с™・‚ ・・・†・宴・˜膣”・с™・‚・・‚・‚・‚鴻ƒˆ・・・篋†・‚(・’・ƒ・ˆ・・・篋†・‚)・・ PHP ・・ƒ<ƒ≪ƒ・ƒ若ƒž・・若‚吾ƒc‚’篏睡”・—・・∈篆・•・Œ・Ÿ・・・・ƒ<ƒ≪ƒ・ƒ守˜・Ÿ・・€ ・Š・ゃ•・Œ・‹・‹・‰・с™・‚ ・膓š・„・・‚鴻ƒˆ・・€・・‚・‚・‚鴻ƒˆ・・・篋†・‚・・・・祉•・Œ・‹・ˆ・†・・・・c・„・・„・・с€ ・“・・‚ˆ・†・・ƒ・‚純ƒ若‚合∈篆・™・‹・Ÿ・・・ PHP・・ƒ<ƒ≪ƒ・ƒ若ƒž・・若‚吾ƒc‚’篏睡”・™・‹・鴻・с・‚・Š・障›・“・‚

・膓š・„・・‚鴻ƒˆ・・Š・ˆ・ˆ・†・・™・‹・・‚純ƒ若‚鴻‚’・脂Œ蚊™・‹・›・・€ ・ž・膓š・„・・‚鴻ƒˆ・・Œ膓š・„・・‚鴻ƒˆ・・検・鴻・ƒ‡・鴻ƒˆ・・‚・‚帥‚’ ・・ˆ・‹綽…荀・Œ・‚・Š・障™・‚ ・ž・膓š・„・・‚鴻ƒˆ・・ƒ‡・鴻ƒˆ・・‚・‚帥・€篏•・‚・™・‹綽…荀・Œ・‚・Š・障›・“・‚ ・膓š・„・・‚鴻ƒˆ・・ƒ‡・鴻ƒˆ・・‚・‚帥・€・“・・ž‹・・‚ˆ・Š緇—・‰・Œ・Ÿ・・・・ ・・‚純ƒ若‚妋箴‹・ˆ・違€・<ƒ≪ƒ・ƒ若€SQL・・ƒ潟‚・€膈‰)・’・‹・障™・‹綽…荀・Œ ・‚・Š・障™・‚ ・ž・膓š・„・・‚純ƒ若‚鴻・…・・Œ罕˜・・€・・・・ƒ・‚純ƒ若‚鴻・ゃ„・・ƒ‡・鴻ƒˆ・・‚・‚・ ・’・™・ˆ・‹綽…荀・Œ・‚・Š・障™・‚ ・贋・・’荀・™・‹綽…荀・Œ・・„・翫ˆ・・・€・‡・鴻ƒˆ・・‚・‚帥・・・・™・‹・“・・Œ・с・障™・‚ emalloc() ・・・・款・Ÿ・—・Ÿ・‚・・・€・膓š・„・・‚鴻ƒˆ・・–∫€c—・・ 篏睡”・™・‹・鴻・с・・・・“・・‚ˆ・†・・翫ˆ・efree() ・‚篏帥†・鴻・с・・„・・„・† ・“・・‚’荀š・ˆ・・Š・„・・・・•・„・‚

絎Ÿ茵Œ・‚荐㊤・・巡擦・・申・

PHP・・・・純・・・・・€絎Ÿ茵Œ・‚・・┃絎š・’茵Œ・†・“・・Œ・・ƒ純с™・‚ ・“・Œ・‰・・┃絎š・・‘巡擦・・€php3.ini ・•・<‚ゃƒ・障Ÿ・・€Apache ・≪‚吾ƒャƒ若ƒ・‰ˆ・・ ・翫ˆ・Apache .conf ・•・<‚ゃƒ・・›吾‹・Œ・・„・障™・‚ ・“・・Apache .conf ・•・<‚ゃƒ・・賢・・“・Œ・‰・’荐˜莠‰・™・‹・“・・・ˆ・‚鴻・€ ・‡・cƒ・‚・ƒˆ・・・・・┃絎š・Œ・・ƒ純・“・・с™・‚ ・“・Œ・・€箴‹・ˆ・違‚・‹・‡・cƒ・‚・ƒˆ・・・‚・‹ safemodeexecdir ・’ ・‰・—・・„・‹・・・篁–・・ƒ‡・cƒ・‚・ƒˆ・・・€・ャ・‚‚・・‚’・‡絎š・™・‹・“・・Œ ・с・‹・“・・‚’・・潟—・障™・‚ ・“・・┃絎š・・・・・完・‹・•・・€・泣ƒ若ƒ・若Œ茲‡・違・皿・潟ƒ›・鴻ƒˆ・’ ・泣ƒ・若ƒˆ・™・‹・翫ˆ・・‰鴻・梢・・с™・‚

・違—・„・巡擦・’・・ˆ・‹・Ÿ・・・・荀・・‰‹・†・・・・・‚ˆ・†・・‚‚・・с™・‚

  1. mod_php3.h ・・‚・‹ php3_ini_structure・・‘巡擦・’・・ˆ・障™・‚

  2. main.c ・・php3_module_startup ・∽•違‚’膩・›†・—・・・・・Ùfg_get_string() ・障Ÿ・・fg_get_long()・潟ƒ若ƒ・‚’・・ˆ・障™・‚

  3. mod_php3.c ・・php3_commands 罕‹・篏“・・‘巡擦・・句・・・潟ƒ<ƒ潟ƒˆ・’ ・・ˆ・障™・‚・句・・・ƒ・ˆ†・’荐˜・蚊—・・Š・„・・・・•・„・‚ RSRC_CONF・・€Apache .conf ・•・<‚ゃƒ・・・帥‚・‹・巡擦・с™・‚ OR_OPTIONS・巡擦・・€・š絽吾・.htaccess・•・<‚ゃƒ・‚’・・‚€・‚・‰・†・‹ ・贋‰€・・舟・・“・・Œ・с・障™・‚

  4. php3take1handler()・障Ÿ・・hp3flaghandler()・・・<‚‰・‚・巡擦・・ ・≪™・‹・・・・・‚・ƒ潟ƒˆ・・‚’菴遵Š・—・障™・‚

  5. functions/info.c 筝㏍・_php3_info() ・∽•違・ 荐㊤・・祉‚・‚激ƒсƒ潟・€・違—・„・巡擦・’菴遵Š・™・‹綽…荀・Œ・‚・Š・障™・‚

  6. ・€緇Œ・・€・‚・<‚・“・・違—・„・巡擦・’・・“・‹・т戎・†綽…荀・Œ・‚・Š・障™・‚ ・“・・‘巡擦・・€php3_ini.・巡擦 ・・—・・‚≪‚・‚祉‚鴻с・障™・‚