you can do this only with a not-so nice hack. essentially you have to
manually search the active symbol table stack for a zval * which equals your
variable. zend_hash_find wont help you, since you're doing a "reverse"
lookup. so the process is something like (totally OTTOMH)

    HashTable *table = EG(active_symbol_table);
    char *name_im_looking_for = NULL;

    while (table && !name_im_looking_for) {
        if (name_im_looking_for = find_name(table, zval
*zval_ptr_im_looking_for)) break;
        table = get_prev_symbol_table(); /* you're on your own here - i have
no idea how to do this*/
    }


static char *find_name(HashTable * table, zval *zval_ptr_im_looking_for)
{
    zval **entry;

     zend_hash_internal_pointer_reset(table);
     while (zend_hash_get_current_data( hash, (void**)&entry) == SUCCESS) {
            if (*entry = zval_ptr_im_looking_for) {
                  char *string_key;
                  ulong num_key, key_len;

                  if (HASH_KEY_IS_STRING ==
zend_hash_get_current_key_ex(hash, &string_key, &key_len, &num_key, 0,
NULL)) {
                        return string_key:
                   }

         }
        zend_hash_move_forward(hash);
    }   /* while */
    return NULL;
}

----- Original Message -----
From: Klaus Reimer <[EMAIL PROTECTED]>
Newsgroups: php.dev
To: <[EMAIL PROTECTED]>
Sent: Monday, March 04, 2002 3:11 PM
Subject: Get object name


> Hi,
>
> I need to acces the name of an object in a class method written in C. How
can
> I do this? Example:
>
> I have the following PHP code
>
>   $Test=new CMyClass();
>   $Test->print_obj_name();
>
> and I have the following print_obj_name()-method written in C:
>
>   ZEND_NAMED_FUNCTION(cmyclass_print_obj_name) {
>     zend_printf("%s\n",doSomethingMagic());
>   }
>
> How can I do the doSomethingMagic() part so my method prints the object
name
> ("Test")? I can access the CLASS name with
>
>   getThis()->value.obj.ce->name
>
> but I need the variable name of the class instance ("Test" in this case).
How
> can I do this?
>
> --
> Bye, K <http://www.ailis.de/~k/>
> [A735 47EC D87B 1F15 C1E9  53D3 AA03 6173 A723 E391]
> (Finger [EMAIL PROTECTED] to get public key)
Klaus Reimer <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED].;
> Hi,
>
> I need to acces the name of an object in a class method written in C. How
can
> I do this? Example:
>
> I have the following PHP code
>
>   $Test=new CMyClass();
>   $Test->print_obj_name();
>
> and I have the following print_obj_name()-method written in C:
>
>   ZEND_NAMED_FUNCTION(cmyclass_print_obj_name) {
>     zend_printf("%s\n",doSomethingMagic());
>   }
>
> How can I do the doSomethingMagic() part so my method prints the object
name
> ("Test")? I can access the CLASS name with
>
>   getThis()->value.obj.ce->name
>
> but I need the variable name of the class instance ("Test" in this case).
How
> can I do this?
>
> --
> Bye, K <http://www.ailis.de/~k/>
> [A735 47EC D87B 1F15 C1E9  53D3 AA03 6173 A723 E391]
> (Finger [EMAIL PROTECTED] to get public key)



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to