On Thu, 2004-02-26 at 08:57, Marcus Boerger wrote:
> Hello Timm,
>
> i think this is not completley correct. When reflection is used from a
> static member of the class itself it should still work.
Correct:
class Foo {
protected function __construct() { }
public static function create() {
$r= new Reflection_Class('Foo');
return $r->newInstance();
}
}
should work as newInstance() is called within the context "Foo".
> We have functions which enable such checks.
I've tried to find out which context I am in. Alas, EG(scope)->name
contains "reflection_class" at the moment I'm trying to check it.
Something like EG(prev_execute_data) might help, but I'm not sure I
should be using it:)
> Could you have a try with those? Also i have
> already incorporated the other patch so you need to update the engine
> sources.
I saw that, but you missed this one (fixes the following segfault:
$ cat reflection_segfault.php
<?php
$r= new Reflection_Class(NULL);
?>
$ php-dev reflection_segfault.php
Segmentation fault (core dumped)
Attached is a one-line patch that fixes it.
- Timm
Index: zend_reflection_api.c
===================================================================
RCS file: /repository/ZendEngine2/zend_reflection_api.c,v
retrieving revision 1.89
diff -u -r1.89 zend_reflection_api.c
--- zend_reflection_api.c 26 Feb 2004 01:06:18 -0000 1.89
+++ zend_reflection_api.c 26 Feb 2004 07:24:07 -0000
@@ -1800,6 +1800,7 @@
zval_add_ref(&argument);
}
} else {
+ convert_to_string_ex(&argument);
if (zend_lookup_class(Z_STRVAL_P(argument), Z_STRLEN_P(argument), &ce TSRMLS_CC) == FAILURE) {
zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC,
"Class %s does not exist", Z_STRVAL_P(argument));
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php