diff options
author | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2013-09-12 05:46:02 -0700 |
---|---|---|
committer | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2013-09-12 05:46:02 -0700 |
commit | 9634a336f080bc15c1e67495eb9216d1863808f8 (patch) | |
tree | 139d3abc65f156d5e72e02364481fea370c807dc /src/environment.cpp | |
parent | 68fd128d82819db1022137a45ca3224cee8ef029 (diff) |
It now is possible to access global variables, using environment[varname], and to set global variable using environment[varname] = "value"
Diffstat (limited to 'src/environment.cpp')
-rw-r--r-- | src/environment.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/environment.cpp b/src/environment.cpp new file mode 100644 index 0000000..b2fdad6 --- /dev/null +++ b/src/environment.cpp @@ -0,0 +1,70 @@ +/** + * Environment.cpp + * + * Implementation of the environment class + * + * @author Emiel Bruijntjes <emiel.bruijntjes@copernica.com> + * @copyright 2013 Copernica BV + */ +#include "includes.h" + +/** + * Namespace + */ +namespace Php { + +/** + * Get access to a global variable + * @param name + * @return Global + */ +Global Environment::operator[](const char *name) +{ + // pointer to a zval + zval **varvalue; + + // check if the variable already exists + if (zend_hash_find(&EG(symbol_table), name, strlen(name)+1, (void**)&varvalue) == FAILURE) + { + // the variable does not already exist, return a global object + // that will automatically set the value when it is updated + return Global(name); + } + else + { + // we are in the happy situation that the variable exists, we turn + // this value into a reference value, and return that + return Global(name, *varvalue); + } +} + +/** + * Get access to a global variable + * @param name + * @return Global + */ +Global Environment::operator[](const std::string &name) +{ + // pointer to a zval + zval **varvalue; + + // check if the variable already exists + if (zend_hash_find(&EG(symbol_table), name.c_str(), name.size()+1, (void**)&varvalue) == FAILURE) + { + // the variable does not already exist, return a global object + // that will automatically set the value when it is updated + return Global(name); + } + else + { + // we are in the happy situation that the variable exists, we turn + // this value into a reference value, and return that + return Global(name, *varvalue); + } +} + +/** + * End of namespace + */ +} + |