0
phpオブジェクトをハッシュテーブルに保存する方法と、保存されたphpオブジェクトをphp-extensionのハッシュテーブルから取得する方法は?ここで PHP拡張子のハッシュテーブルにPHPオブジェクトを保存するには?
は私のコードです://object_map has been init and alloc memory
//return_value is the return var of PHP_FUNCTION
zend_class_entry **class_ce,
object_init_ex(return_value, *class_ce); //create object
ioc_add_object_to_hash(name, return_value); //save object
//find in the hashtable
if(zend_hash_find(object_map, name, sizeof(name), (void*)&return_value) == SUCCESS){
php_printf("return_value:%p, %p,type:%d\n", return_value,&return_value, Z_TYPE_P(return_value));
return 0;
}
//definition of ioc_add_object_to_hash
int ioc_add_object_to_hash(const char *name, zval *obj)
{
if(!obj){
return -1;
}
if(!object_map){
return -1;
}
if(zend_hash_update(object_map, name, sizeof(name), obj, sizeof(*obj), NULL) == SUCCESS){
return 0;
}
return -1;
}
PHPコード:
$filelist = array(
"Foo" => realpath(__DIR__)."/Foo.php",
"Bar" => realpath(__DIR__)."/Bar.php",
);
ioc::init($filelist);
var_dump(get_included_files());
Bar::halo();
$foo = ioc::make("Foo");
echo $foo->get();
$foo2 = ioc::make("Foo"); var_dump($foo2);
$ foo2は第二コール・IOC後にNULLです::( "foo" を)作ります。
すべてのコードはhttps://github.com/longmon/php-ioc.gitにプッシュされます。
ありがとうございました!