[PHP5] Generate __isset() methods for setters for PHP 5.1 and later.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9913 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Olly Betts 2007-08-25 13:11:25 +00:00
commit e59dbf74f2
2 changed files with 24 additions and 5 deletions

View file

@ -1,6 +1,9 @@
Version 1.3.32 (in progress) Version 1.3.32 (in progress)
============================ ============================
08/25/2007: olly
[PHP5] Generate __isset() methods for setters for PHP 5.1 and later.
08/20/2007: wsfulton 08/20/2007: wsfulton
[Java C#] Fix director bug #1776651 reported by Jorgen Tjerno which occured when [Java C#] Fix director bug #1776651 reported by Jorgen Tjerno which occured when
the director class name is the same as the start of some other symbols used within the director class name is the same as the start of some other symbols used within

View file

@ -27,12 +27,9 @@
* This is an optimisation - we could handle this case using a PHP * This is an optimisation - we could handle this case using a PHP
* default value, but currently we treat it as we would for a default * default value, but currently we treat it as we would for a default
* value which is a compound C++ expression (i.e. as if we had a * value which is a compound C++ expression (i.e. as if we had a
* a method with two overloaded forms instead of a single method with * method with two overloaded forms instead of a single method with
* a default parameter value). * a default parameter value).
* *
* Create __isset method for PHP 5.1 and later (we can probably just
* always generate as PHP 5.0 should just ignore it).
*
* Long term: * Long term:
* *
* Option to generate code to work with PHP4 instead ("public $_cPtr;" -> * Option to generate code to work with PHP4 instead ("public $_cPtr;" ->
@ -2372,7 +2369,26 @@ public:
Printf(s_phpclasses, "\t\tif (function_exists($func)) call_user_func($func,$this->%s,$value);\n", SWIG_PTR); Printf(s_phpclasses, "\t\tif (function_exists($func)) call_user_func($func,$this->%s,$value);\n", SWIG_PTR);
} }
Printf(s_phpclasses, "\t}\n"); Printf(s_phpclasses, "\t}\n");
/* FIXME: also create __isset for PHP 5.1 and later? */
/* Create __isset for PHP 5.1 and later; PHP 5.0 will just ignore it. */
Printf(s_phpclasses, "\n\tfunction __isset($var) {\n");
// FIXME: tune this threshold, but it should probably be different to
// that for __set() and __get() as we don't need to call_user_func()
// here...
if (Len(shadow_set_vars) == 1) {
// Only one setter, so just check the name.
Printf(s_phpclasses, "\t\treturn ");
while (ki.key) {
key = ki.key;
Printf(s_phpclasses, "$var == '%s'", ki.key);
ki = Next(ki);
if (ki.key) Printf(s_phpclasses, " || ");
}
Printf(s_phpclasses, ";\n");
} else {
Printf(s_phpclasses, "\t\treturn function_exists('%s_'.$var.'_set');\n", shadow_classname);
}
Printf(s_phpclasses, "\t}\n");
} }
// Write property GET handlers // Write property GET handlers
ki = First(shadow_get_vars); ki = First(shadow_get_vars);