PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links 
search for in the  
previousReference: Some Configuration MacrosFAQnext
Last updated: Tue, 09 Jul 2002
view the printer friendly version or the printer friendly version with notes or change language to English | Brazilian Portuguese | Chinese | Czech | Dutch | Finnish | German | Hungarian | Italian | Japanese | Korean | Polish | Romanian | Russian | Spanish | Swedish | Turkish

Chapitre 43. API Macros

A set of macros was introduced into Zend's API that simplify access to zval containers (see Tableau 43-1).

Tableau 43-1. API Macros for Accessing zval Containers

MacroRefers to
Z_LVAL(zval)(zval).value.lval
Z_DVAL(zval)(zval).value.dval
Z_STRVAL(zval)(zval).value.str.val
Z_STRLEN(zval)(zval).value.str.len
Z_ARRVAL(zval)(zval).value.ht
Z_LVAL_P(zval)(*zval).value.lval
Z_DVAL_P(zval)(*zval).value.dval
Z_STRVAL_P(zval_p)(*zval).value.str.val
Z_STRLEN_P(zval_p)(*zval).value.str.len
Z_ARRVAL_P(zval_p)(*zval).value.ht
Z_LVAL_PP(zval_pp)(**zval).value.lval
Z_DVAL_PP(zval_pp)(**zval).value.dval
Z_STRVAL_PP(zval_pp)(**zval).value.str.val
Z_STRLEN_PP(zval_pp)(**zval).value.str.len
Z_ARRVAL_PP(zval_pp)(**zval).value.ht
User Contributed Notes
API Macros
add a note about notes
[email protected]
03-Jan-2002 09:51

There are also:

Z_TYPE(zval)
Z_TYPE_P(*zval)
Z_TYPE_PP(**zval)

[email protected]
06-Apr-2002 10:33

These macros can be used to access the boolean value of a zval. Yes, you can use Z_LVAL* for booleans, too, but these macros also do a type cast to zend_bool:

Z_BVAL(zval)
Z_BVAL_P(zval)
Z_BVAL_PP(zval)

[email protected]
06-Apr-2002 10:41

To complete the macro list:

Access an object:
Z_OBJ(zval)
Z_OBJ_P(zval)
Z_OBJ_PP(zval)

Access object property hash table:
Z_OBJPROP(zval)
Z_OBJPROP_P(zval)
Z_OBJPROP_PP(zval)

Access object class entry:
Z_OBJCE(zval)
Z_OBJCE_P(zval)
Z_OBJCE_PP(zval)

Access a ressource (which is fairly the same as Z_LVAL*):
Z_RESVAL(zval)
Z_RESVAL_P(zval)
Z_RESVAL_PP(zval)

[email protected]
06-Apr-2002 10:56

If you are using one of the above macros you definitely want to use one of those convert-functions if you are not sure what data type is stored in the zval:

convert_to_string(zval_p)
convert_to_long(zval_p)
convert_to_double(zval_p)
convert_to_boolean(zval_p)
convert_to_array(zval_p)
convert_to_object(zval_p)

Otherwise you may get undefined results, because Z_STRVAL_P(zval_p) returns nonsense if the zval contains not a string. If you use convert_to_string() before, the value is converted to a string and you can safely access it via the Z_STRVAL* macros.

There are more useful convert-functions:

Resets the zval to NULL:
convert_to_null(zval_p)

Converts to a long by using a special base:
convert_to_long_base(zval_p, base)

There are some more functions which may be useful, but I don't know exactly what they are doing. Just take a look at Zend/zend_operaters.h.

add a note about notes
previousReference: Some Configuration MacrosFAQnext
Last updated: Tue, 09 Jul 2002
show source | credits | stats | mirror sites
Copyright © 2001, 2002 The PHP Group
All rights reserved.
This mirror generously provided by:
Last updated: Sat Aug 31 06:19:44 2002 CEST